- ベストアンサー
PHP+MySQL データが無い時のみ追加したい
PHP+MySQLで簡単なページカウンタを作っていますが、どうも正常に動いてくれません。 カウントを取りたいページに <IMG src="count.php?pagename=サンプルページ"> としてページネームを渡してあります。 count.phpの主要部分は //ページネームを取得(例:サンプルページ) $pagename = $_GET["pagename"]; とし、データベースに接続したあと // データ取り出し $sql = "SELECT name, count FROM shukei ORDER BY count;"; $rst = mysql_query($sql, $con); //データをループで読み込み while ($col = mysql_fetch_array($rst)) { $name = $col[name]; //渡されたページ名がDB内にあればカウント1増 if($name == $pagename){ $sql = "update shukei set count = count + 1 where name = '$name'"; } //渡されたページ名がDB内に無ければ新規追加 elseif($name != $pagename){ $sql = "INSERT INTO shukei(name,count) values(\"$pagename\",1)"; } } mysql_query($sql, $con); //接続解除 mysql_free_result($rst); $con = mysql_close($conn); としています、どんどん新規で追加されていってしまいます。 DB内にページ名が存在するならカウントアップをし、無い時はカウント1として新規追加をさせたいのですが…。 テーブル名はshukeiで id,name,count としております。 何か根本が間違っているのでしょうか。 どうぞ宜しくお願い致します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
フロー的には$name == $pagenameでヒットしたときに breakしていないので次のレコードを検索したときに $name != $pagenameになり、INSERTが有効になってますね 解決方法としてはbreakしてください・・・といいたいところですが これは非効率でしょう。 nameフィールドに$pagenameがあるかどうか確認するのに いちいち頭からデータを総なめしていてはなんのためにRDBを つかっているのか意味がないでしょう。 $sql = "SELECT * FROM `shukei` WHERE `name`='$pagename'"; $result = mysql_query($sql, $link); $num_rows = mysql_num_rows($result); などして、ヒットしたら$num_rows>0になるのでそれをもって 分岐させるとよいでしょう。 ちなみにこの運用方法であればnameにはUNIQUEな属性をつけて、 同じnameが発生しないようにしてください
その他の回答 (1)
- kaiwarepon
- ベストアンサー率49% (47/95)
どんどん新規で追加されているということは、 if($name == $pagename){ が成立しないということですから、 ここで$name, $pagename の値が正しくセットされているかどうか 確認されてはとうですか?
お礼
お早いご回答ありがとうございます! //データをループで読み込み while ($col = mysql_fetch_array($rst)) { $name = $col[name]; の次に echo $name; を追加し表示させてみましたが、$nameはちゃんとセットされていました。 $pagenameもちゃんと受け取っているようです。 色々いじっていますが、 //渡されたページ名がDB内にあればカウント1増 if($name = $pagename){ と=を一つにすると、DB内に同名があった場合カウントアップのみは行われました。 しかし今度は新規に追加してくれなくなります。 う~ん…。
お礼
希望の結果が得られました!! ありがとうございます。 >いちいち頭からデータを総なめしていてはなんのために >RDBをつかっているのか意味がないでしょう。 おっしゃる通りです。 SQL関数、もっと勉強します。 ありがとうございました。