やりたいこと
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データではなくただの空白しかデータベースには登録されませんでした。)
No.3ベストアンサー
- 回答日時:
皆さんの回答の他にも、セッションで持っておく方法もあります。
hiddenに関しては、確かに偽造などの可能性もありますが、全画面でユーザーが入力したものだけを置くのでしたら、そう深刻に考えないでいい場合もあります。必要なら本登録前に、妥当性チェックをしてください。
データベースの仮登録も魅力ですが、確認画面でユーザーがブラウザを終了したりすると、仮登録データがゴミとなって残ります。放置しておいても別に構わないかもしれませんが・・・
セッションはサーバー上にデータを持ちますので、セキュリティ面でも優れてますし、データベースをいじってないのでゴミはたまりません。
ご回答ありがとうございました。セッションで試してみたら、見事成功しました!数日間ずっと考えていたので、本当に嬉しいです!!ありがとうございました!!
No.2
- 回答日時:
view.phpにhiddenでデータを埋め込んで登録ボタンが押されたらDBへ登録するやり方もありですが
view.phpのソースを見られると丸わかりなのでセキュリティ上あまりお勧めできません。
せっかくDBがあるのですからこうしてみてはいかがでしょうか?
登録するDBに確定データフィールドを作っておいて
form.phpからview.phpへデータを送ったらとりあえずDBへ登録し
DBから仮登録番号をview.phpにhiddenで埋め込み
そして登録ボタンが押されたら仮登録番号を元に確定フィールドの値を1にする。
表示する時はSQLでWHERE 確定フィールド=1とすればOKです。
この場合だとフォームには書いてくれたけど登録を押していないデータも
後から確認する事も出来ますし不正なアクセスも防止できます。
ご回答ありがとうございました。セキュリティの観点からもお話いただけてたいへん勉強になりましたm(__)m初心者の自分にはまだまだ難しいので、これから勉強していこうと思います。
No.1
- 回答日時:
登録ボタンのformに「最初に入力した=POSTで受け取った」内容をhiddenで埋め込んでおかないと取得できません。
基本的に「前回POSTされた内容」とか「前回実行時の変数の内容」などは何も保持されませんので、自分で受け渡すための仕掛けを組み込む必要があります。ご回答ありがとうございました。hiddenは他のソースで見たことがありますが、そういう使い方をするのですね!同じページ内ならPOSTデータを使いまわすことができるなどと勝手に解釈していました。勉強になりますm(__)mありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- PHP PHP MySQLに画像を直接保存 2 2022/06/05 11:50
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- JavaScript EasyUIのSubGrid(jquery)におけるObjectに入れた連想配列について 1 2022/05/02 11:21
- JavaScript 追加ボタンを押した際に ok ボタンを押した場合のみ入力値が追記されるようにしたいです 6 2022/05/29 09:57
- HTML・CSS テーブルタグのセルの幅の一部だけを指定 1 2023/03/12 12:02
- PHP 重複を防ぐ記述について教えて下さい。 3 2023/04/03 14:35
- HTML・CSS 私の能力からして間違っていないような気がします。 4 2022/09/30 13:24
- Visual Basic(VBA) Selenium.ChromeDriverの使い方について 7 2022/09/22 06:43
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フォームを使わずにPOST送信す...
-
PHPで返信メールにチェックボッ...
-
HTMLエスケープすべき場所につ...
-
IFRAME内PHPのセッション変数取...
-
動的にhtmlテーブルを表示
-
リストボックスにテキスト入力...
-
ログイン画面から入って、「戻...
-
phpでの値を受け渡し方法につい...
-
switch()文で値の大小比較
-
「取得先」という表現について
-
【C#】DataGridViewの最大列数...
-
Dosブロンプトでtabを出力したい
-
shシェルスクリプト 空白行の...
-
phpでcookieがうまく保存されない
-
DTOとEntityの差は何ですか。
-
WordでExcelデータを差込...
-
ActiveReportのサブレポート機...
-
DMMの動画を全件取得したのです...
-
wordの差し込み印刷で文字...
-
VBA内でのGetPixelを使用した時...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
php 入力画面から確認表示画面...
-
ログイン画面から入って、「戻...
-
php history.back()の戻るボタ...
-
POSTで受け渡したものを保存し...
-
フォームを使わずにPOST送信す...
-
VBAで重複チェックの仕方を教え...
-
PHPで値を保持する方法
-
ブラウザバックしてもチェック...
-
IFRAME内PHPのセッション変数取...
-
【Java】投稿完了画面リロード...
-
HTMLエスケープ処理とデーター...
-
cURL関数を使用したphpからのpo...
-
asp.netでのセッションを使用し...
-
「ページネーション」で検索キ...
-
php に関して質問です。 各ユー...
-
閉じるボタン「×」を制御したい
-
PHPで名寄せするには?
-
セッションを使用したページ遷移
-
HTMLエスケープすべき場所につ...
-
GETのメリットについて
おすすめ情報