0

私はPHPを使用しています。value次のように、属性に論理式を書き出すことは可能ですか。

<form action="...php">
<select name="formLocation" multiple>
    <option value="AL">Alabama</option>
    <option value="AK">Alaska</option>
    //Here I try to use logical expression. But it does not work:
    <option value="'DE' OR 'IL' OR 'IN'">myTerritory</option> 
</form>

そして、そのオプションの値が mySQL クエリに入ります。SELECT * FROM 'table1' WHERE 'states' LIKE '%states%'

例外として$query=SELECT * FROM 'table1' WHERE 'states' LIKE '%states%'指定するのではなく、独自の mySQL を作成したい。myTerritory

PS: 次を使用することもできました:SELECT * FROM 'table1' WHERE 'states' LIKE '%DE%' OR 'states' LIKE '%IL%' OR 'states' LIKE '%IN%' しかし、これはより複雑な検索のコードを複雑にしすぎます...

4

2 に答える 2

2

<select>複数の選択が許可されているため、データの配列を PHP に送信できるように名前を変更するだけです。

<!-- HTML -->
<select name="formLocation[]" multiple>

implode()その後、PHP およびIN()MySQL で 使用できます。入力をサンタイズしているか、パラメーター化されたクエリを使用していることを確認してください。ここには表示されません!

<?php
$states = implode(',', $_POST['formLocation']);
?>

// your query
SELECT * FROM 'table1' WHERE 'states' IN($states)
于 2013-05-11T02:19:03.717 に答える
2

モデルを少し再考する必要があるかもしれません。State と Territory の間には関係があるように思われるので、テーブルにそれを反映させたいと思うかもしれません。

おそらく、テーブルは次のようになります。

State:
+----------------------------+-------+
| abbreviation | territoryId | sales |
+----------------------------+-------+
|           AL |           1 |   300 |
|           AK |           2 |   350 |
|           DE |           3 |   250 |
|           IN |           3 |   100 |
|           IL |           3 |   200 |
+----------------------------+-------+

次に、フォームを次のように単純化できます。

<form action="...php">
<select name="formLocation" multiple>
    <option value="1">My Territory</option>
    <option value="2">Your Territory</option>
    <option value="3">Her Territory</option>
</form>

クエリは次のようになります。

SELECT SUM(sales) FROM State WHERE territoryId = 3;

これにより、MySQL をリレーショナル データベースとしてより有効に活用できます。もちろん、あなたのモデルにはさらに多くのことが行われているでしょうが、うまくいけばこれが始まりです。

于 2013-05-11T02:29:12.757 に答える