こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

入力フォーム内容のDB保存について

MySQLへの登録処理についての質問お願いします。
サイトの登録用ページを作っていていて、PHPでmySQLにデータを保存する。
というながれのプログラムを作っています。
空白のまま「送信」を押すと、空白エラー「メールアドレスを入力してください」のメッセージが出るようになっています。
その後のDB保存がどうしてもうまくいかないので間違えをご指摘いただければ幸いです。
DB接続は、 'データベースに接続しました'と表示されています。
soushin.phpの最後に記述しているheader('Location: soushin.php');が正しいのかもわかりません。
よろししくお願いします。


//index.php

<html>
<body>

<form action="" method="POST" >
<label for="mail">メールアドレス</label>

<input name="mail" type="text" id="mail" size="35" maxlength="255" >
<?php if($error['mail'] == 'blank'):?>
<p class="error">メールアドレスを入力してください</p>
<?php endif; ?>
<br>
<input type="submit" value="上記に同意して仮登録メールを送信">
</form>


</body>
</html>



//soushin.php

<?php
session_start();
mysql_connect('localhost','my_db','') or die(mysql_error());
echo 'データベースに接続しました';
mysql_select_db('kaiin_touroku');
mysql_query('SET NAMES UTF8');

if (!isset($_SESSION['join'])) {
    header('Location: index.php'); exit();
}

if (!empty($_POST)){
    //登録を処理する
    $sql = sprintf('INSERT INTO kaiin_touroku SET mail="%s"',
    mysql_real_escape_string($_SESSION['join']['mail'])
);
mysql_query($sql) or die(mysql_error());

header('Location: soushin.php');
}
?>


<!DOCTYPE HTML>



<form action="" method="post">
 <dl>
 <dd>
<?php echo htmlspecialchars($_SESSION['join']['mail'], ENT_QUOTES, 'UTF-8'); ?>に送信いたしました。
 </dd>
 </dl>
 </form>

投稿日時 - 2012-05-09 14:52:07

QNo.7466393

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

ANo.1です

× mysql_last_error()
○ mysql_error()

ですね。失礼しました。

投稿日時 - 2012-05-09 17:02:21

お礼

shimix 様

お礼が遅れました。
前回の質問に続き、ご回答ありがとうございます!!
お世話になります!!

なんとかフォーム内容のDB保存はクリアすることができました><

まだまだ自分も構築をメインで進めておられる方も、PHPに関して初心者の為、調べながらの構築となっています。。
壁にぶつかってばかりですが、みなさんの回答に助けられて少しずつですが進んでいってます><!

本当に毎回助けられております!!
ありがとうございます!

投稿日時 - 2012-05-12 00:34:25

ANo.1

何点か・・・

0)
>どうしてもうまくいかない

「登録されない」ということでしょうか?mysql_last_error()でどういうエラーになっているか確認するとか、$sqlの内容を(画面出力して)コピペしてphpMyAdminでSQL実行してみるとか、デバッグとして出来ること・やらなければいけないことはたくさんあると思います。どこまで試されましたか?

これがひとつも思いつかないならまだ開発は無理です。いったん習作レベルに戻るべきです。

1)
$_SESSION['join']のチェック(存在しなければindex.phpに戻す)はsession_start()の直後でいいのでは(データベース接続のコストを払う意味がない)。

2)
「set names」ではなく、mysql_set_charsetを使ってください(http://jp.php.net/manual/ja/function.mysql-set-charset.php)。

3)
>header('Location: soushin.php');が正しいのかもわかりません。

何のために記述しているのかわかりません。データベースに(仮)登録したらメールを送信して(送信結果がNGならレコードのdeleteもあり得る)、あとは「メールを送信しました」の表示でいいのでは?

4)
データベースに登録しているのが「メールアドレスだけ」で(過去に何度か指摘された)ハッシュ値も登録日時もありませんね(これから追加するのかもしれませんが)。

投稿日時 - 2012-05-09 16:59:54

あなたにオススメの質問