0

マスターをお願いします、私は次の入力を持っています:

<label >Please choose :</label>
<input type="checkbox" name="outil[]" value="TV" />
<input type="checkbox" name="outil[]" value="Lecteur CD" />

MyValuesそして、次のようなテーブル " " があります。

+----+-----------------------------------------------------------------------+
| id |                       value                                           |
+----+--------+------------------------------------------------------------- +
|  1 | a:3:{i:0;s:10:"Lecteur CD";i:1;s:16:"Console de salon";i:2;s:2:"TV";} |
+----+--------+--------------------------------------------------------------+

フィールドには、次の配列からシリアル化された文字列が含まれます。

array(3) {
  [0]=>
  string(10) "Lecteur CD"
  [1]=>
  string(16) "Console de salon"
  [2]=>
  string(2) "TV"
}

ユーザーが必要な入力をチェックすると、データがサーバー側に送信されますid。チェックされた入力がvalueフィールド内のどこに存在するかを選択する必要があります (これは、配列からのシリアル化された値です。関数 in_array)。

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

"SELECT id FROM MyValues WHERE value =  '".serialize($_POST['outil'])."' ";

しかし、これは機能せず、正常です。なぜなら、ユーザーは 1 つの入力しかチェックできず、データを見つけなければならないからです。

少なくとも送信されたデータがあるかどうかを確認できる場合は、mysqlで正規表現を使用することを考えていますが、知識は限られています。マスターしてください、この問題を解決するのを手伝ってくれませんか?

前もって感謝します。

4

2 に答える 2

0

フィールドを行として別のテーブルを作成し、シリアル化されたデータの代わりに最初のテーブルに接続します。このような:

CREATE TABLE `table1` (`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY);

CREATE TABLE IF NOT EXISTS `table2` (
    `table1_id` int(10) unsigned NOT NULL,
    `data` varchar(255) NOT NULL,
    UNIQUE KEY `x` (`table1_id`,`data`)
);

次に、次のようにデータを挿入できます。

INSERT INTO table1 VALUES(NULL); --This will get you the latest incremented ID

INSERT INTO table2 VALUES(1,'Lecteur CD'),(1,'Console de salon'),(1,'TV');

また、1 つのフィールドだけで ID を選択できるようになりました。

SELECT id FROM table2 WHERE data = 'Console de salon';

table1 はオプションですが、ID を増やすためにカウンターが必要な table2 を独自に記述するよりも、データベースの内部インクリメント システムを使用する方が簡単な場合がよくあります。

于 2013-01-26T13:08:15.193 に答える
0

これは役立つはずです

$var1 = !empty($_POST['outil'][1]) ? $_POST['outil'][1] : '';
$var2 = !empty($_POST['outil'][2]) ? $_POST['outil'][2] : '';

$sql = 'SELECT id FROM MyValues WHERE value REGEXP "' . $var1 . '" OR value REGEXP "' . $var2 . '" ';
于 2013-01-26T13:31:56.993 に答える