如何通过查询从我的数据库中获取复选框插入的数据

时间:2014-09-03 12:45:36

标签: php mysql checkbox filter

我忙于复选框搜索并上传某些数据。我正在使用wordpress和数据存储我正在使用一个简单的插件创建一个数据库,并可以在特定的表/列中插入数据。

我创建了一个自定义复选框搜索功能,允许用户使用复选框提交来获取数据。虽然该功能工作正常,但是使用复选框上传的数据存在问题(因此这不是使用复选框进行搜索而是上传)。问题是我的foreach($_POST['columns']函数获取了我用来查询的数据。但是,当使用复选框(因此可能有多个值)提交数据时,数据库中的字符串是一个非常奇怪的字符串,查询(WHERE)不理解,因此它不返回任何内容。

为了使其更清晰,请参阅以下代码: HTML:

<form method="post">    
    <div id="list3" class="dropdown-check-list">
        <span class="anchor">Select theme of Living Lab</span>
        <ul class="items">
              <li><input type="checkbox" name="columns[]" value="Independent_living" />Independent living</li>
              <li><input type="checkbox" name="columns[]" value="Chronic_heart_failure" />Chronic heart failure</li>
              <li><input type="checkbox" name="columns[]" value="Dementia" />Dementia</li>    
              <li><input type="checkbox" name="columns[]" value="Prevention" />Prevention</li>
              <li><input type="checkbox" name="columns[]" value="Other" />Other</li>
        </ul>
    </div>  

    <div id="list4" class="dropdown-check-list">
        <span class="anchor">Select stage of Living Lab</span>
        <ul class="items">
              <li><input type="checkbox" name="columns[]" value="Starting_phase" />Starting phase</li>
              <li><input type="checkbox" name="columns[]" value="Running_phase" />Running phase</li>
              <li><input type="checkbox" name="columns[]" value="Completed" />Completed</li>      
        </ul>
    </div>  

<input type="submit" name="go" value="Submit"/>
</form>

第一个数据列表(生活实验室的主题)是通过复选框值提交的数据(这是因为有多种选择可能)。第二个数据列表(生活实验室阶段)是通过单选按钮提交的数据(因此只能有1个选项)。无线电提交仅在数据库中创建一个普通字符串,例如:已完成。但是,复选框提交会在数据库中返回一个奇怪的字符串值,如下所示:当我只提交预防时: a:2:{i:0; s:0: &#34;&#34;;我:1; s:10:&#34;预防&#34 ;;} ,当我同时提交预防和痴呆时 < EM>一个:3:{I:0; S:0:&#34;&#34 ;; I:1; S:8:&#34;痴呆&#34 ;; I:2; S:10:& #34;预防&#34 ;;} 的。

用于生成查询将搜索的字段/过滤器的php代码如下:

if(!empty($_POST['columns'])) { // empty() checks if the value is set before checking if it's empty.

    foreach($_POST['columns'] as $key_post=>$value_post){ 
    // Runs mysql_real_escape_string() on every value encountered.
        $clean_criteria = array_map('mysql_real_escape_string', $_REQUEST['columns']);

        // Convert the array into a string.
        $criteria = implode("','",$clean_criteria);


    }

此代码适用于提交的单选按钮,例如已完成的字符串。选择条件后,$ criteria将被设置为字符串&#39;已完成&#39;并且$ criteria var被赋予查询 所以,这个foreach似乎不能与数据库中前面提到的复选框值一起使用。当我回显$ criteria变量时(在复选框字段的搜索选择上),它返回应该的值,例如预防和/或痴呆字符串,但是这些正确的字符串当然不能在数据库中找到,因为数据库中的复选框值非常奇怪(就像我之前提到的那样)。所以,我认为,正在发生的事情如下:1。选中并提交一个复选框。 2. foreach循环将$ criteria变量设置为提交的复选框值(因此,如果选择了预防,它将返回字符串&#39; prevent&#39;)。 3.查询搜索单词&#39; prevent&#39;在给定的数据库表和列中。 4.因为数据库中的值具有所有这些奇怪的标记( a:2:{i:0; s:0:&#34;&#34 ;; i:1; s:10:&#34 ;预防&#34;;} ),找不到字符串预防。

查询代码如下:

    $tmp = $wpdb->get_results("
        SELECT
            name_of_living_lab, location_of_living_lab, type_of_living_lab, theme_of_living_lab, stage_of_living_lab, living_lab_document           
        FROM           
            wp_participants_database            
        WHERE 
            theme_of_living_lab IN ('$criteria')    
        ORDER BY 
            name_of_living_lab ASC
    "); 

}
else {
//SOME ELSE ACTION - SHOW EVERYTHING
}

在查询示例中,我仅为测试目的添加了主题的where语句(痴呆症,预防等)。

我认为下一段代码并不是必需的,但下面的代码显示了查询数据:

echo "<table>
    <tr>";     
        echo "<th>Name of Living Lab</th>";
        echo "<th>Location of Living Lab</th>"; 
        echo "<th>Type of Living Lab</th>"; 
        echo "<th>Theme of Living Lab</th>";
        echo "<th>Stage of Living Lab</th>";    
        echo "<th>Living Lab document</th>";    
echo "</tr>";

if(count($tmp)>0){
    for($i=0;$i<count($tmp);$i++){
        echo "<tr>";  
            foreach($tmp[$i] as $key=>$value){
                echo "<td>" . $value . "</td>";                 
            }           
        echo "</tr>";
    }
}
echo '</table>';

所以回顾上面的内容:我如何将数据库复选框值传递给$ criteria变量,我可以使用它来查询特定数据。但是,$ criteria变量还需要能够查询正常的字符串数据(就像单选按钮提交的数据只有1个字符串)。

提前谢谢!

更新

经过一些研究后,通过使用LIKE%&#39; $ criteria%&#39;来解决我的问题似乎很容易。但是,查询结果现在在我的前端表中显示了显示数据的序列化数据。因此,现在唯一要做的就是取消序列化查询结果。

1 个答案:

答案 0 :(得分:0)

也许你正试图这样做:

        foreach($_POST['columns'] as $key_post=>$value_post){ 
            // Runs mysql_real_escape_string() on every value encountered.
            // $clean_criteria = array_map('mysql_real_escape_string', $_REQUEST['columns']);
               $clean_criteria[] = mysql_real_escape_string($value_post); // <---

            // Convert the array into a string.
            // $criteria = implode("','",$clean_criteria);
    }   

$criteria = implode("','",$clean_criteria);