- ベストアンサー
フォーム(オプションメニュー)とPHPの連携
- PHPとオプションメニューを使用して選択した項目に基づいて結果を出力する方法を教えてください。
- membersテーブルとkirokuテーブルを使用して、選択したオプションに基づいてデータを表示する方法を教えてください。
- SQL文に指定した条件でデータを取得しようとした際にエラーが発生し、データが表示されません。解決方法を教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
No1の回答を参考にもう一度調べて下さい。 ベテランでも書いたスクリプトが一発で動く事など滅多にありません。エラーが出るたびにNo1でやったように、変数の中身を表示して正しいかどうか確認したり直したりを繰り返して動くようにします。エラーの原因を調べて動かすにはこの方法しかありません。一つエラーが出る度にここで聞いていては全然進まないと思いますよ。 それとエラーメッセージは英語で表示されますが、翻訳ソフトで訳せる範囲のものですし、英文のままでも読もうと思えば何となく想像が付く内容ではないですか?初心者の方がエラーを取る事ができない一番の理由はエラーメッセージを読もうとしてない事ですよ(^^)。 SQLは想像で動かそうとしても難しいと思います。mysqlクライアントなど手打ちでSQLを実行できる環境で、マニュアルを見ながら一つ一つ動作を確認しましょう。あまりここで親切にし過ぎると、あなたのためにならないと思いますので。 http://www.php.net/manual/ja/ http://dev.mysql.com/doc/mysql/ja/index.html
その他の回答 (4)
- wakame0729
- ベストアンサー率32% (245/765)
'を使わない理由はなんでしょうか?問題ないと思いますよ。 "を使うなら、""内の全ての"の前に\を付けます。\を付ける意味を考えて下さい。aaa"aaa"aaaって文字列があったとして、これを""でくくるうとしましょう。普通にやると"aaa"aaa"aaa"こうなりますよね。これではPHPがどこからどこまで文字列なのか判断できなくなります。"aaa"で切るべきなのかもしれないし、"aaa"aaa"かも知れないですよね。この場合文字列をくくる"は最初と最後の二つです。中で使っている"はPHPから見れば単なる文字です。これをくくりのための""と区別するために\を前に付ける必要があります。もしつけなければ"の始めと終わりが食い違うため、構文エラーになります。 頭に\を付ける行為をエスケープと言います。
補足
解説まで添えてくださって、本当にありがとうございます。 wakame0729さんのおっしゃるとおりにやってみたのですが、再び以下のメッセージが表示されてしまいました。 Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in ~ やはり、sql文自体に問題があるのでしょうか?
- wakame0729
- ベストアンサー率32% (245/765)
""がネスト(多重)になってます。 name=のくくりを'にして下さい。また、""の中で"を書きたい場合は\"とします。
補足
name=のくくりを'にしてしまうと、nameは文字列なので"を使おうと思っています。そこでwakame0729さんがご提示くださった方法でnameのくくりの部分を以下のようにしたのですが ("members.name\" = "$name\") これだと、 Parse error: syntax error, unexpected T_STRING in~ と表示されてしまいます。 お手数ですが、ご回答の方、よろしくお願いします。
- wakame0729
- ベストアンサー率32% (245/765)
>Parse error: syntax error, unexpected T_VARIABLE in~ SQL文のエラーは直ったみたいですね。 上記のエラーはPHPの構文エラーです。タイプミス、例えば{}の対応が正しくない、""の数が合わない、などのエラーです。エラーが確認された行が表示されてると思うので、その行の前後でこのようなミスがないか確認して下さい。
お礼
すみません。$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)";
補足
エラー行の前後を見たところ、おそらく以下の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)";
- wakame0729
- ベストアンサー率32% (245/765)
>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などをして下さい。
補足
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文が間違っているということなのでしょうか?
お礼
ご指導、ありがとございます! 現在、wakame0729さんのご説明やご紹介してくださったサイトを参考にsql文を書いています。(エラー表示はsql文に問題があるということがわかりました) ここ3日ほど取り組んでいるのですが、エラーが消えないため再び質問させていただくかもしれませんがそのときはよろしくお願いいたします。