• 締切済み

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) どうか、お願い申し上げます。

  • PHP
  • 回答数1
  • ありがとう数0

みんなの回答

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

userIDにユニーク属性をつけておきINSERT IGNORE INTO でデータを投入する。 mysqli関数を利用しているのであればmysqli_affected_rowsの戻り値が 「0」ならばすでにデータが存在する、「1」ならば新規で追加された と判断できます

8x8fumifumi
質問者

補足

ご返信、有難うございます。 大変遅くなりましたが、ご報告させていただきます。 「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

  • ACCESSのフォーム上に連番番号を表示したい

    お世話になります フォームは単票型でなく、表型です↓ 例 1 aaaa1 bbbb1 cccc1 2 aaaa2 bbbb2 cccc2 3 aaaa3 bbbb3 cccc3 aaaa1等、右側はテーブルからデータを表示しています この、左の1,2,3、は単なる、表示で関連付けるデータは ありません この単なる1,2,3、はどのようにだすのですか よろしくお願いします

  • php sqlでログイン認証システムについてです。

    このようなソースを書いてログインシステムを書いています。 ここで接続はできたのですが、クエリーが失敗しましたと出てきます。 このソースをどのように修正すればよいのかアドバイスお願いできないでしょうか。よろしくお願いします。 <?php session_start(); $link = mysql_connect('localhost', 'root', 'root'); if (!$link) { die('接続失敗です。'.mysql_error()); } $db_selected = mysql_select_db('mydb', $link); if (!$db_selected){ die('データベース選択失敗です。'.mysql_error()); } mysql_set_charset('utf8'); // エラーメッセージの初期化 $errorMessage = ""; // ログインボタンが押された場合 if (isset($_POST["login"])) { // 1.ユーザIDの入力チェック if (empty($_POST["userid"])) { $errorMessage = "ユーザIDが未入力です。"; } else if (empty($_POST["password"])) { $errorMessage = "パスワードが未入力です。"; } // 2.ユーザIDとパスワードが入力されていたら認証する if (!empty($_POST["userid"]) && !empty($_POST["password"])) { // mysqlへの接続 $mysqli = new mysqli($db['localhost'], $db['root'], $db['root']); if ($mysqli->connect_errno) { print('<p>データベースへの接続に失敗しました。</p>' . $mysqli->connect_error); exit(); } // データベースの選択 $mysqli->select_db($db['mydb']); // 入力値のサニタイズ $userid = $mysqli->real_escape_string($_POST["userid"]); // クエリの実行 $query = "SELECT * FROM db_user WHERE name = '" . $userid . "'"; $result = $mysqli->query($query); if (!$result) { print('クエリーが失敗しました。' . $mysqli->error); $mysqli->close(); exit(); } while ($row = $result->fetch_assoc()) { // パスワード(暗号化済み)の取り出し $db_hashed_pwd = $row['password']; } // データベースの切断 $mysqli->close(); // 3.画面から入力されたパスワードとデータベースから取得したパスワードのハッシュを比較します。 //if ($_POST["password"] == $pw) { if (password_verify($_POST["password"], $db_hashed_pwd)) { // 4.認証成功なら、セッションIDを新規に発行する session_regenerate_id(true); $_SESSION["USERID"] = $_POST["userid"]; header("Location: main.php"); exit; } else { // 認証失敗 $errorMessage = "ユーザIDあるいはパスワードに誤りがあります。"; } } else { // 未入力なら何もしない } } ?>

    • 締切済み
    • PHP
  • アクセス2007 フォーム入力でフィールドジャンプ

    添付画像参照願います。 アクセスのフォームで入力する際、社員番号のテキストボックスから資格コードまでジャンプ させたいと思います、 やったのはプロパティで更新後処理の埋め込みマクロでアクションをコントロールの移動を使い 引数に資格コードを使いました。 すると画像のようなエラーが出てしまいます。 以前に作ったフォームではうまく動いていたのですが今回は動きません。 WEBなど、探したのですがいい回答が見つかりませんでした、作り直しも行いましたが 同じエラーが繰り返されます。 よろしくお願いします。 会社からなので画像の添付できませんでした、持ち出しができません。 フォームでテキスとボックスにAAAAと入力したらCCCCにカーソルを移動させたいです。 ラベル テキストボックス aaaa AAAA bbb  BBBB ccc CCCC 説明が分かりにくく申し訳ないです、分かりましたら教えてください。 調べつくしましたが分かりませんでした、

  • アクセス2007 フォーム入力でフィールドジャンプ

    同じ質問2度目です、回答頂いていましたが、画像ができたので貼り付けました。 新しい質問でないと貼り付けできないものですみません 最初の回答も参考にさせていただきます。 ---------------------------------- 添付画像参照願います。 アクセスのフォームで入力する際、社員番号のテキストボックスから資格コードまでジャンプ させたいと思います、 やったのはプロパティで更新後処理の埋め込みマクロでアクションをコントロールの移動を使い 引数に資格コードを使いました。 すると画像のようなエラーが出てしまいます。 以前に作ったフォームではうまく動いていたのですが今回は動きません。 WEBなど、探したのですがいい回答が見つかりませんでした、作り直しも行いましたが 同じエラーが繰り返されます。 よろしくお願いします。 会社からなので画像の添付できませんでした、持ち出しができません。 フォームでテキスとボックスにAAAAと入力したらCCCCにカーソルを移動させたいです。 ラベル テキストボックス aaaa AAAA bbb  BBBB ccc CCCC

  • 連結したフィールドでグループ化し、他のフィールドの最大値のレコード全体を抽出

    図面管理のデータベースをつくっています。 連結したフィールドでグループ化し、他のフィールドの最大値のレコード全体を抽出したいのですが どのようにしたらいいのでしょうか? いろいろ調べたのですがなかなかよい結果が出ません。 お知恵をおかしください。よろしくお願いします。 mysqlバージョン:5.0.45 例 テーブル:a(図面管理) a_id(id) a1(図番) a2(種類用紙サイズ) a3(枝番) a4(図面名) a_id a1 a2 a3 a4 1   1 3P 0 aaaa 2   2 3P 0 bbbb 3   2 3P 1 bbbb 4   1 4P 0 cccc 5   1 4P 1 cccc 6   1 4P 1 cccc このテーブルのa1とa2を連結します。(連結フィールド:ren) a_id a1 a2 a3 a4  ren 1   1 3P 0 aaaa 13P 2   2 3P 0 bbbb 23P 3   2 3P 1 bbbb 23P 4   1 4P 0 cccc 14P 5   1 4P 1 cccc 14P 6   1 4P 2 cccc 14P 連結したもの(ren)をグループ化しますこのとき、枝番の値が高いレコードだけ抽出します。 a_id a1 a2 a3 a4  ren 1   1 3P 0 aaaa 13P 3   2 3P 1 bbbb 23P 6   1 4P 2 cccc 14P この最終的な結果を出す方法をお教えください。 おねがいします。

    • ベストアンサー
    • MySQL
  • SQLで1つのレコードから複数行挿入するには

    下記のようなレコードがあります。 node_id_1 node_nm_1 node_id_2 node_nm_2 ------------------------------------- 00001   AAAA    00002   BBBB 00003   CCCC    00004   DDDD このレコードを元に下記のようなデータを別テーブルに挿入したいのですが、SQLで可能でしょうか id node_id node_nm ----------------- 1  00001  AAAA 1  00002  BBBB 2  00003  CCCC 2  00004  DDDD idはシーケンスで取得します。そして、同一レコードだったものには同じidを振ります。 DBはPostgreSQL 8.4です。

  • フィールドを連結しグループ化した時の値の枝番の最大値を常に表示

    フィールドを連結しグループ化した時の値の枝番の最大値を常に表示 すいません。MYSQLでこんなことができるのかお教えください。 mysqlバージョンは、5.0.45を使用しています。 1.以下のような図面を管理するテーブルがあるとします。 例 テーブル:a(図面管理) a_id(id) a1(図番) a2(種類用紙サイズ) a3(枝番) a4(図面名) a_id a1 a2 a3 a4 1   1 3P 0 aaaa 2   2 3P 0 bbbb 3   2 3P 1 bbbb 4   1 4P 0 cccc 5   1 4P 1 cccc 6   1 4P 2 cccc 2.このテーブルのa1とa2を連結したとします。(連結フィールド:ren) ※a1とa2を連結した名称を図面名として使用しています。 ※a3が枝番で図面のマイナーチェンジのバージョンだとお考えください。 a_id a1 a2 a3 a4  ren 1   1 3P 0 aaaa 13P 2   2 3P 0 bbbb 23P 3   2 3P 1 bbbb 23P 4   1 4P 0 cccc 14P 5   1 4P 1 cccc 14P 6   1 4P 2 cccc 14P 3.この連結したフィールド(ren)の枝番(a3)の最大値(max_a3)をSQLで表示させたいのですがどのようにしたらいいのでしょうか? このような結果は求められるのでしょうか? 最終的な結果表示 a_id a1 a2 a3 a4  ren max_a3 1   1 3P 0 aaaa 13P 0 2   2 3P 0 bbbb 23P 1 3   2 3P 1 bbbb 23P 1 4   1 4P 0 cccc 14P 2 5   1 4P 1 cccc 14P 2 6   1 4P 2 cccc 14P 2 説明がへたかもしれませんがよろしくお願いします。

    • ベストアンサー
    • MySQL
  • 優先順位を決めて、そこからランダムに選んでいく方法

    MySQLバージョン4.1.16を使用しています。 次のような、priority(1が最も優先順位が高い)を カラムに持つテーブル「users」で、flagが1を条件として priorityが1から順番にランダムに1つだけ選びたいのです。 つまりこの場合、初めは priorityが1の「bbbb」行と「dddd」行からランダムに選ぶのですが、 flagが共に0なので条件に合わないので選ぶことはできません。 次に、priorityが2の「cccc」「eeee」「ffff」行のflagを調べて flagが1の「cccc」「ffff」行の2つからランダムに選ぶことになります。 このようなSQL文はどのような記述になるのでしょうか? テーブル「users」 +----------+---------+---------+ |  user_id  | priority |   flag  | +----------+---------+---------+ |  aaaa   |   3   |   1   | +----------+---------+---------+ |  bbbb   |   1   |   0   | +----------+---------+---------+ |  cccc   |   2   |   1   | +----------+---------+---------+ |  dddd   |   1   |   0   | +----------+---------+---------+ |  eeee   |   2   |   0   | +----------+---------+---------+ |  ffff    |   2   |   1   | +----------+---------+---------+

    • ベストアンサー
    • MySQL
  • アクセス フィールド値を分割したい

    いつも大変お世話になっております。 初心者につき、ご教示いただけますと幸いです。 アクセスのテーブル・フィールドに AAAA,BBBB,CCCC という値が入ってしまうため 「,」を区切りに分割したいです。 テーブル:T_商品 フィールド: 顧客ID|注文内容(連結で入ってしまうフィールド) 0001|AAAA 0002|AAAA,BBBB 0010|AAAA,BBBB,CCCC 0101|AAAA,BBBB,CCCC,DDDD,・・・ といったように、連結した値の数はまちまちで、 最大10個になります。 ちなみに、 これを ↓フィールド名 顧客ID|注文商品   に 0001|AAAA 0002|AAAA 0002|BBBB 0010|AAAA 0010|BBBB 0010|CCCC  ・  ・  ・ といったように、 最終的には 1つのフィールドにまとめたいです。 ご教示のほど、よろしくお願い致します。 尚、前半の「連結値を分割」だけでも テーブル更新(分割毎にフィールドに挿入)できれば、とても助かります! →この場合、予備フィールドなどを作成しておくか、  ワークテーブルなどで処理になりますでしょうか。 是非とも、よろしくお願い致します。

  • SQLでの集計

    下記の様に、「複数のitemを買っているuserと購入されたitem」のテーブルと、 user item ---------------------------------- 田中 AAAA 田中 CCCC 田中 EEEE 北野 DDDD 北野 BBBB 北野 AAAA 小堺 CCCC 小堺 EEEE 松本 EEEE 松本 KKKK 松本 CCCC 松本 DDDD 浜田 BBBB 浜田 DDDD 下記の様な IDに紐付いた 「item」のテーブルから、 ID  item ---------------------------------- 1   AAAA 2   BBBB 3   CCCC 4   DDDD 5   EEEE 下記の様に各itemと各itemを買った場合に一緒に買われるitemの一覧を結果 として表示させたいのですが、クエリの作り方が思い浮かばず、困っています。 ※)可能であれば、買われたitemを表示する際にはbuy1から(左側から)同時購入 回数の多いitemを重複せずに並べて表示したい ID  item  buy1  buy3  buy4  buy5  buy6・・・・ ---------------------------------- 1  AAAA CCCC BBBB DDDD EEEE 2  BBBB DDDD AAAA 3  CCCC AAAA EEEE DDDD KKKKK 4  DDDD AAAA BBBB CCCC EEEE 5  EEEE AAAA CCCC KKKKK 尚、IDと紐付いているitem数は決まっていますが、買われるitemの種類は上記 の様にIDが1~5だけではなく、集計してみないと判らない状況です。 今の所、SQLはACCESS(2003)上にて手打ちしています。 以上、ご教示のほど、宜しくお願い致します。

専門家に質問してみよう