
こんばんは。いつもお世話になっております。
初歩的な質問かと思いますが、hiddenでのデータの受渡で、配列でのチェックボックスが上手くわたせずに悩んでおります。
if($_POST['send']){
**メール送信の処理します**
$from_addres="xxxxxx@xxxxxxx.jp";
$to_addres=$mailadd;
$make_subject="メール送信";
$message="-入力内容-
アドレス:{$mailadd}
なぜ:{$why}";
mailsend($to_addres,$from_addres,$make_subject,$message);//はぶいてますがfunction()書いています
}elseif($_POST['submit']){
**内容確認**
foreach ($_POST['why'] as $key => $why){
if($why==0){$why0="0です";}
if($why==1){$why1="1です";}
if($why==2){$why2="2です";}
}
**入力内容表示**
<form method="post" action="<?=$_SERVER['../SCRIPT_NAME']?>">
<input type="hidden" name="why[]" value="<?php echo $_POST['why'];?>">
<input type="submit" name="return" value="修正">
</form>
<form method="post" action="<?=$_SERVER['../SCRIPT_NAME']?>">
<input type="hidden" name="why[]" value="<?php echo $_POST['why'];?>">
<input type="submit" name="send" value="送信">
</form>
}else{
<form method="post" action="<?=$_SERVER['../SCRIPT_NAME']?>">
<input name="why[]" type="checkbox" value="0"<?if($why==0){ print " checked";}?>>0
<input name="why[]" type="checkbox" value="1"<?if($why==1){ print " checked";}?>>1
<input name="why[]" type="checkbox" value="2"<?if($why==2){ print " checked";}?>>2
<input type="submit" name="submit" value="確認画面へ">
</form>
}
同一ページにてif分で分岐して処理しています。
確認画面での値受け取りはできています。
その後の、送信・修正へのhiddenへの値受け渡しが上手くいきません。
結果、どう動作して欲しいかといいますと、
・returnで戻った時に、値を保持してチェックしてあったチェックボックスに"checked"をつけたい
・sendへの値の受け渡し
・メールをとばすので、その本文への値の入れ方
foreach ($_POST['why'] as $key => $why){
if($why==0){$why0="0です";}
if($why==1){$why1="1です";}
if($why==2){$why2="2です";}
}
をメールをとばすところでも記述して$why0 $why1 $why2をprintすれば良いのでしょうか?
ググってみたり、色々検索してみたのですが、調べ方がよくないので見つからず、質問をさせていただきました。
よろしくお願いします。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
補足への回答はコレで良いのだろうか…A No2の補足へのレスです。
> 書いていただいたもので、早速試してみました。
> が、
> foreach ( $_POST['check'] as $key => $val )
> {
> printf( '<input type="hidden" name="check[%s]" value="%s">', $key, $val );
> }
> このprintfの行で構文エラー?
> Parse error: syntax error, unexpected '@' in
> と出ます。
> なででしょうか?
見たとこ異常は無い様に見受けます。
syntax errorって言うのはPHPの構文が違うぞーと言う時に出るエラーです。
よく半角スペースやカッコ等を全角で入れてたり、カッコを閉じ忘れていたりする時に出るエラーです。
で、エラー文言を見ると「ヘンな所に[@]があるんですけど何ぞこれ?」と言ってるように見えます。
本当にココのprintfが出してるエラーですか?
ブロックレベルで間違っていると、ココよりずっと後に変な構文があったりするケースがあります。
もう一度見直してみてください。
> あと、isset( $_POST['check']に値があったらというのは
> if(isset( $_POST['check'] )){
> }
> で書き方はあってますか?
大丈夫、合ってます。
PHPの配列を扱うならissetは避けて通れない道だと個人的に思っています。
マニュアルの例を見つつ経験を積んで行きましょう。
……やがて$_POSTみたいなグローバル変数やprintfを安易にあちこちで使ったりするのに嫌悪感を覚え始めたら一人前ですw
No.2
- 回答日時:
書き切れなかったんだぜ?
こう言う回答の仕方アリなのかなこれ…
No1の続きですYO。
続いてないよう確認部分。
さっきはtype="checkbox"で書きましたがtype="hidden"でも基本は同じ。
こちらは「チェックがあった分だけhiddenを書く」と言う方法を使います。
$_POST['check']に入るのはチェックのあったデータだけなんだから、この中身全部書けばチェックしなかった分は除かれると言う寸法です。
foreachを使いましょう。
foreash ( $_POST['check'] as $key => $val )
{
printf( '<input type="hidden" name="check[%s]" value="%s">', $key, $val );
}
流石に何やってるかは解るよね?
こうすればチェックがあった分だけhiddenフォームが書ける訳です。
$_POSTデータも先ほどと同じ物が入ります。
さっきと同じようにキーにする識別氏も中身も同じ物を入れているから当然です。
コレはメールに入れる本文も同じ。
チェックした値全てを本文に書きたい場合は、foreachで取得したデータを全て書き出してやれば良いのです。
……ああ、そうそう忘れてた。
全ての値にチェックを入れずに送信されると$_POST['check']その物が存在しなくなるから、foreachとかで読み取る時に存在しない変数を見てるよって事でNoticeErrorが吐かれます。
回避する為にはforeachを行う前に isset( $_POST['check'] ) で中身があるか判断して、ある時だけforeachをかけるように修正してあげてください。
以上、長々と失礼致しました。
この回答への補足
すごく丁寧に書いて頂き、ありがとうございます。
とてもわかりやすいです!
短いよく説明出来ていない文章なのに、知りたいことを回答していただいています!
checkboxは使ったことが無かったので、悪戦苦闘していました。
識別子を用いると、checkedをつける時に便利なんですね、勉強になりました。
やりたいことが実現に近づきました!
ありがとうございます。
書いていただいたもので、早速試してみました。
が、
foreach ( $_POST['check'] as $key => $val )
{
printf( '<input type="hidden" name="check[%s]" value="%s">', $key, $val );
}
このprintfの行で構文エラー?
Parse error: syntax error, unexpected '@' in
と出ます。
なででしょうか?
あと、isset( $_POST['check']に値があったらというのは
if(isset( $_POST['check'] )){
}
で書き方はあってますか?
issetも初めて使いました。
よろしくお願いします。
No.1
- 回答日時:
ゴメン、質問内容がうまく把握できない上にソースが良く解んなかったYO。
質問内容と違うかもしれないけど、基本から行ってみましょうか。
とりあえずチェックボックスに入れた値のやり取りって事でOK?
まず、HTML側で以下のようなチェックボックスがあるとします。
<input type="checkbox" name="check[]" value="value1">
上記をチェックして送信すると、受け取ったPHPの$_POSTにはこんなデータが入ります。
$_POST['check'] = array( 'value1' );
上の例は少し解り難いのでこう書いた方が解りやすいかな。
$_POST['check'][] = 'value1';
入っているデータは同じなんですよね。配列に入れる時にはこう言う書き方もあるよと。
[]って言うのは、配列にプッシュバックする事と同じなんです。
だから以下のような書き方をして全てチェックして送信するとこんな感じになる。
※HTML側のフォーム
<input type="checkbox" name="check[]" value="value1">
<input type="checkbox" name="check[]" value="value2">
<input type="checkbox" name="check[]" value="value3">
↓
※PHPの受け側
$_POST['check'] = array( 'value1', 'value2', 'value3' );
↓
※別の書き方をすると
$_POST['check'][] = 'value1';
$_POST['check'][] = 'value2';
$_POST['check'][] = 'value3';
さて、ここでややこしくなる。
全てチェックしてあれば良いんだけど、例えば最初と最後だけチェックして送信すると、チェックされてない値は$_POSTに入ってこなくなるとです。
※最初と最期だけチェックして送信された値
$_POST['check'] = array( 'value1', 'value3' );
↓
$_POST['check'][] = 'value1';
$_POST['check'][] = 'value2';
↑チェックから外れたvalue2がデータから無視される
コレだとchecked指定を使って最初からチェックさせよう、なんて小細工を弄するには不向きなんですよね。
だから普通は[]の中に識別子を入れて区別できるように仕向けます。
具体的には以下のような感じ。
※HTML側のフォーム
<input type="checkbox" name="check[0]" value="value1">
<input type="checkbox" name="check[1]" value="value2"> ←コレだけチェックせずに送信
<input type="checkbox" name="check[2]" value="value3">
↓
※受け側のデータ
$_POST['check'] = array( 0 => 'value1', 2 => 'value3' );
↓
$_POST['check'][0] = 'value1';
$_POST['check'][2] = 'value2';
解りますかね?
check[] を check[識別子] とした事で、例えチェックされなくても必ず識別子のキーに値が入る事になるんです。
後はHTML側で「指定の識別子に値が入っているかどうか」を判断すればよろしい訳で。
具体的には isset を使います。
※checked指定を入れたHTML
<input type="checkbox" name="check[0]" value="value1" <?php if ( isset( $_POST['check'][0] ) ) echo 'checked'; ?>>
<input type="checkbox" name="check[1]" value="value2" <?php if ( isset( $_POST['check'][1] ) ) echo 'checked'; ?>>
<input type="checkbox" name="check[2]" value="value3" <?php if ( isset( $_POST['check'][2] ) ) echo 'checked'; ?>>
コレで、チェックしてあった物にはchecked指定がくっ付く訳です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- HTML・CSS ただいま勉強始めたての初心者です。フォームを縦並べにしたいです。 2 2022/11/20 17:18
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DBの値をチェックボックスに反...
-
【PHPチェック】ラジオボタンが...
-
検索時の選択内容を保持する方法
-
PHP ボタンが押されたら処理を...
-
入力フォーム→確認画面→送信画...
-
フォームでのリセットを使う方法
-
PHPの関数実行
-
エラーを元の画面に表示させるには
-
HTMLで前の画面に戻る時、入力...
-
PHPで画像の渡しが上手く行きま...
-
【HTML(PHP?)】複数のフォーム...
-
<input type="hidden" >で配列...
-
PHPで、ボタンを押すと同じペー...
-
phpやmysqlで作る簡易掲示板作...
-
PHP insert文内での、変数の記...
-
選択された値をセッションで保...
-
PHPでURLにジャンプするには?
-
セッションを使わずに遷移先画...
-
フォームにダブルクォーテーシ...
-
VBA で、スペースを含むファイ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
検索時の選択内容を保持する方法
-
HTMLで前の画面に戻る時、入力...
-
同じページでフォームデータを...
-
PHPで、ボタンを押すと同じペー...
-
フォームボタンを押すたびに数...
-
フォームへの前回入力値をクリ...
-
DBの値をチェックボックスに反...
-
チェックボックスによる検索
-
HTMLフォームで複数選択のチェ...
-
フォームでのリセットを使う方法
-
エラーを元の画面に表示させるには
-
PHP ボタンが押されたら処理を...
-
チェックボックスの必須項目指定
-
【PHPチェック】ラジオボタンが...
-
POSTやGETの変数をフォーム無し...
-
PHPでクリックするたびに変数を...
-
入力した部分を表示させたまま...
-
ラジオボタンをsessionで使いたい
-
POSTデータのNAME属性をVALUEに...
-
アップロードの際にファイルパス
おすすめ情報