0

私は現在このフォームを持っています - そのスニペットは以下の通りです:

          <li>
            <label for="Catid">Pick a Category:</label>
            <select name="Catid">
              <?php
                  $Products = New Products();
                  $Products->form_Cat_Picker();
                ?>
            </select>
          </li>
          <li>
            <label for="Subcatid">Sub Category:</label>
            <select name="Subcatid">
              <?php
                  $Products = New Products();
                  $Products->form_Subcat_Picker();
                ?>
            </select>

わかりましたので、これはproductsクラスでこれを行うproducts.phpに送信されます。

function form_Cat_Picker() {
    $mysqli = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME);
    if (!$mysqli) {
        die('There was a problem connecting to the database.');
    }       
    $catPicker = "SELECT Catid, Catname
            FROM ProductCats
            ORDER BY Catid";
    if ($Result = $mysqli->query($catPicker)){
        if (!$Result) {
            echo 'Could not run query: ' . mysql_error();
            exit;
        }
        else {
            $Result = $mysqli->query($catPicker);
        }
        while ($row = $Result->fetch_assoc()) {
            echo '<option value="'.$row["Catid"].'">'.$row["Catname"]."</option>";
        }
    }
    $mysqli->close();
}
function form_Subcat_Picker() {
    $mysqli = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME);
    if (!$mysqli) {
        die('There was a problem connecting to the database.');
    }       
    $catPicker = "SELECT Subcatid, Subcatname, Parentid
            FROM ProductSubCats
            ORDER BY Subcatid";
    if ($Result = $mysqli->query($catPicker)){
        if (!$Result) {
            echo 'Could not run query: ' . mysql_error();
            exit;
        }
        else {
            $Result = $mysqli->query($catPicker);
        }
        while ($row = $Result->fetch_assoc()) {
            echo '<option value="'.$row["Subcatid"].'">'.$row["Subcatname"]."</option>";
        }
    }
    $mysqli->close();
}

これらはどちらも、基本的にデータベースからカテゴリとサブカテゴリのリストを返し、フォームのドロップダウン リストに入力します。

問題は、最初のドロップダウン ボックスで親が選択されていない限り、サブ カテゴリを表示したくないことです。どうすればこれを達成できますか?現在、テーブル ProductSubCats に Parentid である追加の列があり、ProductCats に Catid である列があり、それらは接続されています。

しかし、最初にオプション/値が選択されている変数を作成し、次に「この変数 $selected」と言う条件を設定するにはどうすればよいでしょうか。とにかく、私を混乱させるのはその点に達しています。ありがとうございました

編集 - 私のエラーは、ページの読み込み時にphpが1回実行されることを忘れているようです。したがって、すべてのデータを表示し、jquery を使用して選択されたデータのみを表示する必要があります。しかし、値 0 と空白のエントリも必要です。たとえば、値が 1 のカテゴリと 2 のサブカテゴリがあり、親 ID が 1 の場合、親 ID が 1 のサブカテゴリを jquery に表示させるにはどうすればよいでしょうか? ユーザー選択後?

4

2 に答える 2

1

あなたがしたいことは、デフォルトのオプションを作成し、その値を0に設定することです

<select name="main">
    <option value="0">Please Select an Option...</option>
    <option value="1">Option 1</option>
    <option value="2">Option 2</option>
</select>

次にphpで、ユーザーが何かを選択したかどうかを確認する必要があります

$selected = (int)$_POST["main"];
if(!empty($selected)){
    // They selected something other than 0
    // 0 is considered empty
}

もしそうなら、サブ結果カテゴリを取得します。

于 2012-12-27T16:39:15.193 に答える
1

これを処理する方法はいくつかありますが、そのほとんどはフロントエンドにあります。

PHP でこれを行いたい場合は、$_POST['Catid'] が設定されているかどうかを確認し、最初のカテゴリが変更時に自動送信されるようにします。この動作に関して、いくつかのコーディングを行う必要があります。

ただし、ページをロードせずにこれを実現したい場合は、AJAX を使用して 2 番目の選択を動的に入力するか、値を非表示/フィルター処理する必要があります。どちらの場合でも、おそらく jQuery を使用して、この方法で作業を大幅に簡素化する必要があります。

しかし、PHP がサーバー側の言語であることを忘れているようです。その結果、ユーザーが選択を行った後、PHP は 2 番目の選択ボックスに入力できません。Javascript はブラウザで実行するか、ページを更新/再送信して POST データを取得し、それを使用できますが、PHP はページが最初にヒットしたときに「一度だけ実行」され、その後すべての選択/データが生成されます。 .

更新:これを「手早く汚い」方法で行う場合は、各サブカテゴリの選択を入力し、それらをそれぞれ div 内に配置できます。次に、親カテゴリの ID を付与し、可視性を false に設定します。

        <div id='parentId1' style="display:none">
        <select name="Subcatid">
          <?php
              $Products = New Products();
              $Products->form_Subcat_Picker();
            ?>
        </select>
        </div>

親セレクターで、適切な他の値を表示/非表示にする onChange 関数を設定できるようになりました$("#parentId" + parentId).show()。これで多くのことを達成できますが、時間をかけて AJAX 呼び出しを行う方法を学ぶと、jQuery で行うのは非常に簡単で、おそらく探しているものを得ることができます。これを行う方法を示す良い SO の質問は次のとおりです。 jquery getJson populate Select Menu Question

于 2012-12-27T16:34:34.477 に答える