我忙于复选框搜索并上传某些数据。我正在使用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;来解决我的问题似乎很容易。但是,查询结果现在在我的前端表中显示了显示数据的序列化数据。因此,现在唯一要做的就是取消序列化查询结果。
答案 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);