• ベストアンサー

SQLのif()に関して。。。

$uid = $_SERVER['HTTP_X_UP_SUBNO']; $sql = "SELECT id FROM daykg WHERE id=$uid"; if($sql) { echo("既に登録されています。"); } else{ 登録フォーム} このようなコードですが、上手くいきません。DBに$uid情報を入れても消しても既に登録されています。が表示されます。 固体識別番号($uid)がDBにあれば「既に~」を表示し、無ければ登録フォームを表示するにはどうしたら良いでしょうか??

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.6

>if($result) これは無意味 >if(mydql_num_rows($result)) をはずしたのはエラーがでてしまった mysql_num_rows()ね http://www.php.net/manual/ja/function.mysql-num-rows.php どういうエラーなのかによります。 エラー内容を書いた方がよいでしょう 場合によっては次の手として $sql = "SELECT count(*) as count FROM daykg WHERE id=$uid"; $res = mysql_query($sql); $row=mysql_fetch_array($res,MYSQL_ASSOC); if($row["count"]>0) { echo("既に登録されています。"); }else{ 登録フォーム } とか

その他の回答 (5)

回答No.5
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.4

#3はmysql_affected_rowsの結果が逆ですね、失礼

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

こんな感じですかね $sql = "SELECT id FROM daykg WHERE id=$uid"; $res = mysql_query($sql); if(mysql_num_rows($res)) { echo("既に登録されています。"); }else{ 登録フォーム } 強引にやるならINSERTを投げてしまいって結果を判断するとか $sql = "INSERT IGNORE INTO daykg SET id=$uid"; $res = mysql_query($sql); if(mysql_affected_rows($res)) { echo("既に登録されています。"); }else{ 登録後処理 }

参考URL:
http://www.php.net/manual/ja/function.mysql-affected-rows.php
drmada
質問者

お礼

ありがとうございます!試してみます!

drmada
質問者

補足

$sql = "SELECT id FROM テーブル WHERE id=$uid"; $result = mysql_query($sql); if($result) { echo("既に登録されています。"); }else{ 登録フォーム } これでも上手くいきません。if(mydql_num_rows($result)) をはずしたのはエラーがでてしまった為です。どうぞよろしくお願いいたします。

回答No.2

文字列の判定をしているからだと思います。 $sql = "SELECT id FROM daykg WHERE id=$uid"; $result = select_db($sql, $con); // $conは接続情報、select_dbはSelect文を実行する関数 if($result) { // $sqlではなく実行結果で判定する echo("既に登録されています。"); } else{ 登録フォーム} } こんな感じにすれば上手くいくと思います。

drmada
質問者

お礼

ありがとうございます!試してみます!

  • t_ohta
  • ベストアンサー率38% (5241/13712)
回答No.1

このままでは、$sql の中身は単なるテキストデータです。 文字列が入っているので if($sql) の結果は「真」と判定されるので echo("既に登録されています。"); が実行されます。 ちゃんとSQLを実行して、結果を取得しましょう。

drmada
質問者

補足

sql文がおかしいですか?回答ありがとうございます。

関連するQ&A