質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

2410閲覧

phpで配列の最後の要素しか取れない。

tamachin

総合スコア2

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2021/10/04 02:53

編集2021/10/04 02:53

前提・実現したいこと

自動販売機システムのPOSTの配列の値を全て取得できるようにしたい。

発生している問題・エラーメッセージ

POSTで配列の値を取得したいが、最後の値しか取得できない。 (2枚目の画像から分かるように最後の配列の値しか取得できていない。)

![イメージ説明]
イメージ説明

該当のソースコード

PHP ソースコード functions.php <?php function names_sql($link) { $change_id = $_POST['drink_id']; $sql = 'SELECT drink_info_table.drink_id, drink_info_table.drink_name, drink_info_table.price, drink_info_table.stock, drink_info_table.status FROM drink_info_table WHERE status = 1 AND drink_id =' . $change_id; $data = []; if ($result = mysqli_query($link, $sql)) { while ($row = mysqli_fetch_array($result)) { $data[] = $row; } } else { $err_msg[] = 'データの抽出に失敗しました'; } foreach ($data as $info) { $drink_name = $info['drink_name']; } return $drink_name; } function prices_sql($link) { $change_id = $_POST['drink_id']; $sql = 'SELECT drink_info_table.drink_id, drink_info_table.drink_name, drink_info_table.price, drink_info_table.stock, drink_info_table.status FROM drink_info_table WHERE status = 1 AND drink_id =' . $change_id; $data = []; if ($result = mysqli_query($link, $sql)) { while ($row = mysqli_fetch_array($result)) { $data[] = $row; } } else { $err_msg[] = 'データの抽出に失敗しました'; } foreach ($data as $info) { $price = (int) $info['price']; $money = $_POST['money']; $return = $money - $price; } return $return; } function prices2_sql($link) { $err_msg = 'お金が足りません。'; return $err_msg; } function does_sql($link) { $sql = 'SELECT drink_info_table.drink_id, drink_info_table.drink_name, drink_info_table.price, drink_info_table.stock, drink_info_table.status FROM drink_info_table WHERE status = 1'; $data = []; if ($result = mysqli_query($link, $sql)) { while ($row = mysqli_fetch_array($result)) { $data[] = $row; } } else { $err_msg[] = 'データの抽出に失敗しました'; } return $data; } function stock_check($link) { $change_id = $_POST['drink_id']; $sql = 'SELECT drink_info_table.drink_id, drink_info_table.drink_name, drink_info_table.price, drink_info_table.stock, drink_info_table.status FROM drink_info_table WHERE status = 1 AND drink_id =' . $change_id; $data = []; if ($result = mysqli_query($link, $sql)) { while ($row = mysqli_fetch_array($result)) { $data[] = $row; } } else { $err_msg[] = 'データの抽出に失敗しました'; } foreach ($data as $info) { $stock = (int) $info['stock']; } if ($stock === 0) { $err_msg = []; $err_msg[] = '申し訳ございませんが、現在在庫切れです。'; return $err_msg; } } function complete_check_insert($link) { $complete_msg[] = '追加登録完了!'; return $complete_msg; } function complete_check_update($link) { $complete_msg[] = '在庫数更新完了!'; return $complete_msg; } function complete_check_change($link) { $complete_msg[] = 'ステータス変更完了!'; return $complete_msg; } function validation_check($link) { $err_msg = []; if (!isset($_POST['new_name']) || (isset($_POST['new_name']) && $_POST['new_name'] === "")) { $err_msg[] = '商品名を入力してください。'; } if (!isset($_POST['new_price']) || (isset($_POST['new_price']) && $_POST['new_price'] === "")) { $err_msg[] = '値段を入力してください'; } else if(preg_match('/^[0-9]+$/',($_POST['new_price'])) !== 1) { $err_msg[] = '値段は0以上の半角整数を入力してください'; } if (!isset($_POST['new_stock']) || (isset($_POST['new_stock']) && $_POST['new_stock'] === "")) { $err_msg[] = '在庫を入力してください'; } else if(preg_match('/^[0-9]+$/',($_POST['new_stock'])) !== 1) { $err_msg[] = '在庫は0以上の半角整数を入力してください'; } if (!empty($_POST["new_status"])) { if ((int) $_POST['new_status'] === 2) { $err_msg[] = 'ステータスは公開か非公開を選択してください'; } } return $err_msg; } function validation_check2($link) { if (!empty($_POST["update_stock"])) { if (preg_match('/^[0-9]+$/',($_POST['update_stock'])) !== 1){ $err_msg = []; $err_msg[] = '0以上の半角整数を入力してください'; return $err_msg; } } } index2.php <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>自動販売機</title> </head> <body> <h1>自動販売機</h1> <form class="form" method="post" action="result.php"> <div> 金額 <input type="text" name="money" /> <?php if (!empty($money)) { $money = (int) $_POST['money']; $money = prices_sql($link); return $money; } ?> </div> <div class="parent"> <?php if (!empty($data)) { foreach ((array)$data as $product) { ?> <? php print htmlspecialchars($product,ENT_QUOTES,'UTF-8'); ?> <div class="product"> <div class="product_name"> <p class="margin"> <input type="hidden" name="drink_name" value="<?= $product['drink_name'] ?>" /> <?php { print $product['drink_name']; } ?></p> </div> <div class="product_price"> <p class="margin"> <input type="hidden" name="price" value="<?= $product['price'] ?>" /> <?php { print $product['price']; } ?>円</p> </div> <div class="product_buy"> <input type="hidden" name="stock" value="<?= $product['stock'] ?>" /> <?php { print $product['stock']; } ?> <?php if ((int) $product['stock'] === 0) { ?> <div class="sold_out"><?php print '売り切れ'; ?></div> <?php } else { ?> <input type="radio" name="drink_id" value="<?php print $product['drink_id']; ?>" /> <?php } ?> <?php } ?> <?php } ?> </div> </div> </div> <div id="submit"> <input type="submit" value="■□■□購入■□■□" /> </div> </form> </body> </html> result.php <?php require_once('../../include/model/functions.php'); require_once('../../include/conf/const.php'); $link = get_db_connect(); $err_msg = []; if(preg_match('/^[0-9]+$/',($_POST['money'])) !== 1) { $err_msg[] = '投入金額は0以上の正の整数を入力してください'; } if (!isset($_POST['drink_id'])) { $err_msg[] = '購入するドリンクを選択してください。'; } var_dump($_POST['drink_name']); var_dump($_POST['price']); var_dump($_POST['stock']); var_dump($_POST['money']); if (!empty($_POST['price'])) { if ($_POST['price'] > $_POST['money'] ) { $err_msg[] = prices2_sql($link); } } if (count($err_msg) !== 0) { foreach ($err_msg as $err) { ?> <p><?php print $err; ?></p> <?php } } if (count($err_msg) == 0) { $drink_name = names_sql($link); $return = prices_sql($link); } require_once('../../include/view/result2.php'); close_db_connect($link);

試したこと

foreachの中に新しくformタグを入れたりしましたが、上手くいきませんでした。

補足情報(FW/ツールのバージョンなど)

Cloud9

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

name="drink_name[]"
のように配列形式にnameを指定してみてください。

そうでない場合はラジオボタンとほぼ同じ挙動になります。

投稿2021/10/04 03:37

m.ts10806

総合スコア80875

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

処理的にはこんな感じです

PHP

1<?PHP 2$a=filter_input(INPUT_POST,"a",FILTER_VALIDATE_REGEXP,["flags"=>FILTER_REQUIRE_ARRAY,"options"=>["regexp"=>"/./"]]); 3var_dump($a); 4?> 5<form method="post"> 6<input type="text" name="a[]"> 7<input type="text" name="a[]"> 8<input type="text" name="a[]"> 9<input type="submit" value="send"> 10</form>

投稿2021/10/04 04:14

yambejp

総合スコア116724

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問