- ベストアンサー
値の受け渡しが出来ない。
- index.htmlのチェックボックスの内容をa.phpで受け取り、この値を更にb.phpに送りたいのですが
- Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/sites/heteml//web/b.php on line 56 該当データ無し Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/sites/heteml//web/b.php on line 64 と、なって上手くデータが渡っていません。
- a.phpには <form action="b.php" method="POST"><input type="hidden" name="jyusyo[]" value="<?php echo ($_POST['jyusyo']); ?>" /><input type="submit" /></form> として、b.phpに値が渡るようにしているはずなんですが。。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>index.htmlのチェックボックスの内容をa.phpで受け取り、この値を更にb.phpに送りたいのですが すみません、前提のこの一行が頭から抜けていました(汗 …となると、index.html上にあるチェックボックスが <input type="checkbox" name="jyusyo" value="aaa"> なら、 <?php echo ($_POST['jyusyo']); ?> で良いですが、 <input type="checkbox" name="jyusyo[]" value="aaa"> の場合は、No.2の方の仰るように、 なんらかの形で配列データを文字列にしてあげないと <input type="hidden" name="jyusyo[]" value="Array" /> となってしまっていると思います。 そして、そもそもb.phpで起きているエラーですが、 MySQL問い合わせ結果に対して処理しようとした際に起きているエラーな訳ですが、 Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource (=mysql_num_rows()に渡された引数は、適正なMySQLの問い合わせリソースではありません) なので、恐らく問い合わせ自体に失敗している(=MySQLクエリの構文エラーがある)ものと思われます。 一番早いのは、このエラーが発生した際に実行したクエリをなんらかの方法で確認することです。 (開発段階であれば直接echoして簡単に確認出来ますが、 運用中なのであれば、別ファイルに書き出すなどして、一般ユーザーには見せない工夫が必要です) また、クエリのどこが悪いのかを知りたければクエリエラーの直後で mysql_errno() を実行し、 その内容を検索すればクエリの何が悪いのかがわかると思います。 エラーの出力、実行したクエリの確認手段を用意する、など、 デバッグ用の手段・環境を用意すると、格段に開発作業がスムーズになると思います。
その他の回答 (4)
- yambejp
- ベストアンサー率51% (3827/7415)
#2です 回答内容に追加質問があるなら回答に対してレスをしてください ><input type="hidden" name="jyusyo" value="<?php echo addslashes(implode((array) $_POST['jyusyo'],",")); ?>" /> を実行してb.phpにわたるデータは $_POST["jyusyo"]でカンマ区切りのデータですね なのでb.phpで以下のようにしてみては? $jyusyo=explode(",",$_POST["jyusyo"]);
- zeroshu
- ベストアンサー率0% (0/1)
この人に回答してしまった人向けのヒント http://www.phppro.jp/qa/3407 本人なのかコピペなのかわしりません
- yambejp
- ベストアンサー率51% (3827/7415)
結局セッション案はうまくいかなかったの? ><input type="hidden" name="jyusyo[]" value="<?php echo ($_POST['jyusyo']); ?>" /> は、ちょっと有り得ない書き方ですね ここでの$_POST['jyusyo']は配列データになっているはずなので それをバリューに渡すといっても「Array」みたいな文字列にしかならないかと。 全体像がわからないのでなんともいえないけど、せめて <input type="hidden" name="jyusyo" value="<?php echo addslashes(implode((array) $_POST['jyusyo'],",")); ?>" /> みたいなやり方しないとだめでしょう・・・ それでもさらに受け取るb.php側でjyushoを分解してもとに戻さないと いけないですけどね スキルに見合わないことをやるなら、もっと地道に一歩一歩検証しながらやりなさいな 今回の件だってa.phpのソースをブラウザで見ればある程度わかるはずなんだけど・・・
- hamachi98
- ベストアンサー率100% (5/5)
そのa.phpの前にフォームで name="jyusyo" で値をPOSTで送信してますか? もしくは、formタグを出力するより前に $_POST['jyusyo'] に値を代入していますか? このどちらもされてないようであれば、a.phpを表示させ、 ブラウザ上で「右クリック→ページのソースを表示」などで確認すると <form action="b.php" method="POST"> <input type="hidden" name="jyusyo[]" value="" /> <input type="submit" /> </form> と、hiddenの値は空の状態になっていると思います。 ($_POST['jyusyo']の値が定義されていないため) この状態でa.phpのフォームからb.phpへPOST送信を行っても、 b.php上での $_POST['jyusyo'][0] の値は空です。 それが原因でエラーが発生しているものと思われます。 ですので、なんらかしらの形でa.php上で $_POST['jyusyo'] の値が定義されるようにしてあげれば エラーが発生しなくなると思われます。 ※補足 もし可能であれば、開発中期間はNoticeエラーを含めて PHPエラーが発生した際、エラーを出力表示させることをお勧めします。 「.htaccess」というファイルを用意し、 php_flag display_errors on php_value error_reporting "6143" と記述すれば、サーバー側で設定の上書きが無効になっていなければ今回の場合、 Notice: Undefined index: jyusyo in /home/sites/heteml//web/a.php on line ... というようなエラーが表示されるかと思います。 (意味としては「注意:jyusyoという配列のキーは未定義です:該当箇所...」という感じ) また、この設定で開発した場合、一般公開の際には必ず php_flag display_errors off とし、エラーが出力された際にサーバー内のファイル構造などが 外部から読み取れないようにすることもお忘れなく。