2012-04-15 7 views
2

Ich habe eine Tabelle related_products BenennungZeile löschen, wenn Checkbox zuvor ausgewählten abgewählt

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     | 
| ----------------------------------------- 
| 1   | 4     | 
| ----------------------------------------- 
| 1   | 3     | 
------------------------------------------- 

I Kontrollkästchen haben,

<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 
<input value="4" type="checkbox" name="rp_product[]" id="in-category3"> Microsoft IntelliMouse Pro 4 

Die Kontrollkästchen von PHP generiert werden,

<?php 
echo '<ul id="categorychecklist" class="list:category categorychecklist form-no-clear">'; 
    global $wpdb; 
    $sql = "SELECT related_products_ids FROM ".TABLE_RELATED_PRODUCTS." where products_id = '" . (int)$HTTP_GET_VARS['pID']."'"; 
    $result = mysql_query($sql); 
    $rps = array(); 
    while($row = mysql_fetch_assoc($result)) { 
    $rps[]=$row["related_products_ids"];  
    } 
$rp_sql = "select products_id, products_name from ".TABLE_PRODUCTS_DESCRIPTION." where products_id !='" . (int)$HTTP_GET_VARS['pID']."' order by products_name"; 
    $rp_1 = mysql_query($rp_sql); 
    while($rp_2 = mysql_fetch_array($rp_1)) { 
    $checked = ''; 
    if (in_array($rp_2['products_id'], $rps)) $checked = " checked"; 
    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[]\" class=\"rp_item\"" . $checked . "> <span>".$rp_2['products_name']."</span></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 

$insert_rp_ids1 = explode(',', $check_val); 

foreach($insert_rp_ids1 as $id){ 
    $rps_each2 = array('products_id' => $products_id, 'related_products_ids' => $id); 
    $wpdb->insert(TABLE_RELATED_PRODUCTS, $rps_each2); 
} 

Was ich will, ist eine bestimmte ID unter related_products_ids Spalte zu löschen, wenn die Checkbox vorher abgewählt ausgewählt ist ..

Nehmen wir im die Post Bearbeitung wo die products_id 1 ist und wo die related_products_ids davon 2, 3 and 4 .. Ich abgewählt das Kontrollkästchen, wo der Wert ist 3 (die auf der related_products_ids ist) und nach dem Drücken der Speichern-Taste wird der Wert 3 auf der related_products_ids gelöscht werden, so dass aktuelle Zeilen jetzt 2 and 4 ist. Wie geht das? Ich kann nicht denken und eine Lösung dafür finden.

Bitte helfen.

Antwort

0

:

for ($i=0; $i<sizeof($some_array); $i++) { 
    $input = "<input type=\"checkbox\"" 
      . "onClick=\"javascript:performAction('index.php?check=".($i+1)."&action=del');\" />"; 
    echo $input; 
} 

Die PHP-Seite wird so etwas wie diese haben die Lösch auszuführen Die Logik hier ist, dass bei der Editieraktion alle verwandten Produkte in der Datenbank neu gefüllt werden. Wenn sie neu bevölkert sind, ist es am einfachsten, sie vorher zu entfernen.

Um dies zu erreichen, löschen Sie bei submit, kurz bevor Sie etwas in die Tabelle related_products einfügen, alle Zeilen, in denen products_id gleich $products_id ist. Tun Sie dies zwischen den beiden Linien in Ihrem Code:

$insert_rp_ids1 = explode(',', $check_val); 

und

foreach($insert_rp_ids1 as $id){ 

Darüber hinaus können Sie prüfen, mit der Transaktion oder, wenn sie nicht von Ihrem Tisch unterstützen, zu überprüfen, ob die Lösch Anweisung erfolgreich war.

+0

Ich habe es gemacht, aber es funktioniert auch nicht .. – Ken

+0

10 @Ken Können Sie bestätigen, dass Ihr Skript derzeit in der Lage ist, neue Einträge in die Tabelle "related_products_ids" _add_ hinzuzufügen? Möchten Sie nur ausgewählte Einträge entfernen oder Posts bearbeiten, die Sie _add and remove_ hinzufügen möchten? – bostaf

+0

Entschuldigung. Ich habe das Problem gefunden .. es ist auf meinem SQL löschen Anweisung .. jetzt funktioniert es .. Danke. – Ken

1
<script type="text/javascript"> 
var home = "http://www.mysite.com/"; 
function performAction(url) { 
    document.getElementById("actionFrame").src = (home+url) 
} 
</script> 

<iframe id="actionFrame" width=1 height=1 frameborder=0> </iframe> 

<input type="checkbox" onClick="javascript:performAction('index.php?check=1&action=del');" /> Delete row 
<input type="checkbox" onClick="javascript:performAction('index.php?check=2&action=del');" /> Delete row 

Alle Variablen sollten in PHP geschrieben werden, wenn die Seite zum Beispiel geschrieben:

$action = $_GET["action"]; 
$check = $_GET["check"]; 

switch ($action) { 
    case "del": 
     delRow($check); 
     break; 
} 

require_once("database.php"); #file which creates the PDO object $db 

function delRow($check) { 
    global $db; //because $db is out of scope until we do this 
    $sql = "DELETE FROM tbl_name WHERE col_id='?';"; 
    $query = $db->prepare($sql); 
    $query->bindParam((int)$check); 
    $query->execute(); 
    $rows = $query->rowCount(); 
    echo "$rows were deleted."; 
} 
+0

Das ist nicht was ich wollte .. ich möchte einfach den Wert des deaktivierten Kontrollkästchens auf der MySQL-Tabelle löschen .. – Ken

+0

@Ken das war nicht so offensichtlich, weil dann alles, was Sie in Ihrer Frage benötigt wurde der SQL-Code und nicht das HTML-Zeug. Wie auch immer, ich habe ein Beispiel für dich eingefügt. – Ozzy

+0

Vielen Dank für Ihren Vorschlag .. Ich schätze es. – Ken

Verwandte Themen