データベースの登録方法について質問があります - PHPプロ!Q&A掲示板

2528

  • 0P

データベースの登録方法について質問があります

質問日時 / 2010年2月15日 21:42    回答数 / 3件

Questioner:  tamatama  このエントリーをはてなブックマークに追加 

キーワード / キーワードが設定されていません

今掲示板みたいなものを作っているのですが、投稿ボタンで<input type="submit" name="bentry">と
このようにして、投稿ボタンを押されるとデータベースに接続して、打ち込んだ内容を登録して、表示しているのですが、データベースに接続される条件の書き方について教えてほしいのですが、今現在下記のように書いています。

if(isset($_POST["bentry"]))

{

//外部のファイルを読み込む
include("../entry/mysqluser.php");

//接続を開始
$link = mysql_connect($Host,$User,$Pass,$Db);

//データベース選択
$selres = mysql_select_db($Db, $link);

//データベースに挿入
$sql = "insert into bbs(sid,name,content) ";
$sql = $sql."values('$sid','$name','$content')";

//クエリー送信
$sqlres = mysql_query($sql, $link);

//データベースから表示
$sql = "select sid,name,content from bbs where bidnum = '$bidnum'";

//クエリー送信
$sqlres = mysql_query($sql, $link);

//結果を抜き出し、配列に格納
$row = mysql_fetch_array($sqlres, MYSQL_ASSOC);

//メモリの解放
mysql_free_result($sqlres);

//接続を閉じる
$closeres = mysql_close($link);

}

今投稿ボタンが押されれば投稿フォームに戻って打ち込めるようになっているのですが、
このページで更新をかけると、まったく同じ情報が書き込まれて表示されてしまいます。見た目上は更新かけなければ、わからないのでうすが、かなり致命的なことだと思っているので、どうか馬鹿にもわかるように教えてくださればありがたいです。

hiddenで情報を受け取っているので、当たり前だといわれれば、それまでなのは重々承知しています。

これをなんとかしたいのですが、まだまだ初心者でif文の書き方をどのようにすればいいのかわかりません。

if文を直すだけで、解決できるのかは、まだまだ勉強不足でわかりませんが、色々してみたのですが、どうしてもわからなくて質問しています。駄文で内容が伝わりきれていなければすいません。

ですが、なんとかしたのでご助力お願いします。

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┣A01magicflute21.if内に、デバッグプリントを挿入 >>CODE <?php
┃┗A01-1tamatamaありがとうございました。まだできていませんが頑張っ
┗A02NurseAngel>$sql = $sql."values('$sid','$name','$content')";

回答一覧

並び替え:

A01
answerermagicflute2 [2月16日 02:11] (最終編集:2月16日 02:17)

1.if内に、デバッグプリントを挿入
  1. <?php
  2. if(isset($_POST["bentry"]))
  3. {
  4.   echo '【登録処理開始】';
  5.   var_dump($_POST);
  6. ...
  7.   echo '【登録処理終了】';
  8. }
2.フォームの内容をsubmitし、デバック内容を確認。
3.F5キーを一回押す。
4.まだ、デバッグの内容が表示されているはず。
5.ブラウザのURL欄を選択し、Enterで同ページへアクセスする。
6.ページにデバッグの内容は、表示されないはず。
7.ならば、「登録後、同ページに遷移すれば良いのでは」と仮説を立てる。
8.遷移する方法を調べて試す。(無限ループしたらESCキー)

とりあえずここまで。
後は、登録フローがどうなるかによって、実装方法が変わる。

この意見に回答する

ツリーへ TOPへ

A01-1
replyertamatama [2月16日 16:29]

ありがとうございました。まだできていませんが頑張ってみます。

この意見に回答する

ツリーへ TOPへ

A02
answererNurseAngel [2月20日 02:55] (最終編集:2月20日 02:57)

>$sql = $sql."values('$sid','$name','$content')";
>$sql = "select sid,name,content from bbs where bidnum = '$bidnum'";

この書き方はSQLインジェクションされるので行ってはいけません。


よくある方法としては、

・保存したあと、投稿完了ページにリダイレクト
・投稿画面でユニークなチケットIDをhiddenで発行し、保存時に同じチケットIDが存在するか確認後、チケットIDも一緒に登録する
・投稿画面でセッションにフラグを立てる→完了画面でフラグがあるかどうか確認後、保存してフラグを削除

あたりが有名なのではないかと。

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
PHPのHTML埋め込み記述について
 このエントリーをはてなブックマークに追加 
A
$_POST["data"] == "男" ? $val = "checked" : $val = "" ; の意味は以下と同じです。 if($_POST["data"] == "男"){ $val = "checked; } e...

>>続きを読む

kende様のご指摘通り、三項演算子を使用する際には、コードの複雑度などを考慮する必要がありますね。書きやすさと共に可読性も追求したいところですね。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)