データの重複チェック方法での文法エラーへの対処方法を教えてください

このQ&Aのポイント
  • デザイン関連の作業担当の質問者は、会員番号と店舗番号の重複チェック方法について困っています。現在の重複チェックの関数定義に文法エラーがあり、その修正方法を教えてほしいとのことです。
  • 現在の重複チェックの関数定義では、会員番号と店舗番号を条件にデータベースから情報を取得し、重複があるかどうかを確認しています。しかし、文法エラーが出ているため、正しく動作していないようです。
  • 修正方法としては、関数定義内のSQL文の一部を修正する必要があります。具体的には、会員番号と店舗番号の比較に使用するシングルクオーテーションの位置が誤っているため、文法エラーが出ています。正しい位置にシングルクオーテーションを移動させて、再度試してみてください。
回答を見る
  • ベストアンサー

重複チェックの記述でご教授くださいませ。

日頃はデザイン関連の作業担当なのですが、、、、 データの重複チェック方法で  会員番号と店舗番号を入力するのですが 登録画面には //会員番号重複チェック if(Duplication_Check2("store_table","'".$kaiin_no."'",$tenpo_no)){ $err .= "会員NO「".$kaiin_no."」で店舗NO「".$tenpo_no."」は既に登録されています。<br />"; } としてまして、重複のエラー表示をさせています。 重複チェックの関数定義では //重複チェック2 function Duplication_Check2($kaiin_no,$tenpo_no){ global $db; $sql = "select * from store_table where kaiin_no='".$kaiin_no."' and tenpo_no=".$tenpo_no; $rst = pg_query($db,$sql); if($rst){ if(pg_num_rows($rst) = 0){ return true; }else{ return false; } }else{ return false; } } としたのですが ここに文法エラーが出ます。 初心者の質問で恐縮なのですがどこをどうすればいいのでしょうか? ご教授いただければ幸いです。

  • ya-ya-
  • お礼率42% (110/256)

質問者が選んだベストアンサー

  • ベストアンサー
  • tomaju
  • ベストアンサー率76% (84/110)
回答No.4

> $sql = "select kaiin_no form store_table where kaiin_no = ".$kaiin_no; > Warning: pg_query(): Query failed: ERROR: syntax error at or near "form" at character 17 あ! すみません。 form がまちがいです。 正しくは from です。 $sql = "select kaiin_no from store_table where kaiin_no = ".$kaiin_no; ANo.3 は全部 form になってますね。。。 偉そうなことを書いておきながら面目ないです。。。

ya-ya-
質問者

お礼

無事うまくいきました!! ご指導、ありがとうございました。。

その他の回答 (3)

  • tomaju
  • ベストアンサー率76% (84/110)
回答No.3

> 3行目あたりのところに問題があるようなのですが $sql = "select kaiin_no form store_table".$kaiin_no; where ~ の書き忘れでしょうか。 kaiin_no カラムが数値型で、kaiin_no の値が $kaiin_no と等しいレコードを 検索するのであれば以下のようになるかと思います。 $sql = "select kaiin_no form store_table where kaiin_no = ".$kaiin_no; もしも kaiin_no カラムが文字型であればシングルクオートで囲みます。 $sql = "select kaiin_no form store_table where kaiin_no = '".$kaiin_no."'"; とりあえずこれで動くと思いますが、万が一おかしなデータが入ってくる可能性を考えて やかましいことを言いますと、kaiin_no カラムが数値型の場合 $kaiin_no に数値 以外のものが入らないように別途入力チェックしてください。 文字型の場合適宜エスケープをしてください。 $sql = "select kaiin_no form store_table where kaiin_no = '".mysql_real_escape_string($kaiin_no)."'"; 問題が起きた時は、echo $sql; などとして、できあがりのSQL文を点検してみましょう。 mysql コマンドや phpMyAdmin などから試しに実行してみるのも一手です。 > テーブル名 store_table 内に kaiin_no カラムがあります。 > kaiin_no に重複がないかを確認するためには以下の記述でいいのでしょうか? kaiin_no を重複させない、ある会員番号を持つレコードを 2 行 以上存在させないということであれば、会員番号が一致のみの チェックでよいと思います。 同じ会員番号で複数の店舗に所属することを許すなら、 当初に書いてあったように店舗番号まで含めてチェックする 必要があるかと思います。

ya-ya-
質問者

補足

