2

related_productsという名前のテーブルがあります。

products_id主な製品はどこですか 。

related_products_ids主な製品に関連する製品IDで構成されます。

--------------------------------------------
|   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以前に選択したチェックボックスが選択解除されたときに、列の下の特定のIDを削除したいのです。

1products_idがあり、そのがどこにあるrelated_products_idsかを投稿を編集すると2, 3 and 4します。値が3(にあるrelated_products_ids)のチェックボックスの選択を解除し、保存ボタンを押した後、現在の行が削除されるように3の値が削除されます。related_products_ids今は2 and 4です。どうやってするか?私はこれに対する解決策を考えて見つけることができません。

助けてください。

4

2 に答える 2

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.";
}
于 2012-04-15T02:56:49.540 に答える
0

ここでのロジックは、編集アクションですべての関連製品がデータベースに再入力されるというものです。それらが再作成された場合、最も簡単なのは前にそれらを削除することです。

これを実現するには、送信時に、テーブルに何かを挿入する直前に、に等しいrelated_productsすべての行を削除します。コードの2行の間でこれを行います。products_id$products_id

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

foreach($insert_rp_ids1 as $id){

さらに、トランザクションの使用を検討するか、テーブルでサポートされていない場合は、deleteステートメントが成功したかどうかを確認することを検討してください。

于 2012-04-15T10:31:21.397 に答える