PHPでチェックボックスの配列の値をPOSTしたい!

質問の仕方が悪かったので再び。
IDや名前は自働で入っていきます。
【フォーム画面】
<form method="POST" action="syuxtukin_chk.php">
<table>
<tbody>
<tr>
<td>ID</td>
<td>名前</td>
<td>2010-08-10</td>
<td>2010-08-11</td>
</tr>
<tr>
<td>16</td>
<td>テスト1<input type="hidden" name="name" value="テスト1"></td>
<td>出勤<input type="checkbox" name="data[16][2010-08-10]" value="1"></td>
<td>出勤<input type="checkbox" name="data[16][2010-08-11]" value="1"></td>
</tr>
<tr>
<td>29</td>
<td>テスト2<input type="hidden" name="name" value="テスト2"></td>
<td>出勤<input type="checkbox" name="data[29][2010-08-10]" value="1"></td>
<td>出勤<input type="checkbox" name="data[29][2010-08-11]" value="1"></td>
</tr>
<td><input type="submit" value="送信"></td>
</tr>
</tbody></table>
</form>
【内容確認画面】
<form method="POST" action="syuxtukin_fix.php">
<table>
<tbody><tr>
<td>ID</td>
<td>名前</td>
<td>2010-08-10</td>
<td>2010-08-11</td>
</tr>
<tr>
<td>【ポストされるID】</td>
<td>【ポストされる名前】</td>
<td>【ポストされるcheckboxの値】</td>
<td>【ポストされるcheckboxの値】</td>
</tr>
<tr>
<td align="center" colspan="2">
<input type="submit" value="登録">
</td>
</tr>
</tbody></table>
</form>
どうしたらPOSTが表示されるか分からないんです・・・

回答の条件
  • 1人3回まで
  • 13歳以上
  • 登録:2010/08/10 17:41:12
  • 終了:2010/08/11 11:33:42

ベストアンサー

id:windofjuly No.1

うぃんど回答回数2625ベストアンサー獲得回数11492010/08/10 18:12:31

ポイント95pt