ご指導ありがとうございます。 $sql = "select kaiin_no form store_table where kaiin_no = ".$kaiin_no; こちらを入れていましたが 下記エラーになります。 Warning: pg_query(): Query failed: ERROR: syntax error at or near "form" at character 17 in /usr/home/******/html/inc/scp.php on line 149 文法エラーのようなのですが、、、、 どこがまちがっているのでしょう?? とりあえず kaiin_no に重複がないかを確認したいのですが、、 引き続きご指導いただければ幸いです。

  • tomaju
  • ベストアンサー率76% (84/110)
回答No.2

文法エラーは、次のようなメッセージではないでしょうか。 PHP Fatal error: Can't use function return value in write context in hogehoge.php on line 123 まずいのは下記の場所だと思います。 = なので代入になっています。 if(pg_num_rows($rst) = 0){ 検索結果の行数が 0 (と等しい)か調べたいのだから、 if(pg_num_rows($rst) == 0){ もしくは、 if(pg_num_rows($rst) === 0){ でしょう。 それからPHPの文法「エラー」にはならないと思いますが、 重複チェック関数の定義では引数が 2 つなのに、 function Duplication_Check2($kaiin_no,$tenpo_no){ 関数の呼び出しでは、引数を 3 つセットしています。 Duplication_Check2("store_table","'".$kaiin_no."'",$tenpo_no) 定義が間違っていなければ、 第 1 引数の "store_table" は関数内の $kaiin_no に入っています。 第2引数の "'".$kaiin_no."'" は関数内の $tenpo_no に入っています。 第3引数にセットした $tenpo_no は関数内では使われていません。 期待通りの動作をしないでしょう。

ya-ya-
質問者

補足

ご指導ありがとうございます。 私なりに分かりやすくしてみました。  テーブル名 store_table 内に kaiin_no カラムがあります。  kaiin_no に重複がないかを確認するためには以下の記述でいいのでしょうか? //重複チェック2 function Duplication_Check2($kaiin_no){ global $db; $sql = "select kaiin_no form store_table".$kaiin_no; $rst = pg_query($db,$sql); if($rst){ if(pg_num_rows($rst) == 0){ return true; }else{ return false; } }else{ return false; } } 3行目あたりのところに問題があるようなのですがどのように記述すればいいのでしょう? ご多忙のところ恐縮ですがご教授くださいませ。

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1

関数の引数の数が違うようですが。

ya-ya-
質問者

補足

