2015-10-27 18 views
0

我正在爲我的數據庫中的產品做一個簡單的分類管理,我很難得到一個好的算法來檢查屬於我的數據庫表中特定分類的項目的複選框。如何使用Ajax,PHP和JQuery檢查多個輸入複選框?

基本上我使用jQuery的Ajax調用下面的PHP文件:

<?php 
    include_once('config.php'); 
    $id = $_POST['fetchID']; 

    //Create PDO Object 
    $con = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD); 
    //Set Error Handling for PDO 
    $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    //Query 

    $sql = "SELECT prod_cat.cat_id FROM prod_cat LEFT JOIN products ON products.id = prod_cat.product_id LEFT JOIN category on category.cat_id = prod_cat.cat_id WHERE id = $id"; 
    //Prepare Statement 
    $stmt = $con->prepare($sql); 
    $stmt->execute(); 

    echo "<button id='backBtn-$id' class='backBtn'></button> 
    <!-- Left Column --> 
    <section class='adminLCol'> 
     <h4>Menu</h4>     
     <form class='updateProductCategory' id='updateProductCat-$id' method='post' action=''> 
      <input class='input_class_checkbox' type='checkbox' id='basicCollection_$id' name='cat[]' value='Basic Collection' checked>Basic Collection<br /> 
      <input class='input_class_checkbox' type='checkbox' id='teesAndTanks_$id' name='cat[]' value='Tees and Tanks' checked>Tees and Tanks<br /> 
      <input class='input_class_checkbox' type='checkbox' id='shirts_$id' name='cat[]' value='Shirts'>Shirts<br /> 
      <input class='input_class_checkbox' type='checkbox' id='topsAndBlouses_$id' name='cat[]' value='Tops and Blouses'>Tops and Blouses<br /> 
     </form> 
    </section> 

    <!-- Right Column --> 
    <div class='adminRCol'> 
     <section class='adminRContent'> 
      <h4>Visibility</h4>     
      <form> 
       <input class='radio_selection' type='radio' name='visibility' value='Enable' checked>Enable<br /> 
       <input class='radio_selection' type='radio' name='visibility' value='Disable'>Disable 
      </form> 
     </section> 
    </div>"; 
?> 

這是類別表的樣子:

+-------------+-------------------+ 
| cat_id | name    | 
+-------------+-------------------+ 
|   1 | Basic Collection | 
|   2 | Tees and Tanks | 
|   3 | Shirts   | 
|   4 | Tops and Blouses | 
+-------------+-------------------+ 

這是我的產品表看起來像:

+----+-----------------+------------------+ 
| id | name   | description  | 
+----+-----------------+------------------+ 
| 2 | Product One  | Made in Portugal | 
| 3 | Product Two  | Made in Brazil | 
+----+-----------------+------------------+ 

這就是我的prod_cat表的樣子:

+------------+-------------+ 
| prod_id | cat_id  | 
+------------+-------------+ 
|   2 |   1 | 
|   3 |   1 | 
|   2 |   2 | 
|   2 |   4 | 
+------------+-------------+ 

上面的PHP文件連接到我的數據庫並獲取產品所屬的類別。因此,這是$sql輸出如何看起來像products.id = 2

+-------------+ 
| cat_id | 
+-------------+ 
|   1 | 
|   2 | 
|   4 | 
+-------------+ 

現在,你可以看到這些都是應該在我的形式,它具有所有的複選框被選中的3個類別。這是我卡住的地方。考慮到只有這三個類別需要檢查,那麼檢查這些複選框會是一個好方法嗎?

如果您需要更多關於該問題的詳細信息,請點擊評論。

感謝

編輯: 我做對SELECT語句中的print_r爲$stmt->fetchAll()及以下是結果數組,我得到。我不知道該怎麼辦。我在這裏張貼,如果它可以是任何用途:

Array ([ 
    0] => Array ( 
      [cat_id] => 1 [0] => 1 
     ) 
    [1] => Array ( 
      [cat_id] => 2 [0] => 2 
     ) 
    [2] => Array ( 
      [cat_id] => 4 [0] => 4 
     ) 
) 
+0

你可以發表你的Ajax代碼?你得到JSON從Ajax請求的響應?還張貼在的console.log Ajax成功,而不是從PHP頁面的print_r。因爲這是你需要與 – guradio

+0

一起工作的事情,我可以看到你正在發送html響應。你可以在第一時間加載完整的表單,當選擇一個產品時,只獲取複選框列表來檢查結果ajax.It會減小響應的大小。 – Deshan

回答

0

如果我理解正確的問題,您使用外部連接不當。

我會用:

$sql = "SELECT name FROM category " 
. "JOIN prod_cat ON prod_cat.cat_id = category.cat_id " 
. "WHERE prod_cat.prod_id = ?"; 

得到的結果:

$stmt = $con->prepare($sql); 
$stmt->execute(array($id)); 
$result = $stmt->fetchAll(); 

打開二維數組轉換成一維數組:

$array = array_map('current', $result); 

然後每檢查複選框,如果產品屬於特定類別,例如:

if (in_array('Basic Collection', $array)) { 
    echo 'checked'; 
} 

不需要Ajax或jQuery。

順便說一句,當您要將用戶輸入放入查詢中時,使用預準備語句沒什麼意義。

0
$sql = "SELECT name FROM category " 
. "JOIN prod_cat ON prod_cat.cat_id = category.cat_id " 
. "WHERE prod_cat.prod_id = ?"; 
$condition=" WHERE "; 
foreach($ids as $id){ 
$condition.="prod_cat.prod_id =".$id['cat_id']." or "; 
} 
$condition= substr($condition, 0, -2); 

$sql.=$condition; 

,如果你想添加條件多類別使用循環,並創建一個動態查詢

相關問題