前回質問( http://q.hatena.ne.jp/1281425126 )への回答用に途中まで作ってましたので1つで完結してます

動作を理解されましたら機能別にchkとfixに切り分けて使ってください

 

nameが同じだとデータを取れませんので下記のように勝手に変更しました

<td>テスト1<input type="hidden" name="name[16]" value="テスト1"></td>
<td>テスト2<input type="hidden" name="name[29]" value="テスト2"></td>

 

おまけで、日付の一覧を先頭で配列に格納することによって、日付変更が簡単にできるようにしてあります。例では2日分ですが1週間分でも1ヶ月分でも好きなだけ列挙してください

(連続する日付を楽して列挙する方法もありますが、それはまた別の話になりますので、ここでは割愛させていただきます)

 

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf8" />
    <title>test</title>
</head>
<body>
    <?php
        // 日付の一覧を準備する
        $dateArray = array( '2010-08-10', '2010-08-11' );
        // テーブルヘッダ
        echo '<table border="1"><thead><tr><th>ID</th><th>名前</th>';
        foreach( $dateArray as $d ) {
            echo '<th>' . $d . '</th>';
        }
        echo "</tr></thead>\n";
        // テーブルボディ
        echo "<tbody>";
        if ( isset( $_POST['data'] ) ) {
            foreach( $_POST['name'] as $k1 => $v1 ) {
                echo '<tr><td>' . $k1 . '</td><td>' . $v1 . '</td>';
                foreach( $dateArray as $d ) {
                    echo '<td>' . ( isset( $_POST['data'][$k1][$d] ) ? isset( $_POST['data'][$k1][$d] ) : '') . '</td>';
                }
                echo "</tr>\n";
            }
        }
        echo "</tbody>\n</table>\n";
    ?>
    <form action="<?= $_SERVER['SCRIPT_NAME'] ?>" method="POST">
        <table border="1">
            <tbody>
                <tr>
                    <td>ID</td>
                    <td>名前</td>
                    <td>2010-08-10</td>
                    <td>2010-08-11</td>
                </tr>
                <tr>
                    <td>16</td>
                    <td>テスト1<input type="hidden" name="name[16]" value="テスト1"></td>
                    <td>出勤<input type="checkbox" name="data[16][2010-08-10]" value="1"></td>
                    <td>出勤<input type="checkbox" name="data[16][2010-08-11]" value="1"></td>
                </tr>
                <tr>
                    <td>29</td>
                    <td>テスト2<input type="hidden" name="name[29]" value="テスト2"></td>
                    <td>出勤<input type="checkbox" name="data[29][2010-08-10]" value="1"></td>
                    <td>出勤<input type="checkbox" name="data[29][2010-08-11]" value="1"></td>
                </tr>
                    <td><input type="submit" value="送信"></td>
                </tr> 
            </tbody>
        </table>
    </form>
</body>
</html>
id:goodbabies

すばらしいです!おっしゃるとおり!こんなにすばらしいサンプルまで作っていただき、感謝です!完璧にできました!

私はforeachがどうも苦手で、直感的なfor文ばかりを使ってきたのですが、おかげさまでforeachのことも理解できてきました!本当にありがとうございます

2010/08/11 10:08:16

その他の回答(1件)

id:windofjuly No.1

うぃんど回答回数2625ベストアンサー獲得回数11492010/08/10 18:12:31ここでベストアンサー

ポイント95pt

前回質問( http://q.hatena.ne.jp/1281425126 )への回答用に途中まで作ってましたので1つで完結してます

動作を理解されましたら機能別にchkとfixに切り分けて使ってください

 

nameが同じだとデータを取れませんので下記のように勝手に変更しました

<td>テスト1<input type="hidden" name="name[16]" value="テスト1"></td>
<td>テスト2<input type="hidden" name="name[29]" value="テスト2"></td>

 

おまけで、日付の一覧を先頭で配列に格納することによって、日付変更が簡単にできるようにしてあります。例では2日分ですが1週間分でも1ヶ月分でも好きなだけ列挙してください

(連続する日付を楽して列挙する方法もありますが、それはまた別の話になりますので、ここでは割愛させていただきます)

 

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf8" />
    <title>test</title>
</head>
<body>
    <?php
        // 日付の一覧を準備する
        $dateArray = array( '2010-08-10', '2010-08-11' );
        // テーブルヘッダ
        echo '<table border="1"><thead><tr><th>ID</th><th>名前</th>';
        foreach( $dateArray as $d ) {
            echo '<th>' . $d . '</th>';
        }
        echo "</tr></thead>\n";
        // テーブルボディ
        echo "<tbody>";
        if ( isset( $_POST['data'] ) ) {
            foreach( $_POST['name'] as $k1 => $v1 ) {
                echo '<tr><td>' . $k1 . '</td><td>' . $v1 . '</td>';
                foreach( $dateArray as $d ) {
                    echo '<td>' . ( isset( $_POST['data'][$k1][$d] ) ? isset( $_POST['data'][$k1][$d] ) : '') . '</td>';
                }
                echo "</tr>\n";
            }
        }
        echo "</tbody>\n</table>\n";
    ?>
    <form action="<?= $_SERVER['SCRIPT_NAME'] ?>" method="POST">
        <table border="1">
            <tbody>
                <tr>
                    <td>ID</td>
                    <td>名前</td>
                    <td>2010-08-10</td>
                    <td>2010-08-11</td>
                </tr>
                <tr>
                    <td>16</td>
                    <td>テスト1<input type="hidden" name="name[16]" value="テスト1"></td>
                    <td>出勤<input type="checkbox" name="data[16][2010-08-10]" value="1"></td>
                    <td>出勤<input type="checkbox" name="data[16][2010-08-11]" value="1"></td>
                </tr>
                <tr>
                    <td>29</td>
                    <td>テスト2<input type="hidden" name="name[29]" value="テスト2"></td>
                    <td>出勤<input type="checkbox" name="data[29][2010-08-10]" value="1"></td>
                    <td>出勤<input type="checkbox" name="data[29][2010-08-11]" value="1"></td>
                </tr>
                    <td><input type="submit" value="送信"></td>
                </tr> 
            </tbody>
        </table>
    </form>
</body>
</html>
id:goodbabies

すばらしいです!おっしゃるとおり!こんなにすばらしいサンプルまで作っていただき、感謝です!完璧にできました!

私はforeachがどうも苦手で、直感的なfor文ばかりを使ってきたのですが、おかげさまでforeachのことも理解できてきました!本当にありがとうございます

2010/08/11 10:08:16
id:yamaneroom No.2

yamaneroom回答回数1040ベストアンサー獲得回数612010/08/10 19:16:54

ポイント5pt

$_POST['data']['29']['2010-08-10']

というような形式で取得できる。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません