【问题标题】:Mysql select array of columns based on idMysql根据id选择列数组
【发布时间】:2015-04-02 03:47:38
【问题描述】:

我正在尝试根据用户复选框获取 mysql 列。这意味着如果用户选择一个复选框(例如 value2),则仅从表中检索名为 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 使用数组。其他方法可能是循环选择语句,但我不确定。

我不是该领域的专家,我想知道任何解决方案[更好的]解决方案。

【问题讨论】:

  • check_list 是一个数组,所以implode 就像$data = implode(',',$_POST['check_list']) 一样,然后在查询中使用$data

标签: php html mysql forms


【解决方案1】:

如果您的列名与您的复选框值相同,通常会返回一个数组。

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

【讨论】:

  • implode 解决了我的问题@Ghost,Logan,Feroz。谢谢你的解释。
  • @Snijesh 当然,很高兴这有帮助
【解决方案2】:

你可以试试这个。我以 cmets /* */ 的形式包含了一些解释:

<?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 */

?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-09
    • 1970-01-01
    • 1970-01-01
    • 2016-10-03
    • 2017-06-04
    • 2018-09-24
    • 1970-01-01
    • 2016-02-21
    相关资源
    最近更新 更多