フォーム(オプションメニュー)とPHPの連携

このQ&Aのポイント
  • PHPとオプションメニューを使用して選択した項目に基づいて結果を出力する方法を教えてください。
  • membersテーブルとkirokuテーブルを使用して、選択したオプションに基づいてデータを表示する方法を教えてください。
  • SQL文に指定した条件でデータを取得しようとした際にエラーが発生し、データが表示されません。解決方法を教えてください。
回答を見る
  • ベストアンサー

フォーム(オプションメニュー)とPHPの連携

こんにちは。オプションメニューから選択した項目によって結果を出力するというものを作っています。 オプションで選択するのは名前、年度、距離です。 テーブルは以下の2つを用います。 membersテーブル(主キー:number)  number  name 1     A 2     B kirokuテーブル (主キー:number,date) number  date     full   half  10km 1    2005-5-22   2:55:21 1    2004-3-11        1:19:15 ここから、例えば、オプションで「A」「2005年」「フル」を選択するとAの2005年のフルの記録が表示されるというものです。 sql文は以下のようにしました。 $sql = "select members.number,members.name kiroku.date,kiroku.$distance from members,kiroku where (members.name = $name) and (kiroku.date like '%$date%') and (members.number = kiroku.number)"; ここで$distanceにはオプションで選択した距離(例だとfull)$nameには選択した名前(例だとA)$date(には選択した年度(例だと2005)が入っています。 しかし、これだと Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in ~ が表示され、だめでした。 この場合どうすればよいのでしょうか? よろしくお願いします。

  • MySQL
  • 回答数5
  • ありがとう数4

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

  • ベストアンサー
回答No.5

No1の回答を参考にもう一度調べて下さい。 ベテランでも書いたスクリプトが一発で動く事など滅多にありません。エラーが出るたびにNo1でやったように、変数の中身を表示して正しいかどうか確認したり直したりを繰り返して動くようにします。エラーの原因を調べて動かすにはこの方法しかありません。一つエラーが出る度にここで聞いていては全然進まないと思いますよ。 それとエラーメッセージは英語で表示されますが、翻訳ソフトで訳せる範囲のものですし、英文のままでも読もうと思えば何となく想像が付く内容ではないですか?初心者の方がエラーを取る事ができない一番の理由はエラーメッセージを読もうとしてない事ですよ(^^)。 SQLは想像で動かそうとしても難しいと思います。mysqlクライアントなど手打ちでSQLを実行できる環境で、マニュアルを見ながら一つ一つ動作を確認しましょう。あまりここで親切にし過ぎると、あなたのためにならないと思いますので。 http://www.php.net/manual/ja/ http://dev.mysql.com/doc/mysql/ja/index.html

kenkenkenken25
質問者

お礼

ご指導、ありがとございます! 現在、wakame0729さんのご説明やご紹介してくださったサイトを参考にsql文を書いています。(エラー表示はsql文に問題があるということがわかりました) ここ3日ほど取り組んでいるのですが、エラーが消えないため再び質問させていただくかもしれませんがそのときはよろしくお願いいたします。

その他の回答 (4)

回答No.4

'を使わない理由はなんでしょうか?問題ないと思いますよ。 "を使うなら、""内の全ての"の前に\を付けます。\を付ける意味を考えて下さい。aaa"aaa"aaaって文字列があったとして、これを""でくくるうとしましょう。普通にやると"aaa"aaa"aaa"こうなりますよね。これではPHPがどこからどこまで文字列なのか判断できなくなります。"aaa"で切るべきなのかもしれないし、"aaa"aaa"かも知れないですよね。この場合文字列をくくる"は最初と最後の二つです。中で使っている"はPHPから見れば単なる文字です。これをくくりのための""と区別するために\を前に付ける必要があります。もしつけなければ"の始めと終わりが食い違うため、構文エラーになります。 頭に\を付ける行為をエスケープと言います。

kenkenkenken25
質問者

補足

解説まで添えてくださって、本当にありがとうございます。 wakame0729さんのおっしゃるとおりにやってみたのですが、再び以下のメッセージが表示されてしまいました。 Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in ~ やはり、sql文自体に問題があるのでしょうか?

回答No.3

""がネスト(多重)になってます。 name=のくくりを'にして下さい。また、""の中で"を書きたい場合は\"とします。

kenkenkenken25
質問者

補足

name=のくくりを'にしてしまうと、nameは文字列なので"を使おうと思っています。そこでwakame0729さんがご提示くださった方法でnameのくくりの部分を以下のようにしたのですが ("members.name\" = "$name\") これだと、 Parse error: syntax error, unexpected T_STRING in~ と表示されてしまいます。 お手数ですが、ご回答の方、よろしくお願いします。

回答No.2

>Parse error: syntax error, unexpected T_VARIABLE in~ SQL文のエラーは直ったみたいですね。 上記のエラーはPHPの構文エラーです。タイプミス、例えば{}の対応が正しくない、""の数が合わない、などのエラーです。エラーが確認された行が表示されてると思うので、その行の前後でこのようなミスがないか確認して下さい。

kenkenkenken25
質問者

お礼

すみません。$nameの前後に"がついていませんでした。 以下が訂正後のsql文です。 $sql = "select members.number,members.name kiroku.date,kiroku.$distance from members,kiroku where (members.name = "$name") and (kiroku.date like '%$date%') and (members.number = kiroku.number)";

kenkenkenken25
質問者

補足

エラー行の前後を見たところ、おそらく以下のsql文に誤りがあると思われるのですが・・・ ご指摘にあった""や()の数は間違っていないと思うのですが、どこか抜けているでしょうか? $sql = "select members.number,members.name kiroku.date,kiroku.$distance from members,kiroku where (members.name = $name) and (kiroku.date like '%$date%') and (members.number = kiroku.number)";

回答No.1

>Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in ~ このエラーはmysql_fetch_array()の引数が正常な値じゃありません、という意味です。mysql_queryの実行時にエラーがあるか、DBとのコネクト等がうまく行ってないかだと思います。 mysql_queryの返り値を$rsだとして、var_dump($rs);としてみて下さい。falseになってませんか? 次にmysql_queryの直後でmysql_error()を実行して下さい。エラーメッセージが表示されるはずです。これがSQLエラーであればSQL文の間違いです。mysql_queryの前でprint $sqlをして、表示されたSQL文をmysqlクライアントなどで実行してエラーが出ないか確認して下さい。 それ以外の場合でもエラーメッセージを参考にして、どこが間違っているのか確認しましょう。 ちなみにmenbers.nameは文字列型ですよね?だとしたら''でくくってあげないといけないはずです。また、適宜addslashersなどをして下さい。

kenkenkenken25
質問者

補足

members.nameを"でくくることで Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in ~ は表示されなくなりました。代わりに以下のエラーが表示されてしまうのですが、 Parse error: syntax error, unexpected T_VARIABLE in~ sql文が間違っているということなのでしょうか?

関連するQ&A

  • フォームとPHPの連携

    こんにちは。今回、オプションメニューのフォームを作り、選択したオプションごとにデータを表示させるというものを作っているのですが、オプションを選択し、実行すると、 Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in~ Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in~ と表示されてしまいます。 フォームを用いずに単にデータを表示させるだけならできたのですが・・・ フォームとPHPを連携させる場合、php.ini内のregister_globalsをOnにする必要があるとのことだったので、Onにはしているのですが・・・ 問題はほかにあるのでしょうか?よろしくお願いします。

    • ベストアンサー
    • MySQL
  • オプションメニューでデータの呼び出し

    memberというデータベースを作りました。member内は会員番号(number)、名前(name)、フルマラソン(full)、ハーフマラソン(half)、10km(10km)というフィールドがあります。 オプションメニューのページをhtmlで作り、そのオプションでフルマラソン、ハーフマラソン、10kmのいずれかを選択することで、会員番号、名前、選択した距離を表示できるようなものを作りたいのですが、選択したオプションに関するデータを抽出させる方法がわかりません。 考えているのはオプションで例えば「フルマラソン」を選択した場合、 select number,name,full from memberという命令を実行させるというものなのですが・・・ よろしくお願いします。

  • phpのリストボックスについて

    よろしくお願いします。 phpを利用し、条件にあった内容を表示させる画面を作っています。 リストボックスで選択した内容を次のリストボックスの選択キーとして 別テーブルの検索条件に利用できるものでしょうか?? 以下のソースなんですが、 //------------------------------------------------------------- ソースA: print "<select name='brand' id='brand' style='width:190'>"; $sql ="select * from brand ORDER by no"; $res = mysql_query($sql); if ($res and mysql_num_rows($res)) { while($rec=mysql_fetch_array($res)){ echo "<option value='{$rec['name']}' >{$rec['name']}</option>"; } } print "</select>"; //-------------------------------------------------------------- とbrandテーブルからnameをリストボックス表示させます。 この表示し、選択した内容(仮にダイヤ)を同画面にあるもう一つの リストボックスで同じようなソースで別テーブルをselect文の検索キーに したいのです。以下のような感じ・・ //------------------------------------------------------------- ソースB: $sql ="select * from item where = 'ダイヤ'"; $res = mysql_query($sql); if ($res and mysql_num_rows($res)) { while($rec=mysql_fetch_array($res)){ echo "<option value='{$rec['itemname']}' >{$rec['itemname']}</option>"; } } print "</select>"; //-------------------------------------------------------------- の$sql ="select * from item where = 'ダイヤ'";←このダイヤを ソースAからもってきたいのですが、何かよい方法はありますか? 変数作ってやってみましたが、うまくいかずです。phpだけでは無理でしょうか?よろしくお願いします。

    • 締切済み
    • PHP
  • MySQLとPHP(HTML)の連携について

    送信側では、PHP(HTML)下記のように書きました。 ----------------------------- <form action="input.php" method="post"> ボタン1:<input type="submit" name="input" value="入力">   ボタン2:<input type="submit" name="input2" value="入力"> </form> ----------------------------- 受信側(input.php)は下記のように書きました。 ----------------------------- <?php $url = "***.sakura.ne.jp"; $user = "abc"; $pass = "12345"; $db = "sakura_db"; if (isset($_POST["$input"])){ $sql = "SELECT SQL_CALC_FOUND_ROWS * FROM MAIN"; }elseif (isset($_POST["$input2"])){ $sql = "SELECT SQL_CALC_FOUND_ROWS * FROM MAIN2"; } //Connect MySQL Server $my_Con = mysql_connect($url,$user,$pass); mysql_query("SET NAMES utf8",$my_Con); if ($my_Con == false){ die("MySQL Server接続に失敗しました。"); } //Connect MySQL DataBase if (!mysql_select_db($db,$my_Con)){ die("MySQL DataBase選択に失敗しました。"); } //MySQL Deta Read $my_Row = mysql_query($sql,$my_Con); if (!$my_Row){ die(mysql_error()); } $a = 1; while ($row = mysql_fetch_array($my_Row) or $a <= 50) { echo ' <p>'; echo ' A'.$a.':<input name="date" type="text" size="4" value="'.$row["a"].'">'; echo ' B'.$a.':<input name="date" type="text" size="4" value="'.$row["b"].'">'; echo ' C'.$a.':<input type="checkbox" name="example"'.check($row["c"]).'>'; echo ' D'.$a.':<input type="checkbox" name="example"'.check($row["d"]).'>'; echo ' </p>'; $a++; } //Close MySQL Server $my_Con = mysql_close($my_Con); if (!$my_Con) { exit("MySQL Server閉じられませんでした。"); } ?> ----------------------------- この状態で送信側のボタンをクリックすると、input.php側では”Query was empty”とエラーがでます。 送信側の2つあるボタンによって表示されるテーブルを変えたいのですが、何が原因なのでしょうか? そもそもSQLの内容をif文での条件分岐は出来ないのでしょうか? 最近PHPを勉強し出した初心者です。 出来れば分かりやすく教えていただけないでしょうか。 よろしくお願い致します!

    • ベストアンサー
    • PHP
  • PHPプログラミングについて、ホームページの画面表示方法を教えてくださ

    PHPプログラミングについて、ホームページの画面表示方法を教えてください。 (テーブルのid順以外に並べる方法) ・MySQLのテーブル名:category、フィールド2つ:idとname 1)すべてのカテゴリを読み込むSQLを組み立て $sql = "SELECT * FROM category"; 2)結果セットを取得し $rst = mysql_query($sql, $con); 3)オプションメニューを組み立て $stroption = ""; while ($col = mysql_fetch_array($rst)) { $stroption .= "<OPTION value='$col[id]'>$col[name]</OPTION>"; } 4) <SELECT name="categoryid"> <OPTION value="0" selected>--カテゴリ--</OPTION> <?=$stroption?> </SELECT> 結果→id順になる これをnameのABC順に並ぶようにする方法を ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 教えていただけないでしょうか? 是非よろしくお願いしたします。

    • ベストアンサー
    • PHP
  • FlashとPHPの連携

    はじめまして、今回ぜひとも聞きたいことがあります。Flashの画面で入力されたデータを、PHPを介して、MySQLで作ったデータベースに格納したいのですが、できません。下がソースです。何がいけないのかまったくわかりません。どうか教えてください。お願いします。 <?php $name = $_POST["name"]; $sex = $_POST["sex"]; $Byear = $_POST["Byear"]; $Bmonth = $_POST["Bmonth"]; $Bday = $_POST["Bday"]; $password = $_POST["password"]; $money = $_POST["money"]; $con=mysql_connect("localhost","root","aimar21"); mysql_select_db ("okozukaishisutemu"); $sql = "insert into yuzatouroku2 (name,sex,Byear,Bmonth,Bday,password,money,hiduke) values('".$_POST["name"]."', '".$_POST["sex"]."', '".$_POST["Byear"]."', '".$_POST["Bmonth"]."', '".$_POST["Bday"]."', '".$_POST["password"]."', '".$_POST["money"]."', '".$_POST["hiduke"]."')"; $res =mysql_query($sql); mysql_close($con); ?> \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ this.touroku_btn.onRelease = function(){ a = new LoadVars(); a.namae = namae_txt; a.sex = sex_txt; a.Bmonth = month_txt; a.Bday = day_txt; a.pass = pass_txt; a.money = money_txt; a.sendAndLoad("yuzatouroku3.php",a,"POST"); }

    • ベストアンサー
    • Flash
  • phpとMySQLの連携2

    MySQLとphpとphpMyAdminを使ってWEBデータベースを構築したいと考えています。 当初からこちら http://www.comtechware.com/demo/members.php のようにエクセルのオートフィルタみたいに動くものを 作りたいと考えております。 MySQLにテーブルを作ってデータを入れることはできました。 しかしphpのサンプルの改造など模索しましたが 基本的なSQL文だけでは ファイルが作れずに行き詰っております。 phpとSQL文に関しては始めて1ヶ月程度です。 スキルが初級シスアドレベルの私には phpとSQLの入門書だけでは到底作れないレベルだと感じてきました。 どなたか参考になるサンプルをお持ちの方がいらっしゃいましたら、 いただけないでしょうか。 もちろんほぼ丸投げであることは重々承知してはおりますが 上記URLのようなのデータベースはレベルが相当高いのか、 高ければあきらめます。 念のため改造したソースを添付します。 判断材料に指針だけでもいただけないでしょうか。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • PHP+MySQLの繰り返し処理で…

    PHPとMYSQLを使ってWEBページを作っています。 わからないところがあるので、どなたか教えていただけないでしょうか?php5+mysql4.0.1です。 検索フォームから送られてきた条件をもとに、1ページに10件の検索結果を表示しています。表示するのはテーブル1の名前で、ここまではうまくいっています。 例:------------------------------------------ 検索結果 神奈川県 林さん 東京都 遠藤さん 北海道 近藤さん 例:------------------------------------------ このあと、上記クエリの結果が続く限りテーブル2 から名前に該当する趣味を表示したいと思います。 例:------------------------------------------ 検索結果 神奈川県 林さん テニス 東京都 遠藤さん サッカー 北海道 近藤さん 絵画 例:------------------------------------------ この処理を加えると、一ページに10件表示されていたものが最初の一件だけしか表示されなくなってしまいます。whileの中に新たにクエリを書いているからでしょうか…? 以下に問題部分だけ見やすくまとめなおしたソースを書きました。 (1)$sql = "SELECT name,ken FROM tablename where ken=$ken"; $mysql->query($sql); while($row = $mysql->fetch()){ $name = $row[name]; (2)$sql2 = "SELECT syumi FROM tablename2 WHERE name='$name'"; $mysql->query($sql2); while($row2 = $mysql->fetch()){ $syumi = $row2[syumi]; } echo "$ken"."$name"."$syumi"; } わかりづらい説明ですみません。 テーブル1に趣味のフィールドを作ることはできない前提で、このままのDB構造でうまく上記を解決することはできますか? ご指導よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPでレコード追加(MYSQL)が出来ません

    以下のようにするとうまくいってたのが、 ひとつフィールドを増やすとうまくいきません。 単純なミスだろうと思い、数時間格闘していますが見つかりません。 よろしくご教授お願いいたします。 MYSQL table mem id vacher(10) name vacher(100) pass varcher(8) regdate date PHP $sql = "insert into mem (id , name , pass ,regdate) values ('$id', '$name', '$pass', now())"; ↓↓↓↓↓↓ MYSQL table mem id vacher(10) name vacher(100) pass varcher(8) regdate date kikan varcher(100) PHP $sql = "insert into mem (id , name , pass ,regdate ,kikan) values ('$id', '$name', '$pass', now() ,'$kikan')";

    • ベストアンサー
    • MySQL
  • 結合について

    次のようなテーブルがあるとします。 Table A No,Date,member_A,member_B 1 ,0102 ,1001 ,1003 2 ,0212 ,1091 ,1023 3 ,0403 ,1056 ,1065 Table B member ,Name 1001 ,Taro 1002 ,Takashi 1003 ,Yutaka といった具合のテーブルがあるとします。 やりたい事はTable AのNoを指定されたらDateとmember_Aとmember_BのNameを取得したいのです。 例えば、No1を指定したら、0102 ,Taro ,Yutakaといった具合に・・・。1発で取得するにはどういったSQLになりますか?どなたかご教授願います。よろしくお願いします。