gpt4 book ai didi

php - 查询数据库中具有多个值的 get-variable

转载 作者:行者123 更新时间:2023-11-29 12:28:03 26 4
gpt4 key购买 nike

我有代表产品状况的复选框。例如,当用户检查 Excellent 时,值 1 存储在 GET 变量中,如下所示:

...index.php?condition=1

现在,当用户选中多个框(这必须是可能的)时,它看起来像这样:

...index.php?condition=1,2,3

显然,我必须查询数据库才能显示与用户选择相对应的产品。

如果用户只选中一个框,则语句很简单:

if (!empty($_GET['condition'])){
$sql = $sql . " AND (Condition = '".$_GET['condition']."')";
}

但是如果用户选中多个框怎么办?该声明应该是什么样子? (这样可以解决吗?

谢谢!

这是创建地址的脚本:

<script>
$('#condition_select input:checkbox').change(function() {
var condition = $("#condition_select input:checkbox:checked").map(function() {
return this.value;
}).get().join(',');
$("#submit_checkboxes").find("a").attr('href', 'index.php?condition=' + condition);
}).change();
</script>

HTML:

 <div class="mutliselect" id="condition_select">
<form method="POST" action="">
<ul>
<li><input type="checkbox" id="d1" value="1"'; if(strpos($_GET['condition'],'1') !== false){ echo 'checked="checked"';} echo'/><label for="d1" class="checkbox_title">Neu</label></li>
<!-- and 6 more of these -->

有没有办法解决这个问题,而不必为每个复选框创建单独的 GET 变量?

最佳答案

更新(根据评论和问题更新再次更新):

问题已更新,因此我将更新我的答案。使用explode ( http://php.net/manual/en/function.explode.php ) 来获取所有值,并通过implode 来制定查询:

$values = explode(',', $_GET['condition']);
// VALIDATE each of values to match Your type.

if (!empty($values)) {

// $values = [1, 2, 3]
foreach ($values as $key => $value) {
$values[$key] = '(condition = \''.$value.'\')';
}
// $values = ['(condition = \'1\')', '(condition = \'2\')', '(condition = \'3\')']
$query = implode(' OR ', $values);
// $query = '(condition = \'1\') OR (condition = \'2\') OR (condition = \'3\')',
$sql = $sql . ' AND ( '.$query.' )';
}

我认为这是您的解决方案(MYSQL 倍数 AND: http://forums.mysql.com/read.php?10,250552 )。爆炸工作示例:

<小时/>
$string = '1,2,3,4,asd,fgh';
$array = explode(',', $string);
print_r($array[0]); // 1
print_r($array[3]); // 4
print_r($array[5]); // 'fgh'
<小时/>

这是编辑之前的答案片段,但我认为值得将其留在这里:

但是,里面有很多安全漏洞!!!

您必须验证用户数据。例如,如果有人传递地址:

index.php?condition=; SHOW TABLES FROM database;

它可能会显示一些数据。正如您所看到的,用户还可以使用删除语句转到地址,或插入用户...等。

因此,在这种情况下,您应该切换到 PDO(例如)http://php.net/manual/en/pdo.prepare.php ,并做出准备好的陈述。验证用户数据,以便如果您需要号码,他只能传递号码。

<小时/>

您还可以使用 isset:isset vs empty vs is_null 。这不是必须的,但有时很有用。对于每个表单,您还可以检查 isset ($_POST['submit']),因为许多机器人会发送垃圾邮件 POST 表单,有时只是忽略提交按钮。我认为这会减少请求量。

<小时/>

请记住,使用 POST 和 GET 表单始终允许用户发送自己的 POST/GET 请求。在这种情况下,服务器端验证是必须的。

<小时/>PS。抱歉,使用大写字母,它们只是为了使其变得非常强大。验证用户数据;)。

致以诚挚的问候。

关于php - 查询数据库中具有多个值的 get-variable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28010067/

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