ありがとうございます。 store_table のところでしょうか? function Duplication_Check2($store_table,$kaiin_no,$tenpo_no){

関連するQ&A

  • PostgreSQLのphpPgAdminを使って

    お世話になります。 PostgreSQL8.4.8のphpPgAdmin3.5.3を使ってデータを削除する際に 先ずデータをSELECT で表示させて確認後、 SQL編集 で SELECTを DELETE に書き換えて実行しましたが以下エラーが出ます ≪一覧確認用≫一覧表示はできました。 SELECT "kaiin_no","tenpo_no","tenpo_name" FROM "public"."store_table" WHERE "kaiin_no" IN ('1234',2222'); ≪削除用≫SELECT  → DELETEに変更 → 実行 → 以下エラー DELETE "kaiin_no","tenpo_no","tenpo_name" FROM "public"."store_table" WHERE "kaiin_no" IN ('1234',2222'); ≪エラー内容≫ ERROR: syntax error at or near "," LINE 1: SELECT COUNT(*) AS total FROM (DELETE "kaiin_no","tenpo_no",... ^ 文: SELECT COUNT(*) AS total FROM (DELETE "kaiin_no","tenpo_no","tenpo_name" FROM "public"."store_table" WHERE "kaiin_no" IN ('1234','2222')) AS sub 文法エラーのようなのですが 一覧が出来ているのに なぜ削除が出来ないのか 初心者で恐縮ですが ご教示頂ければ幸いです。

  • mailアドレスのチェック

    メールアドレスのバリテーションチェックをしたいですが、 チェック項目:入力されたメールアドレスは@の前後1文字以上、不正記号がなければtrue 下記のような書き方は間違ってるのでしょうか? ↓↓↓↓↓↓↓↓バリテーションチェック内容↓↓↓↓↓↓↓↓ function validateMailAddress(arg){ wmail = arg; wnum = Number(wmail.indexOf("@")); if (!validateMinNumber(wmail,1)) { return false; } else { if (wnum == -1) { return false; } else { if (wmail.match(/[^\w\!\#\$\%\&\\\(\)\*\+\,\_\.\/\:\;\<\=\>\?\@\[\]\^\~\-\`\{\}\・\。\、\|]+/)){ return false; } else { return true; } } } } 間違え点をご指摘頂けば、ありがたいです。よろしくお願いします。

  • ACCESS重複のチェック

    ACCESSで重複チェックをしたいと思います。 現在は電話番号テーブルだけしかありません。 電話番号のテーブルを主キーを使って重複している場合エラーメッセージを出すというものです。保存ボタンもありません。 Private Sub text電話番号_BeforeUpdate(Cancel As Integer) If IsNumeric(text電話番号) = False Then '数字チェック。 MsgBox "電話番号は数字で入力して下さい。", vbCritical Cancel = True ' 処理を取り消します。 Me.Undo End If Dim strmsg As String strmsg = "重複しています" If Not IsNull(DLookup("[電話番号]", "ダブリチェックテーブル", "[電話番号] = [text電話番号]")) Then MsgBox strmsg, 16, "ダブリチェック" Cancel = True '処理を取り消します。 Me.Undo '元に戻します。 Else Cancel = False '処理を続行します。 End If End Sub これに、企業名と出発日という項目を増やしたいと思います。 ですが、何万とある電話番号を一気に入力して調べているので、一回一回企業名と出発日を入れていると生産性が落ちます。 ですので、企業名と出発日は最初の入力だけで次のレコードに移動してを継続させたいのです。そして電話番号以外にカーソルを行かないようにしたいです。 何か良い方法があればご教授お願いします。 ちなみにいろいろ自分なりに試したのですが、重複してエラーを出した場合に企業名にカーソルが飛んだししてうまくいきませんでした。

  • PostgreSQLのUPDATE文につきまして

    お世話になります。 phpPgAdminで更新作業をしていまして 一件一項目の更新で update "store_table" set "tenpo_add" = '東京都1-1-1' where "kaiin_no" = '123456'; とした場合はうまく更新でできたのですが、以下のように複数項目の更新が文法エラーになります。 update "store_table" set "tenpo_post1","tenpo_post2","tenpo_add" = '123','4321','東京都1-1-1' where "kaiin_no" = '123456'; このようにした場合、  "," ←この部分が文法上おかしいとのエラーが出ました。 どのように記載すれば良いかご指導いただければ幸いでございます。。

  • 電話番号の入力チェック

    ハイフン付きの電話番号のチェックをしようとしています。いろいろ調べていますがうまくいきません。5桁までの半角数字-5桁までの半角数字-5桁までの半角数字という書式のチェックを考えています。 if (ereg("^[0-9]{1,5}-?[0-9]{1,5}-?[0-9]{1,5}$", $str )) { return true; } else { return false; } で中途半端になってチェックされます。 間違っているのか?他に書き方があるのか?教えてください。 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • フォームのチェックについて

    今、フォームの送信ボタンを押すとチェックする 関数を作成しております。 function restChar() { if(10000 < document.F1.ご質問内容.value.length) window.alert("ご質問内容は全角5,000字以内でお願いします"); } function check(){ var flag = 0; if(document.F1.name.value == ""){ // 「お名前」の入力をチェック flag = 1; } else if(document.F1.kana.value == ""){ // 「パスワード」の入力をチェック flag = 2; } else if(document.F1.mail.value == ""){ // 「コメント」の入力をチェック flag = 3; }      else if(document.F1.ご質問内容.value == ""){ // 「コメント」の入力をチェック flag = 4; } if(flag == 1){ window.alert('お名前を入力してください'); // 入力漏れがあれば警告ダイアログを表示 return false; // 送信を中止 } if(flag == 2){ window.alert('フリガナを入力してください'); // 入力漏れがあれば警告ダイアログを表示 return false; // 送信を中止 } if(flag == 3){ window.alert('メールアドレスを入力してください'); // 入力漏れがあれば警告ダイアログを表示 return false; // 送信を中止 }      if(flag == 4){ window.alert('ご質問内容を入力して下さい'); // 入力漏れがあれば警告ダイアログを表示 return false; // 送信を中止 } fOBJ = document.F1.mail.value; check = /.+@.+\..+/; if (!fOBJ.match(check)){ window.alert("メールアドレスが正しくありません"); return false; // 送信を中止 } fOBJ = document.F1.ご質問内容.value.length; if(10000 < fOBJ){ window.alert("ご質問内容は全角5,000字以内でお願いします"); return false; // 送信を中止 } return true; // 送信を実行 } こんな感じです。 1-4のチェックは問題ないのですが、 アドレスと文字数のチェックは、一度は ダイアログがでますが、連続で押すと通ってしまいます。 何がわるいのでしょうか?

    • ベストアンサー
    • Java
  • チェックボックスの入力チェック

    JSPでJavaScript使用しています。 no.logからテキスト(1~80までの数値がランダムに書いてある)を読みこんで、その数字でチェックボックスを作り、チェックの付いている番号を違うJSPに飛ばしています。この時どこもチェックされて無ければメッセージを表示したいのですがうまくいきません。 チェックが付いているのに、チェックされていないと認識され、メッセージが表示されてしまいます。5行目のif文が問題だと思うのですが、どうすればいいのかわかりません。アドバイス下さい。宜しく御願いします。 <script language="JavaScript"> <!-- function check(){ no = document.form1.no.value; if(no == null){ alert("チェックしてください"); return false; } } //--> </script> <form name="form1" method="post" action="test2.jsp" onSubmit="return check()"> <% String str = null; int tmpn = 0; int count = 0; BufferedReader br2 = new BufferedReader(new FileReader(getServletContext().getRealPath("/WEB-INF/no.log"))); while((str = br2.readLine()) != null) { tmpn = Integer.parseInt(str); count++; if(tmpn >= 1 && tmpn <= 9){ %> <input type="checkbox" name="no" value="<%= String.valueOf(tmpn) %>">0<%= tmpn %> <% }else{ %> <input type="checkbox" name="no" value="<%= String.valueOf(tmpn) %>"><%= tmpn %> <% if(count == 10){ out.print("<br>"); count = 0; } } } %> <input type="submit" value="送信">

  • sqlで重複チェック

    よろしくお願いします。 会員サイトのマイページにて住所などの情報を更新するページを作成しておりますが、つまづいております。 情報の更新は住所や電話番号なのですが、住所のみを更新する際、電話番号の重複チェックで、 重複チェック用にデータをSELECTした時、自分自身のレコードが含まれているため、自分自身のレコードで重複となってしまい、先に進めません。 WHERE句をうまく利用すればできると思うのですが思いつきません。。。 どのようにSQLを書けばいいのかご伝授ください。

    • ベストアンサー
    • MySQL
  • Accessで、重複データのチェック

    Access2000で、テーブル更新用のフォームを作っています。既に登録済みのレコードを編集する、あるいは新規のレコードを登録する機能を持っています。 そのフォーム上のテキストで、既存レコードを編集、あるいは追加したい新規レコードを入力して、テキストからフォーカスを離すと、入力したレコードが既存のレコードと重複していないか、チェックを走らせています。重複している場合は、適切なレコードが入力されるまで、そのテキストからフォーカスを離さないようにしています。が、やはりそのようなチェックの仕方では、既存のレコードに一度手を加えてしまうと、手を加える前のレコードに戻すことは出来ません。 たとえば、"東京都"というレコードが登録済みである→"東京都"を"北海道"に変える→やっぱり"東京都"というレコードに戻す→重複チェックにひっかかり、フォーカスもそこから離せない状態である→元のレコードにはもう戻せない、とにかく"東京都"と異なる値で登録するしかない。。。という具合です。以下の関数を、更新前処理でよんでいます。どなたか、よいアドバイスをください。お願いいたします。 Function ChkInp(pCntrl As Control, _ pClmName As String, _ pCourt_Cd As String) As Boolean   Dim wSQL As String ChkInp = False wSQL = "" wSQL = "select AREA_CD from COURTED_XXT009" wSQL = wSQL + " where COURT_CD = '" & pCourt_Cd & "'" wSQL = wSQL + " and " & pClmName & " = '" & pCntrl & "'" Set rst = CurrentDb.OpenRecordset(wSQL, , acReadOnly) If rst.EOF() = False Then ChkInp = True End If End Function

  • 半角カタカナの入力チェックを作りたいです

    入力フォームで入力された文字に対して半角カタカナかチェックをしたいです。 function CheckHalfSizeKatakana($str) {  if (mb_ereg("^[ア-ン゛゜]+$",$str)) {    return true;  } else {    return false;  } } としたのですがうまくいきません。 PHP4です。

    • ベストアンサー
    • PHP