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

解決済みの質問

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
としております。

何か根本が間違っているのでしょうか。
どうぞ宜しくお願い致します。

投稿日時 - 2006-06-22 11:26:26

QNo.2231028

すぐに回答ほしいです

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

フロー的には$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が発生しないようにしてください

投稿日時 - 2006-06-22 12:11:46

お礼

希望の結果が得られました!!
ありがとうございます。

>いちいち頭からデータを総なめしていてはなんのために
>RDBをつかっているのか意味がないでしょう。

おっしゃる通りです。
SQL関数、もっと勉強します。
ありがとうございました。

投稿日時 - 2006-06-22 15:28:24

ANo.2

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

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

回答(2)

ANo.1

どんどん新規で追加されているということは、
if($name == $pagename){
が成立しないということですから、
ここで$name, $pagename の値が正しくセットされているかどうか
確認されてはとうですか?

投稿日時 - 2006-06-22 11:41:12

お礼

お早いご回答ありがとうございます!

//データをループで読み込み
while ($col = mysql_fetch_array($rst)) {
$name = $col[name];

の次に
echo $name;

を追加し表示させてみましたが、$nameはちゃんとセットされていました。
$pagenameもちゃんと受け取っているようです。

色々いじっていますが、

//渡されたページ名がDB内にあればカウント1増
if($name = $pagename){

と=を一つにすると、DB内に同名があった場合カウントアップのみは行われました。
しかし今度は新規に追加してくれなくなります。
う~ん…。

投稿日時 - 2006-06-22 12:13:17

あなたにオススメの質問