Ich habe eine Tabelle Benennung related_products,Unset spezifischer Wert in einem Array auf MySQL-Tabelle
Wo products_id
das Hauptprodukt ist.
und related_products_ids
bestehen aus Produkt-IDs bezogen auf das Hauptprodukt.
--------------------------------------------
| products_id | related_products_ids |
| -----------------------------------------
| 1 | 2,3 |
| -----------------------------------------
| 2 | 1,3 |
| -----------------------------------------
| 3 | 1,2 |
-------------------------------------------
I Kontrollkästchen haben,
<input value="1" type="checkbox" name="rp_product[]" id="in-category1"> Microsoft IntelliMouse Pro 1
<input value="2" type="checkbox" name="rp_product[]" id="in-category2"> Microsoft IntelliMouse Pro 2
<input value="3" type="checkbox" name="rp_product[]" id="in-category3"> Microsoft IntelliMouse Pro 3
Die Kontrollkästchen von PHP generiert werden,
<?php
echo '<div class="categorydiv"><div id="category-all" class="tabs-panel"><ul id="categorychecklist" class="list:category categorychecklist form-no-clear">';
$rp_sql = "select products_id, products_name from ".TABLE_PRODUCTS_DESCRIPTION." order by products_id";
$rp_1 = mysql_query($rp_sql);
while($rp_2 = mysql_fetch_array($rp_1)) {
echo "<li id=\"category-".$rp_2['products_id']."\" class=\"popular-category\"><label class=\"selectit\"><input value=\"".$rp_2['products_id']."\" type=\"checkbox\" name=\"rp_product[]\" id=\"in-category-1\"> ".$rp_2['products_name']."</label></li>";
}
mysql_free_result($rp_1);
echo '</ul></div></div>';
?>
Und ich diesen Code verwenden die überprüften Kontrollkästchen, um die related_products
Tabelle zu speichern,
for ($i=0; $i<count($_POST['rp_product']); $i++)
{
$check_val1 .= $_POST['rp_product'][$i] .","; //gather data
}
$check_val = trim($check_val1, ','); //clean last ,
unset($check_val1); //flush
$related_products = array('products_id' => (int)$products_id,
'related_products_ids' => $check_val);
$insert_rp_ids1 = explode(',', $check_val);
foreach($insert_rp_ids1 as $rp_ids)
{
$result_rp = mysql_query("SELECT related_products_ids, products_id FROM ".TABLE_RELATED_PRODUCTS." where products_id = '" . $rp_ids ."'");
if(mysql_num_rows($result_rp))
{
$related_products_value = mysql_fetch_assoc($result_rp);
$check_dup = explode(',', $related_products_value['related_products_ids']);
$rp_values = $related_products_value['related_products_ids'] . "," . $products_id;
$rps_each1 = array('related_products_ids' => $rp_values);
if(!in_array($products_id, $check_dup)) {
$wpdb->update(TABLE_RELATED_PRODUCTS, $rps_each1, array('products_id' => $rp_ids));
}
}
else
{
$rps_each2 = array('products_id' => $rp_ids, 'related_products_ids' => $products_id);
$wpdb->insert(TABLE_RELATED_PRODUCTS, $rps_each2);
}
}
Was ich will, ist zu unset
eine bestimmte ID unter related_products_ids
Spalte, wenn die Checkbox vorher abgewählt ausgewählt ist ..
Nehmen wir im die Post Bearbeitung wo die ID 2
ist und wo die related_products_ids
davon 1,3
.. Ich abgewählt das Kontrollkästchen, wo der Wert ist 3
(die auf der related_products_ids
ist) und nach dem Drücken der Schaltfläche Speichern wird der Wert 3
auf der related_products_ids
wird nicht festgelegt, so dass der aktuelle Wert jetzt 1
ist. Wie geht das? Ich kann nicht denken und eine Lösung dafür finden.
Bitte helfen.
Dies ist die Lösung, die ich derzeit kenne .. können Sie mir helfen, eine neue Lösung zu entwickeln, wenn möglich? Vielen Dank. – Ken
@Ken Ändern Sie Ihr Schema so, dass die 'related_product_ids'-Spalten nur einen Wert speichern (Sie sollten auch den Spaltennamen ändern), so dass jede Zeile eine Beziehung darstellt (z. B. 1-2, 1-3 usw.). Sie sollten überlegen, ob Sie 1-2 und 2-1 getrennt speichern müssen (dies hängt von Ihrer Domänenlogik ab). – liquorvicar