前提・実現したいこと
formの複数の値を1つのボタンで全て送信、受け取りたい。
phpを勉強中の初心者です。
データベースから3つの列、id、day、countを一覧で表示。
countはフォームから編集可能で1〜5の整数が入力できる。
入力された数値がデータベースに更新される。という仕組みを作りたい。
送信先のページではcountが0ならば 「×」、それ以外は「○」を表示する。
https://teratail.com/questions/88605
おそらく近い内容だとは思うのですが、少し違うような気もしてさっぱりの状態です・・・。
発生している問題・エラーメッセージ
全部で56箇所あるが、最後の一件のみ送信される。 送信先のページで、データベースをupdate、その数値に応じて表記が変わるようにしてます。 例:左上のマス id=1 day=日 count=5とします。 countを「0」に書き換え、データベースを更新できれば次のページでは「×」が表示されます。 しかし、実際はその動作ができるのは一番最後 左下の id=56 day=土 count=5 の一件だけなので、 1〜56を書き換えて、全て送信、更新ができるようにしたい。
該当のソースコード
echo '<form action="reserv_2-output.php" id="form" method="post">'; echo '<div class="week-list">'; foreach ($pdo->query('select * from reserv_2') as $row) { echo '<div class="list-day">'; echo '<input type="hidden" name="id[]" value="', $row['id'], '">'; echo '<div class="td0">', $row['id'], '</div>'; echo '<input type="hidden" name="day[]" value="', $row['day'], '">'; echo '<div class="td0">', $row['day'], '</div>'; echo '</div>'; /* /list-day */ } echo '</div>'; echo '<div class="count-list">'; foreach ($pdo->query('select * from reserv_2') as $row) { echo '<div class="td1">'; echo '<input class="counter" type="text" name="count[]" value="', $row['count'], '">'; echo '</div>'; } echo '</div>';/* count-list */ echo '<div class="td2"><input type="submit" value="更新"></div>'; echo '</div>'; echo '</form>'; echo "\n";
送信の受取の記述
echo $_REQUEST['id'],$_REQUEST['day'], $_REQUEST['count']; /*確認用*/ $pdo=new PDO('mysql:host=localhost;dbname=sample;charset=utf8', 'root', 'root'); echo '<div class="update">'; $sql=$pdo->prepare('update reserv_2 set count=? where id=?'); if (!preg_match('/[0-5]+/', $_REQUEST['count'])) { echo '在庫を1〜5の整数で入力してください。'; } else if ($sql->execute( [htmlspecialchars($_REQUEST['count']), $_REQUEST['id']] )) { echo '更新に成功しました。'; } else { echo '更新に失敗しました。'; }
試したこと
phpのフォームの一括送信やデータベースのレコードの一括更新について調べたり、自分と似通った質問をされている方の投稿を見に行ったりなどしましたが、めぼしい解決策が見つからず
補足情報(FW/ツールのバージョンなど)
受け取る側のコードがいる場合などは申し付けください。
回答1件
あなたの回答
tips
プレビュー