- ベストアンサー
PHP POSTでデータ登録について
- PHP初心者のため、データベースにデータ登録がうまくできない
- リンクをクリックすると空データが登録されてしまう問題がある
- フォーム中のボタンを押さないとデータ登録ができない設定をしたい
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>解決したいのは、ページ中別のURLにクリックしても、 >データが自動的に登録しないようにしたいです。 POSTデータを登録する部分を if ($_POST) { // ここで登録処理 } のように括るだけでいいです。 が、そもそも(POSTされたときに)各々の内容をチェックしないで(全部が空文字列であっても)insertしているようではダメです。
その他の回答 (3)
- t_ohta
- ベストアンサー率38% (5238/13705)
aタグでupdate_shop.phpに飛ばしているのだから、そのページでPOSTデータが入っているのかチェックするべきです。 リンクをクリックして遷移した時はフォームデータは送られませんので当然の結果です。 また、各入力項目の値が正しいのかのチェックもupdate_shop.phpで行うべきでしょう。 そうしないとSQLインジェクションやクロスサイトスクリプティング等、セキュリティ上の問題が発生する可能性があります。 利用者が社内など限定されていて悪意のあるアクセスは発生しない条件でも、意図せずに変なデータを入力してしまって、結果としてデータが壊れたりする事もあり得ますので注意しましょう。
お礼
初めて、PHPで管理システムのWEBアプリケーションを作っていますので、答えは凄く参考になりました。
- t_ohta
- ベストアンサー率38% (5238/13705)
list.php と update_shop.php のどちらでデータベースに書き込みを行っていますか? その書き込むプログラムはどのような内容ですか?
補足
説明が少ない、すみませんでした。 本来は、データ一覧表の隣に新規データ登録のフォームを設置して、 データ登録ができたら、隣の一覧表ですべてのデータが表示されている。 次に、一覧表の中に編集ボタンを追加して、ボタンが押したら、データ編集ページに移動し、データ編集ができたら、最初のページに戻す(一覧表と登録のページ) 考えたのは、insert_shop.php(一覧表とデータ登録)とupdate_shop.php(データ編集)があればシステムが動けると思います。 データ登録は問題なく、データ登録されました。 しかし登録フォーム何も触らずに、一覧表中のURLだけクリックしたら、空データが自動出来に登録されてしまいました。空データと言うのは、番号は主キー、自動番号が追加され、他のデータが何も無いです。 解決したいのは、ページ中別のURLにクリックしても、データが自動的に登録しないようにしたいです。 是非、教えて頂ければ幸いです。
- t_ohta
- ベストアンサー率38% (5238/13705)
formタグのactionが空ですが、これはフォームのあるページと同じページにデータを送信するということでしょうか?
お礼
回答内容は凄く参考できました。本当にありがとうございました。
補足
action="list.php" にURLを追加しましたが、結局違うURL <a href="update_shop.php">リスト</a> をクリックしたら、空データが登録されてしまった。
お礼
if ($_POST['shops_name'] != ''&&$_POST['shops_address'] != ''&&$_POST['shops_tel'] != ''){ $sql = sprintf('INSERT INTO shops SET name="%s",address="%s",tel="%s"', mysql_real_escape_string($_POST['shops_name']), mysql_real_escape_string($_POST['shops_address']), mysql_real_escape_string($_POST['shops_tel']) ); mysql_query($sql) or die(mysql_error()); } if文で空の条件が書けば、できました。ありがとうございます。すごく勉強になります。