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