dポイントプレゼントキャンペーン実施中!

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に値が渡るようにしているはずなんですが。。

A 回答 (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() を実行し、
その内容を検索すればクエリの何が悪いのかがわかると思います。


エラーの出力、実行したクエリの確認手段を用意する、など、
デバッグ用の手段・環境を用意すると、格段に開発作業がスムーズになると思います。
    • good
    • 0

#2です


回答内容に追加質問があるなら回答に対してレスをしてください

><input type="hidden" name="jyusyo" value="<?php echo addslashes(implode((array) $_POST['jyusyo'],",")); ?>" />

を実行してb.phpにわたるデータは

$_POST["jyusyo"]でカンマ区切りのデータですね
なのでb.phpで以下のようにしてみては?

$jyusyo=explode(",",$_POST["jyusyo"]);
    • good
    • 0

この人に回答してしまった人向けのヒント


http://www.phppro.jp/qa/3407

本人なのかコピペなのかわしりません
    • good
    • 0

結局セッション案はうまくいかなかったの?



><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のソースをブラウザで見ればある程度わかるはずなんだけど・・・
    • good
    • 0

その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

とし、エラーが出力された際にサーバー内のファイル構造などが
外部から読み取れないようにすることもお忘れなく。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!