0

だから私はチェックボックスとしてオプションの衣料品のリストを持っています。以下の5つよりも多くの数があるかもしれません.

shoes, pants, skirt, socks, jacket //list of possible choices

選択した項目の jquery でカンマ区切りの配列が作成されます。以下が選択されたとしましょう。

shoes, socks, jacket //array posted as $_POST['clothes']

データベースでは、各顧客の衣服テーブルにこれらのオプションがあり、衣服アイテムの下に「はい」または「いいえ」があります。ただし、衣料品の名前は少し異なりますが、同じオプションにマップされます。

'clothes' table before insert
customer_id  dress_shoes  elegant_pants  long_skirt  ankle_socks  biker_jacket
     1            no            yes           no           no           no

$_POST['clothes'] を使用して、配列をループして、対応するフィールドを 'yes' に更新し、対応しないフィールドを db の 'no' に更新しようとしています。私はそれをするのに苦労しています。

'clothes' table after insert
customer_id  dress_shoes  elegant_pants  long_skirt  ankle_socks  biker_jacket
     1            yes            no           no          yes          yes

「はい」としてマークする項目を取得するために、array_intersect を実行しました。

$clothesArray = array("shoes", "socks", "jacket"); // Posted clothes
$clothesArrayAll = array("shoes", "pants", "skirt", "socks", "jacket"); // All clothes
$common = array_intersect($clothesArrayAll,$clothesArray);
print_r($common);
Array ( [0] => shoes [3] => socks [4] => jacket )

$clothesArrayAll を何らかの方法でループして、一般的な服に「はい」、配列内の他のすべての服に「いいえ」を与えようとしています。次に、最も効率的な方法で、対応する各フィールドを「はい」または「いいえ」に設定して、PDO を介して「服」テーブルを更新しようとしています。上記の一般的な服の配列を取得した後、どうすればよいかわかりません。

誰か助けてくれませんか?

ありがとうございました!

4

2 に答える 2

1

あなたは正しい軌道に乗っていると思います。フィールドのマッピングを含む配列を 1 つ追加するだけです。

$mappingArray = array('shoes' => 'dress_shoes', 'socks' => 'ankle_socks', ...);

$commonこの配列と前の配列を使用すると、フィールドの値に基づいて、それに応じて SQL をループして設定できます。$mappingArray

例で編集します(おそらく最も最適化されていません):

$finalArray = array();

foreach ($mappingArray as $key => $value) {
   $finalArray[$value] = in_array($key, $common) ? 'yes' : 'no';
}

$finalArraydb テーブルに一致する値ごとに yes/no ステートメントが表示されるようになりました。

PDO を含めるように編集します。実際には、上記のループを次のように更新します。

$finalArray = array();
$sql = "INSERT INTO cloths (" . implode(",", array_values($mappingArray)) . ") VALUES (:" . implode(",:", array_values($mappingArray)) . ")";;
foreach ($mappingArray as $key => $value) {
    $finalArray[":" . $value] = in_array($key, $common) ? 'yes' : 'no';
}

$q = $conn->prepare($sql);
$q->execute($finalArray);

これで大急ぎで行くので、そのようなもの...

于 2012-09-22T23:55:51.243 に答える
0

データベース名と一致するように HTML フィールド名を変更しないでください。

$cols='INSERT INTO clothes ';
$values=' VALUES ';

$join='(';
foreach ($_POST as $key=>$val) {
    $cols.=$join . $key;
    $values=$join . ':' . $key;
    $join=',';
}
$qry=$cols . ')' . $values . ')';
$stmt = $dbh->prepare($qry);
foreach ($_POST as $key=>$val) {
    $stmt->bindParam(':' . $key, $_POST[$key]);
}    

ただし、投稿された名前が有効な列名であることを確認することをお勧めします。次を使用してテーブルから列名と型を取得できます。

DESC clothes;
于 2012-09-22T23:03:53.033 に答える