【问题标题】:PHP form sending multiple inputs as SQL queriesPHP 表单将多个输入作为 SQL 查询发送
【发布时间】:2014-12-08 06:19:54
【问题描述】:

我正在尝试创建一个 PHP 脚本,该脚本根据输入字段中填写的总数,使用这些字段作为 SQL 参数来创建 SQL 查询。但如果没有填写任何字段,则查询只会检索所有数据。

示例:如果输入了“名称”和“城市”字段,则查询必须在末尾连接“AND name = X_INPUT AND city = Y_INPUT”。

为了测试,我尝试实例化 $POST 变量,但没有返回任何内容。我什至不确定这是否是解决问题的最佳方法,但我们将不胜感激!

$_POST['name']="Linda";
$_POST['city']="";
$query = "select * from customers where gender = 'F'";

  if (empty($_POST)) {

     $query = "select * from customers where gender ='F'";
   }
  else{

     foreach($_POST as $key => $v) {
      if (!empty($_POST[$key])) {
          $cond = " and ".$key."='".$v."'";
          $query = $query.$cond;

【问题讨论】:

  • 您在第 3 行中对 $query 的引用不匹配。

标签: php mysql forms input


【解决方案1】:

代码:

$query = $query.$cond; 

every 将不必要的查询附加到 SQL。在一个数组中获取所有条件并将它们简单地连接为一个字符串。一切都应该这样工作。

$conditions = array();
foreach($POST as $key => $v) {
  if (!empty($_POST[$key])) {
    $conditions = " $key = '$v'";
  }
}
if (! empty($conditions)) {
    $sql .= implode(' AND ', $conditions);
}

【讨论】:

  • 一些要添加的语法内容是 $conditions[] = "$key = ...." 和 "$sql.= " AND ".implode..." 的括号,因为 implode 没有不要在开头添加“AND”。但完美运行!谢谢!
【解决方案2】:

你的 foreach 循环中有错字,使用这个

$_POST

而不是

$POST

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-16
    • 1970-01-01
    • 2013-03-08
    • 1970-01-01
    相关资源
    最近更新 更多