0

私はしばらくこの問題に悩まされており、助けを求めています。ありがとうございます。たくさんのラジオ ボタンがあるページ (guest/build.php) にフォームがあります。

<form action="../php/build.php" method="POST">
<table class="table">
    <caption>Your Computer Parts</caption>
    <tr><th>General Component</th><th>Specific Component</th><th>Cost</th></tr>
    <?php include('buildFunction.php');?>   
</table>
<input id="buyMe" type="submit" value="BUY ME NOW!!!"> 
</form>

これにより、ラジオ ボタンからフォーム ハンドラー (php/build.php) にデータが送信され、すべてが選択されていることが確認されます。

<?php
include('manageUser.php');
$mainCheck = isset($_POST["chasis"]) && isset($_POST["cpu"]) && isset($_POST["mobo"]) && isset($_POST["ram"]) && isset($_POST["gpu"]) && isset($_POST["psu"]) && isset($_POST["hdd"]) && isset($_POST["monitor"]) && isset($_POST["keyboard"]) && isset($_POST["mouse"]);
if(!$mainCheck){
    redirect("../guest/build.php","Please select 1 of each
    component");
} else {
    redirect("../user/purchase.php","Items Successfully Added");
}
?>

そして私のリダイレクト機能(php/manageUser.php):

function redirect($url, $message){
session_start();
$_SESSION["message"] = $message;
    //var_dump($_POST);
    //exit;
header("Location: $url");
die;

OK、そのコメント付きの var_dump の結果はまさに私が望むものです:

array(10) { ["chasis"]=> string(1) "3" ["cpu"]=> string(1) "9" ["mobo"]=> string(2) "13" ["ram"]=> string(2) "18" ["gpu"]=> string(2) "22" ["psu"]=> string(2) "27" ["hdd"]=> string(2) "31" ["monitor"]=> string(2) "38" ["keyboard"]=> string(2) "42" ["mouse"]=> string(2) "47" } 
 }

ただし、ヘッダー関数を呼び出すとすぐに、POST 配列のデータが失われます。私はそれをグローバル変数に保存しようとしましたが、常に NULL を登録し、とにかく適切ではありませんでした。

私の目標は、リダイレクト後に各アイテムの ID が POST 配列にとどまり、次のページ (user/purchase.php) の価格表に記入するために使用できるようにすることです。

私はこれについて間違った方法で進んでいますか?もしそうなら、適切な方法は何ですか?この段階では PHP に固執し、ここでは JavaScript を使用しないようにしています。

4

3 に答える 3

0

$ _SESSION変数を使用して、セッションが終了するまでデータを保持できます(クライアントがブラウザーを閉じたときに発生する可能性があります)。

データを永続的にしたい場合は、データベースを使用する必要があります。

もう1つのオプション、ローカルストレージ(約5 MBを保存できます)がありますが、これはHTML5標準であるため、古いブラウザーではサポートされません。このため、フォームを送信する必要はありませんが、ページ間を移動するにはjavascriptを使用する必要があります。

于 2012-12-04T18:45:27.830 に答える
0

関数から session_start() を取り出し、$_SESSION を使用している各ページの先頭に配置します。

于 2012-12-04T18:58:24.973 に答える
0

コードのフローを変更したくない場合は、次の 2 つの解決策を考え出すことができます。

  1. セッション内のすべての選択の値を保存します

  2. build.php?chasis=bla&cpu=blabla のように build.php を追加します。つまり、以前の選択内容を $_GET に保存します。URI が長くなりすぎた場合に備えて、どのようにするかを決めることができますが、アイデアは得られます。

于 2012-12-04T18:44:58.877 に答える