gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 23:51:12 25 4
gpt4 key购买 nike

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

第一个数据列表(生活实验室的主题)是通过复选框值提交的数据(这是因为可以有多种选择)。第二个数据列表(生活实验室阶段)是通过单选按钮提交的数据(因此只有一个选项是可能的)。 radio 提交仅在数据库中创建一个普通字符串,例如:完成。然而问题是复选框提交在数据库中返回一个奇怪的字符串值,如下所示: 当我只提交预防: a:2:{i:0;s:0:"";i:1;s:10:"Prevention";} 和这个 当我同时提交预防和痴呆时: 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 变量将被提供给查询。
Tho,这个 foreach 似乎不适用于前面提到的数据库中的复选框值。当我回显 $criteria 变量(在复选框字段的搜索选择中)时,它会返回应有的值,例如预防和/或痴呆字符串,但这些正确的字符串当然不能在数据库中找到,因为数据库中的复选框值非常奇怪(就像我之前提到的)。所以,我认为正在发生的事情如下: 1. 选中并提交了一个复选框。 2. foreach 循环将 $criteria 变量设置为提交的复选框值(因此选择了预防,它返回字符串“预防”)。 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);

关于php - 如何通过查询从我的数据库中获取复选框插入的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25644721/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com