Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何通过查询从数据库中提取复选框插入的数据_Php_Mysql_Checkbox_Filter - Fatal编程技术网

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

Php 如何通过查询从数据库中提取复选框插入的数据,php,mysql,checkbox,filter,Php,Mysql,Checkbox,Filter,我正在忙着复选框搜索和上传某些数据。我正在使用wordpress,为了存储数据,我使用了一个简单的插件,它创建了一个数据库,可以在特定的表/列中插入数据 我创建了一个自定义的复选框搜索功能,允许用户使用复选框提交来获取数据。虽然该函数工作正常,但通过使用复选框上载的数据存在问题(因此这不是使用复选框进行搜索,而是上载)。问题是,我的foreach($\u POST['columns']函数获取我用来查询的数据。不过,当使用复选框提交数据时(因此可能有多个值),它在数据库中的字符串非常奇怪,查询(

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

我创建了一个自定义的复选框搜索功能,允许用户使用复选框提交来获取数据。虽然该函数工作正常,但通过使用复选框上载的数据存在问题(因此这不是使用复选框进行搜索,而是上载)。问题是,我的
foreach($\u 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>
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);


    }
    $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
}
此代码适用于已提交单选按钮,例如字符串completed。选择criteria后,$criteria将设置为字符串“completed”,并且$criteria变量将被输入查询中。
但是,这个foreach似乎不适用于数据库中前面提到的复选框值它返回它应该返回的值,例如预防和/或痴呆字符串,但是这些正确的字符串当然不能在数据库中找到,因为数据库中的复选框值非常奇怪(如我前面提到的)因此,我认为发生了以下情况:1.选中并提交了一个复选框。2.foreach循环将$criteria变量设置为提交的复选框值(因此,选中预防后,它将返回字符串“预防”).3.查询在给定的数据库表和列中搜索单词“prevention”。4.由于数据库中的值具有所有这些奇怪的标记(a:2:{i:0;s:0:;i:1;s:10:“prevention”;}),因此找不到字符串prevention

查询代码如下:

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


    }
    $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>';
echo”
";     
呼应“活实验室名称”;
回声“活实验室的位置”;
呼应“活实验室类型”;
呼应“生活实验室主题”;
呼应“生活实验室阶段”;
呼应“活实验室文件”;
回声“;
如果(计数($tmp)>0){
对于($i=0;$i$value){
回显“$value.”;
}           
回声“;
}
}
回声';
因此,回顾一下上面的内容:我如何将数据库复选框值传递到$criteria变量中,我可以使用该变量查询特定数据。尽管如此,$criteria变量还需要能够查询普通字符串数据(如单选按钮submitted data,它只是一个字符串)

提前谢谢你

更新


经过进一步研究,似乎很容易通过使用类似%'$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);
foreach($\u POST['columns']作为$key\u POST=>$value\u POST){
//对遇到的每个值运行mysql\u real\u escape\u string()。
//$clean_criteria=array_map('mysql_real_escape_string',$_REQUEST['columns');

$clean_criteria[]=mysql_real_escape_string($value_post);/@bultforce返回以下错误:警告:数组映射()[function.array map]:参数#2应该是第167行/home/~~中的数组警告:内爆()[function.inclode]:在第169行的/home/deb11421/domains/marceldepender.nl/public_html/Recap/wp-content/themes/radiate/templates/pdb-search-new.php中传递的参数无效。值得注意的是,主要的一点是,上载复选框会在数据库中给出奇怪的值,$criteria被设置为checkbox.S的正常搜索字符串对不起,我没有太多注意。因为foreach循环而被弄糊涂了。像这样尝试$clean_criteria[]=mysql_real_escape_string($value_post);@bultforce现在错误消失了,尽管$criteria变量仍然是普通字符串,但数据库字符串是带有奇怪字符的字符串(因此它不起作用)现在我读了一些关于wordpress添加这些奇怪字符的文章,你可以通过取消序列化来解决这个问题($string='a:1:{i:0;a:2:{i:0;s:10:'02/17/2014;i:1;s:10:'Thom Stark;}}';$array=unserialize(trim($string));)虽然我认为这需要在上传代码中完成…或者也可以让函数工作,以便它选择数据库中的数据并取消序列化it@bultforce通过使用类似的%'$criteria%'似乎很容易解决我的问题所以现在唯一要做的就是取消查询结果的序列化。