我正在对我的数据库中的产品进行简单的类别管理,我很难获得一个好的算法来检查属于我的数据库表中特定类别的项目的复选框。
基本上我正在使用对以下PHP文件的JQuery Ajax调用:
<?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
的{{1}}输出的样子:
products.id = 2
现在,正如您所看到的那样,这三个类别应该在我的表单中检查,其中包含所有复选框。这是我被卡住的地方。鉴于只检查这3个类别,检查这些复选框的好方法是什么?
如果您需要有关该问题的更多详细信息,请发表评论。
由于
修改
我在+-------------+
| cat_id |
+-------------+
| 1 |
| 2 |
| 4 |
+-------------+
的select语句上做了一个print_r,以下是我得到的结果数组。我不知道该怎么做。我在这里发布,如果有任何用处:
$stmt->fetchAll()
答案 0 :(得分: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。
顺便说一句,当您要将用户输入放在查询中时,使用预准备语句几乎没有意义。
答案 1 :(得分: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;
如果要为多个类别使用循环添加条件并创建动态查询