- ベストアンサー
SQLのif()に関して。。。
$uid = $_SERVER['HTTP_X_UP_SUBNO']; $sql = "SELECT id FROM daykg WHERE id=$uid"; if($sql) { echo("既に登録されています。"); } else{ 登録フォーム} このようなコードですが、上手くいきません。DBに$uid情報を入れても消しても既に登録されています。が表示されます。 固体識別番号($uid)がDBにあれば「既に~」を表示し、無ければ登録フォームを表示するにはどうしたら良いでしょうか??
- みんなの回答 (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)
- drmada_baka
- ベストアンサー率0% (0/5)
- yambejp
- ベストアンサー率51% (3827/7415)
#3はmysql_affected_rowsの結果が逆ですね、失礼
- yambejp
- ベストアンサー率51% (3827/7415)
こんな感じですかね $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{ 登録後処理 }
- shincha119
- ベストアンサー率42% (95/226)
文字列の判定をしているからだと思います。 $sql = "SELECT id FROM daykg WHERE id=$uid"; $result = select_db($sql, $con); // $conは接続情報、select_dbはSelect文を実行する関数 if($result) { // $sqlではなく実行結果で判定する echo("既に登録されています。"); } else{ 登録フォーム} } こんな感じにすれば上手くいくと思います。
お礼
ありがとうございます!試してみます!
- t_ohta
- ベストアンサー率38% (5241/13712)
このままでは、$sql の中身は単なるテキストデータです。 文字列が入っているので if($sql) の結果は「真」と判定されるので echo("既に登録されています。"); が実行されます。 ちゃんとSQLを実行して、結果を取得しましょう。
補足
sql文がおかしいですか?回答ありがとうございます。
お礼
ありがとうございます!試してみます!
補足
$sql = "SELECT id FROM テーブル WHERE id=$uid"; $result = mysql_query($sql); if($result) { echo("既に登録されています。"); }else{ 登録フォーム } これでも上手くいきません。if(mydql_num_rows($result)) をはずしたのはエラーがでてしまった為です。どうぞよろしくお願いいたします。