1

重複の可能性:

ねえ、私はAPIをクエリし、いくつかの検索結果をフィルタリングするために使用されるフォームを構築しています。このデータはいずれもテキストファイルまたはデータベースに保存されていません。

当然、フォームの送信によってページが更新され、フォームの値は、HTMLの作成時に指定したネイティブの選択されたオプションにデフォルト設定されます。ユーザーが送信した値を保存し、ページが再読み込みされ、フィルタリングされた選択が読み込まれた後、それらをフォームで選択されたオプションにすることを検討しています。これを達成するための最良の解決策は何でしょうか?セッション、またはPOST配列のクエリ?

当然、私はいくつかのGoogle検索を実行しましたが、データベースまたはテキストファイルに関連するすべてのものは適用されませんでした。

私の現在のフォームコード:

<form method="post" action="">
  <label>Year</label>
  <select class="minYear" name="minimuimYearFilter">
    <?php 
    $vehicleYear = date("Y") + 1;
    for ($i = 1993; $i <= $vehicleYear; $i++) {
        echo "<option value=".$i.">".$i."</option>";
    }
    ?>
  </select>
  To:
  <select class="maxYear" name="maximumYearFilter">
    <?php 
    for ($i = 1993; $i <= $vehicleYear; $i++) {
      if ($i == $vehicleYear) {
        echo "<option value=".$i." selected>".$i."</option>"; 
      } else {
        echo "<option value=".$i.">".$i."</option>";
      }
    }
    ?>
  </select>
  <label for="priceFilter">Price</label>
  <select class="priceFilter" name="priceFilter">
    <?php 
    for ($i = 1000; $i <= 50000; $i=$i+1000) {
      if ($i == 50000) {
        echo "<option value=".$i.">$".$i."+</option>";
      } elseif ($i == 20000) {
        echo "<option value=".$i." selected>$".$i."</option>";
      } else {
        echo "<option value=".$i.">$".$i."</option>";
      }
    }
    ?>
  </select>
  <label for="mileageFilter">Mileage</label>
  <select class="mileageFilter" name="mileageFilter">
    <?php 
    for ($i = 5000; $i <= 100000; $i=$i+5000) {
      if ($i == 100000) {
        echo "<option value=".$i.">".$i."+</option>";
      } elseif ($i == 75000) {
        echo "<option value=".$i." selected>".$i."</option>";
      } else {
        echo "<option value=".$i.">".$i."</option>";
      }
    }
    ?>
  </select>
  <input type="submit" value="Submit">
</form>

みなさん、会議を開いてから、週末にWi-Fiを超えて町を出て、月曜日にできるだけ早く追いつくでしょう。これまでのすべての素晴らしい応答に感謝します!戻ってこれを試すのを待つことはできません。

4

5 に答える 5

2

ページ間でデータを渡すことを意味する場合は、この質問のベストアンサーを読む必要があります。

PHP変数を次のページに渡す

この後-PHPでのセッションについてもっと読む。セッションは、「アプリケーションの状態を記憶する」ための最良のメカニズムです。

于 2012-10-19T20:54:50.877 に答える
1

選択ボックスを使用しているという事実はこれを難しくしますが、一般的な考え方は、$_REQUEST配列内の各選択ボックスの値を使用して、選択された属性を取得するオプションを決定することです。

これらの線に沿った何か:

for ($i = 1993; $i <= $vehicleYear; $i++) {
    echo "<option value='".$i."'".(($_REQUEST['minimuimYearFilter']==$i)?"selected":"").">".$i."</option>";
}

以前に選択されたオプションが選択された属性を取得し、それをデフォルトの選択された値にするという考え方です。

これは箱から出してすぐに機能するはずです。少なくとも私の例では、値が選択されていない場合、どの属性も選択された属性を取得せず、一番上の属性がデフォルトであるためです。「初めて」選択したオプションも必要な場合は、$ _ REQUEST ['whatever']が何かを返したかどうかを検出し、そうでない場合は、選択したいオプションに値を設定します。

于 2012-10-19T20:55:25.443 に答える
1

トップページセットセッションの最初:

session_start();

たとえば、$ _ POSTがセッションで設定されたものよりも送信された場合:

if (isset($_POST['vehicle_selected']))
{
    $_SESSION['vehicle_selected'] = $_POST['vehicle_selected'];
}
else
{
    $_SESSION['vehicle_selected'] = ''; 
}

HTMLフォームで、次の値を追加します。

value="<?=$_SESSION['vehicle_selected']; ?>";

または完全な例:

<?php

session_start();

if (isset($_POST['vehicle_selected']))
{
    $_SESSION['vehicle_selected'] = $_POST['vehicle_selected'];
}
else
{
    $_SESSION['vehicle_selected'] = ''; 
}

?>

    <form method="post" action="">
      <label>Year</label>
      <select class="minYear" name="minimuimYearFilter">
        <?php 
        $vehicleYear = date("Y") + 1;
        for ($i = 1993; $i <= $vehicleYear; $i++) {
        echo "<option value=".$_SESSION['vehicle_selected'].">".$_SESSION['vehicle_selected']."</option>";
        }
        ?>
      </select>
    ....

別の言葉(答えではありませんが、セキュリティの目的で推奨されます):

REQUESTメソッドを使用すると、POSTよりも攻撃が簡単になる可能性があります。REQUEST($ _ GET、$ _ POST)の代わりに、$_GETのみを使用します。より安全なものが必要な場合は、StackoverflowでPHPのCSRF保護を調べてください。しかし、これはセキュリティのためだけです。

于 2012-10-19T21:01:43.440 に答える
0

クッキーを使用してください。のPHPのマニュアルページsetcookies()はかなり自明です:http://php.net/manual/en/function.setcookie.php

于 2012-10-19T20:53:24.127 に答える
0

POST配列を使用します。セッションは、複数のページにまたがる入力を使用しない場合に必要のないステップのみを追加します。

$value = (isset($_POST['some_option']) ? $_POST['some_option'] : "";
?>

<select selected="<?php echo $value; ?>">

また

<input value="<?php echo $value; ?>"/>
于 2012-10-19T20:56:36.870 に答える