2012-04-15 6 views
2

У меня есть таблица имен related_products,Удалить строку, когда флажок выбран ранее выключенной

Где products_id является основным продуктом.

и related_products_ids состоят из идентификаторов продуктов, относящихся к основному продукту.

-------------------------------------------- 
| products_id | related_products_ids | 
| ----------------------------------------- 
| 1   | 2     | 
| ----------------------------------------- 
| 1   | 4     | 
| ----------------------------------------- 
| 1   | 3     | 
------------------------------------------- 

меня флажки

<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 

Флажки генерируется PHP,

<?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>'; 
?> 

И я использую этот код, чтобы сохранить отмеченные флажки в related_products таблицы,

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); 
} 

Что я хочу, чтобы удалить конкретный идентификатор под related_products_ids колонком, когда флажок выбран ранее выключенный ..

Позволяет сказать им редактировать пост, где products_id является 1 и где related_products_ids этого является 2, 3 and 4 .. Я отменил выбор checkbox, где значение 3 (которое находится на related_products_ids), и после нажатия кнопки сохранения значение 3 на related_products_ids будет удалено, так что текущие строки теперь равны 2 and 4. Как это сделать? Я не могу думать и найти решение для этого.

Пожалуйста, помогите.

ответ

0

Логика здесь заключается в том, что при редактировании все связанные продукты заселяются в базу данных. Если они заселены, то проще всего их удалить раньше.

Чтобы достичь этого, отправьте его перед отправкой в ​​таблицу related_products, удалите все строки, где products_id равно $products_id. Сделайте это между двумя линиями в вашем коде:

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

и

foreach($insert_rp_ids1 as $id){ 

Кроме того, вы можете рассмотреть возможность использования сделки или, если он не поддерживается вашим столом, проверяя, если ВЕЬЕТЕ удалось.

+0

Я сделал это, но его тоже не работало .. – Ken

+0

@Ken Можете ли вы подтвердить, что в настоящее время ваш скрипт способен _add_ добавлять новые записи в таблицу 'related_products_ids'? Вы _only_ хотите отменить выбранные записи или отредактировать записи, которые хотите использовать _add и remove_? – bostaf

+0

Извините. я нашел проблему .. ее на моем sql delete заявление .. теперь он работает .. Спасибо. – 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 

Все переменные должны быть написаны на PHP, когда страница записывается, например:

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

страница PHP будет иметь что-то вроде этого, чтобы выполнить удаления:

$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

Это не то, что я хотел .. Я просто хочу удалить значение снятого флажка в таблице mysql. – Ken

+0

@ Ken, это было не так очевидно, потому что тогда все, что вам нужно в вашем вопросе, было кодом SQL, а не HTML-материал. Во всяком случае, я привел пример для вас. – Ozzy

+0

Спасибо за ваше предложение. Я ценю это. – Ken

Смежные вопросы