みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

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

解決済みの質問

新着情報のような記事投稿をつくろうとしているのですが、POSTの受け渡し?やMySQLへのデータ登録がうまくいきません。

やりたいこと
1、form.phpからview.phpへフォームでPOSTデータを送り、
2、view.phpでは、MySQLへの接続と、受け取ったPOSTデータを変数へ格納して、データベースへ登録する前に、プレビュー画面で確認する。
4、登録ボタンを押したら、「登録しました。」というメッセージを表示し、データベースへ登録する。

受け取ったPOSTデータをプレビュー画面にすることはできたのですが、その後の、「4」の部分が作れません。どうかアドバイスお願いいたします。

view.php //////////////////////////////////////////////////
$host = "localhost";
$conn = mysql_connect($host, "root", "root");
mysql_select_db("my_db", $conn);

$date = $_POST['date'];
$title = $_POST['title'];
$text = $_POST['text'];

$form = <<<EOM
<form action="view.html" method="post">
<table>
<tr>
<td日付td><td>$date</td>
</tr>
<tr>
<td>タイトル</td><td>$title</td>
</tr>
<tr>
<td>本文</td><td>$text</td>
</tr>
<tr>
<td><input type="submit" name="check" value="登録" />
<input type="button" name="back" value="戻る" /></td>
</tr>
</table></form>
EOM;

//ここにいろいろと書いて試してみました
-----------------------------------------------
//試したこと1

$sql = "INSERT INTO topic_table(date, title, text,)VALUES('$date', '$title', '$text')";
mysql_query($sql, $conn)
or die($form_a="登録できませんでした");
($form_a="登録しました。");

↑これだとview.phpを開いただけでデータベース登録されてしまいました。
-----------------------------------------------
試したこと2

if($_POST['check'] == "登録"){
$sql = "INSERT INTO topic_table(date, title, text,)VALUES('$date', '$title', '$text')";
mysql_query($sql, $conn)
or die($form_a="登録できませんでした");
($form_a="登録しました。");
}

↑登録ボタンを押して、データベースに登録する、というのをif文で作ってみましたが失敗しました。(POSTデータではなくただの空白しかデータベースには登録されませんでした。)

投稿日時 - 2008-05-01 11:15:51

QNo.3989475

すぐに回答ほしいです

質問者が選んだベストアンサー

皆さんの回答の他にも、セッションで持っておく方法もあります。

hiddenに関しては、確かに偽造などの可能性もありますが、全画面でユーザーが入力したものだけを置くのでしたら、そう深刻に考えないでいい場合もあります。必要なら本登録前に、妥当性チェックをしてください。

データベースの仮登録も魅力ですが、確認画面でユーザーがブラウザを終了したりすると、仮登録データがゴミとなって残ります。放置しておいても別に構わないかもしれませんが・・・

セッションはサーバー上にデータを持ちますので、セキュリティ面でも優れてますし、データベースをいじってないのでゴミはたまりません。

投稿日時 - 2008-05-01 14:43:15

お礼

ご回答ありがとうございました。セッションで試してみたら、見事成功しました!数日間ずっと考えていたので、本当に嬉しいです!!ありがとうございました!!

投稿日時 - 2008-05-01 18:26:00

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

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

回答(3)

ANo.2

view.phpにhiddenでデータを埋め込んで登録ボタンが押されたらDBへ登録するやり方もありですが
view.phpのソースを見られると丸わかりなのでセキュリティ上あまりお勧めできません。
せっかくDBがあるのですからこうしてみてはいかがでしょうか?
登録するDBに確定データフィールドを作っておいて
form.phpからview.phpへデータを送ったらとりあえずDBへ登録し
DBから仮登録番号をview.phpにhiddenで埋め込み
そして登録ボタンが押されたら仮登録番号を元に確定フィールドの値を1にする。
表示する時はSQLでWHERE 確定フィールド=1とすればOKです。
この場合だとフォームには書いてくれたけど登録を押していないデータも
後から確認する事も出来ますし不正なアクセスも防止できます。

投稿日時 - 2008-05-01 14:26:09

お礼

ご回答ありがとうございました。セキュリティの観点からもお話いただけてたいへん勉強になりましたm(__)m初心者の自分にはまだまだ難しいので、これから勉強していこうと思います。

投稿日時 - 2008-05-01 18:18:42

ANo.1

登録ボタンのformに「最初に入力した=POSTで受け取った」内容をhiddenで埋め込んでおかないと取得できません。基本的に「前回POSTされた内容」とか「前回実行時の変数の内容」などは何も保持されませんので、自分で受け渡すための仕掛けを組み込む必要があります。

投稿日時 - 2008-05-01 11:24:28

お礼

ご回答ありがとうございました。hiddenは他のソースで見たことがありますが、そういう使い方をするのですね!同じページ内ならPOSTデータを使いまわすことができるなどと勝手に解釈していました。勉強になりますm(__)mありがとうございました。

投稿日時 - 2008-05-01 18:11:22

あなたにオススメの質問