- 締切済み
phpでフォーム登録したものがチェックされない
初めて投稿します。 入力フォームから受け取ったuserIDをMYSQLを呼び出し重複がないかチェックした上で、重複があればエラー出力、なければ登録へ、といった形を考えています。 mysqladminから直接入力・保存したものはエラー検出するのですが、入力フォームから保存したものはエラー検出しません。 この原因・理由と解決方法が分かる方、どうか教えていただけないでしょうか? テーブルは以下の形で保存されています。 テーブル名 touroku idはint、dateはdatetime、他はvarchar(50)で作成 idにA_I、primary key設定、userIDのkeyにmulが設定されている 文字コードはutf-8で設定 id | userID | password | email | name |date | 1 | aaaa | aaaa | aaaa | aaaaa | |・・・※1 A 2 |ああああ |ああああ |ああああ |ああああ | |・・・ B 3 | bbbb | bbbb | bbbb | bbbb | |・・・ B 4 | cccc | cccc | cccc | cccc | |・・・ A ※1 A・・・mysqladminからの直接入力・保存 B・・・入力フォームからの入力・保存 問題のプログラム(フォーム確認部分・userIDの部分のみ抜粋) 文字コードはutf-8で設定 <?php //DB設定 $DB_HOST = 'localhost'; $DB_USER = '○○'; $DB_PASS = '○○'; $DB_NAME = '○○'; $link = mysqli_connect($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME); if (mysqli_connect_errno()) { die('データベースエラー'); } extract($_POST); $error_flag=0; //ログインID入力チェック if(empty($userID)){ echo '<p><span>必須</span>ログイン用の名前を入力して下さい。</p><br />'; $error_flag=1; }elseif($sql = "SELECT userID FROM touroku WHERE userID = '".$userID."' "){ $result = mysqli_query($link, $sql); $rows = mysqli_num_rows($result); ※2 if($rows == 0){ }else{ echo '<p><span>必須</span>ログインID欄に入力した'.$userID.'は既に使用されています。</p><br />'; $error_flag = 1; } } ・ ・ ・ ?> ※2 この段階でvar_dump($rows);で型と変数を確認してみると、 userIDがaaaaのときのみ int(1)、他はint(0) どうか、お願い申し上げます。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- yambejp
- ベストアンサー率51% (3827/7415)
userIDにユニーク属性をつけておきINSERT IGNORE INTO でデータを投入する。 mysqli関数を利用しているのであればmysqli_affected_rowsの戻り値が 「0」ならばすでにデータが存在する、「1」ならば新規で追加された と判断できます
補足
ご返信、有難うございます。 大変遅くなりましたが、ご報告させていただきます。 「INSERT IGNORE INTO」で同じ文字列が登録されずに済みましたが、肝心の確認画面でのエラー検出が反映されません。 なぜ、phpフォームからのデータ入力が反応されず、phpmyadminからの入力データのみ反映されるのか、原因がわかりません。 テーブルの内容と現状につきましては以下の通りです。 テーブル内容 id | userID | password | email | name |date | 1 | aaaa | aaaa | aaaa | aaaaa |(フォーム入力日)|・・・※1 A 2 | bbbb | bbbb | bbbb | bbbb | null|・・・ B ※1 A・・・入力フォームからの入力・保存 B・・・mysqladminからの直接入力・保存入力フォームからの入力・保存 Aの内容から入力→確認画面では重複エラー表示なし→送信で保存完了画面(実際には保存されない) Bの内容から入力→確認画面で「ログインID欄に入力したbbbbは既に使用されています。」の重複エラー表示あり(エラー時に入力画面に戻ってもらう形をとってある)