我有这个数据表从服务器获取数据。现在的问题是数据库包含的数据比我想象的要多一些。因此,为了防止浏览器加载所有条目,我创建了一个多选列表,我将仅用于提取基本信息。
然后将此列表中的输入与数据库中的内容进行匹配。然后将结果存储在$ results中,如下所示。
这里的问题是我不知道如何获取输入数据,特别是如果它有多种选择,进入最后一个mysql查询然后进入$ results。
稍后我使用$ results将数据推送到表中。虽然正如我所说,当我将所有数据加载到$ results中时,表格会有点拥挤。
其他所有内容都正常工作,我在我的多选列表中获取了scopeID。
那么,我如何让我选择的选项进入
<?php
$results = mysql_query("SELECT * FROM tableID LIKE (/*some cool way of putting the input here*/)";
?>
完成任务的代码:
///Connection parameters above///
$multiplechoice = mysql_query("SELECT scopeId FROM tableID");
$storeArray = array();
print"<select multiple name=\"scopeValues\" id=\"scopeIdchoice\">";
while ($rowchoice = mysql_fetch_array($multiplechoice, MYSQL_ASSOC)) {
$storeArray = $rowchoice['scopeId'];
print"<option id='".strtolower($storeArray)."'>";
print $storeArray;
print"</option>";
}
<?php
$results = mysql_query("SELECT * FROM tableID LIKE (/*some cool way of putting the input here*/)";
?>
答案 0 :(得分:0)
因为现在有一个以上与输入关联的值,您需要告诉服务器将所有值存储在数组中(注意括号):
name=\"scopeValues[]\"
然后你内爆数组并运行SQL。我假设您正在发布表单数据:
$scopeValues = implode(',', $_POST['scopeValues']);
// … remember to sanitize $scopeValues before the query
$results = mysql_query("SELECT * FROM tableID WHERE scopeId IN ($scopeValues) )";
确保在将$scopeValues
插入查询之前清除{{1}}中的所有值以防止SQL注入。更安全的方法是不使用ext / mysql(无论如何已弃用)并使用PDO或ext / mysqli并使用预准备语句。
(ID字符串是吗?)
答案 1 :(得分:0)
将选择的名称更改为scopeValues[]
。
从选择中,您将在$_POST
数组中获得一组值。您可以将其作为值列表传递给SQL查询,如下所示。您需要将xx_thefield_xx
用于正确的列名,当然需要对SQL注入进行检查,这些都是为了更好地阅读这些内容而缺失的。
<?php
$scopeVals = $_POST['scopeValues[]'];
// … remember to sanitize $scopeVals before the next step
$results = mysql_query("SELECT * FROM tableID where xx_thefield_xx in ('" .
implode("','", $scopeVals) . "');";
?>
答案 2 :(得分:0)
我不知道你是否知道这一点,但PHP是在服务器上执行的。请求您的页面如下:
这会产生一个问题:如果您更改了选择(在浏览器中发生),PHP就已经执行了。它不能神奇地改变发送到浏览器的输出。因此,要刷新结果,您应该创建一个表单并将输入POST到同一页面,这将检查是否已发布数据,如果有,则仅输出所选数据,如果没有,则显示所有内容。如果你想使它更复杂(但也更有用),你可以使用AJAX来检索选择查询的结果。
其他答案已经涵盖了表格,AJAX的方式是这样的:
<select>
更改时,都会在显示数据的页面上发出AJAX请求。 (也许这个答案对你来说完全没用,因为你已经知道PHP是服务器端的。)