プロが教える店舗&オフィスのセキュリティ対策術

初めて投稿します。

入力フォームから受け取った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)

どうか、お願い申し上げます。

A 回答 (1件)

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は既に使用されています。」の重複エラー表示あり(エラー時に入力画面に戻ってもらう形をとってある)

補足日時:2014/05/23 15:17
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!