初めて投稿します。
入力フォームから受け取った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件)
- 最新から表示
- 回答順に表示
No.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は既に使用されています。」の重複エラー表示あり(エラー時に入力画面に戻ってもらう形をとってある)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- PHP php エラー 2 2022/10/23 16:43
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- PHP 重複を防ぐ記述について教えて下さい。 3 2023/04/03 14:35
- PHP php 確認表示画面で値をSESSIONから取り出す理由の解釈は正しいでしょうか? 1 2023/06/09 17:39
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAで重複チェックの仕方を教え...
-
ログイン画面から入って、「戻...
-
ページ移動での値の保持
-
httpでもログインフォームは暗...
-
php に関して質問です。 各ユー...
-
まとめ:DBに接続し、値を表示...
-
フォームを使わずにPOST送信す...
-
cURL関数を使用したphpからのpo...
-
セッション使用時のフォームの...
-
Dosブロンプトでtabを出力したい
-
DTOとEntityの差は何ですか。
-
wordの差し込み印刷で文字...
-
【VBA】EXCELブックを開かずに...
-
Google scholarがひらけなくな...
-
バッチファイルでpingの結果を...
-
switch()文で値の大小比較
-
ログインした掲示板ですが、直...
-
phpでcookieがうまく保存されない
-
shシェルスクリプト 空白行の...
-
「取得先」という表現について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
php 入力画面から確認表示画面...
-
ログイン画面から入って、「戻...
-
POSTで受け渡したものを保存し...
-
php history.back()の戻るボタ...
-
フォームを使わずにPOST送信す...
-
VBAで重複チェックの仕方を教え...
-
PHPで値を保持する方法
-
ブラウザバックしてもチェック...
-
IFRAME内PHPのセッション変数取...
-
【Java】投稿完了画面リロード...
-
cURL関数を使用したphpからのpo...
-
HTMLエスケープ処理とデーター...
-
php に関して質問です。 各ユー...
-
asp.netでのセッションを使用し...
-
「ページネーション」で検索キ...
-
PHPで名寄せするには?
-
セッションを使用したページ遷移
-
閉じるボタン「×」を制御したい
-
ブラウザの戻るボタンで重複登...
-
GETのメリットについて
おすすめ情報