我正在尝试根据用户复选框获取mysql列。这意味着如果用户选择一个复选框(例如,值2),则仅从表中检索名为colum的value2。有没有办法在mysql select命令中显式指定检索所有用户检查的值(可能来自数组)。
<form action="yyy.php" method="post">
<input type="checkbox" name="check_list[]" value="value 1">
<input type="checkbox" name="check_list[]" value="value 2">
<input type="checkbox" name="check_list[]" value="value 3">
<input type="submit" />
</form>
我尝试在数组中接收到的值并使用如下,但它不起作用
<?php
if(!empty($data = $_POST['check_list']))
//cut some parts and simplified to focus on my problem
$sql = "SELECT $data FROM mydata WHERE id='$id'";
?>
在某些帖子中,我注意到使用数组作为$ id like here。其他方法可能是循环select语句,但我不确定。
我不是这个领域的专家,我想知道任何解决方案[更好]的解决方案。
答案 0 :(得分:0)
你可以试试这个。我以评论/* */
:
<?php
$check_list = $_POST["check_list"]; /* STORE THE SUBMITTED CHECK LIST DATA */
$counter = count($check_list); /* COUNT TOTAL ARRAY */
for($x=0; $x<=$counter; $x++){ /* START A LOOP BASED ON HOW MANY CHECKBOXES THERE IS */
if(!empty($check_list[$x])){ /* IF $check_list IS SELECTED */
$sql = "SELECT `".$data."` FROM mydata WHERE id='".$id."'"; /* YOUR QUERY. CHANGE THE NECESSARY VARIABLES AND DATA */
/* DON'T FORGET TO EXECUTE THE QUERY HERE */
} /* END OF IF */
} /* END OF FOR LOOP */
?>
答案 1 :(得分:0)
如果您的列名与您的复选框值相同,通常您会返回一个数组。
<input type="checkbox" name="check_list[]" value="col1" />Column 1 <br/>
<input type="checkbox" name="check_list[]" value="col2" />Column 2 <br/>
<input type="checkbox" name="check_list[]" value="col3" />Column 3 <br/>
在$_POST
:
Array
(
[0] => col1
[1] => col2
[2] => col3
)
一种方法是使用逗号implode/glue
来完成查询语句并获得明确选择的列名。
SELECT col1, col2, col3 FROM table_name
您还可以将白名单添加到混音中。这就是想法。
超级粗略的例子:
if(!empty($_POST['check_list'])) {
$check_list = $_POST['check_list'];
$predefined_columns = array('col1', 'col2', 'col3'); // for whitelisting
$filtered_columns = implode(', ', array_intersect($predefined_columns, $check_list));
$sql = "SELECT $filtered_columns FROM table_name WHERE id = :id";
$db = new PDO('mysql:host=localhost;dbname=database_name', 'username', 'password');
$select = $db->prepare($sql);
$select->bindParam(':id', $id);
$select->execute();
while($row = $select->fetch(PDO::FETCH_ASSOC)) {
print_r($row);
}
}