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


How can i fetch checkbox inserted data from my database with a query

我正忙于复选框搜索和上传某些数据。我正在使用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>

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

用于生成查询将搜索的字段/筛选器的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时,$criteria将被设置为字符串"completed",并且$criteriavar将被提供给查询
Tho,这个foreach似乎不适用于数据库中前面提到的复选框值。当我回显$criteria变量(在复选框字段的搜索选择中)时,它会返回它应该返回的值,例如预防和/或痴呆字符串,但这些正确的字符串当然不能在数据库中找到,因为数据库中的复选框值太奇怪了(就像我之前提到的)。所以,我认为,正在发生的事情如下:1。选中并提交一个复选框。2.foreach循环将$criteria变量设置为提交的复选框值(因此,在选择了prevention的情况下,它返回字符串"prevention")。3.查询在给定的数据库表和列中搜索单词"prevention"。4.因为数据库中的值有所有这些奇怪的标记(a:2:{i:0;s:0:";i:1;s:10:"Prevention";}),所以找不到字符串预防。

查询代码如下:

    $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%"$criteria%"似乎很容易解决我的问题。不过,查询结果现在在显示数据的前端表中显示了一个序列化的数据。因此,现在唯一要做的就是对查询结果进行反序列化。

也许你正试图这样做:

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