Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 正在尝试将表单搜索转换为PDO查询_Php_Sql_Pdo - Fatal编程技术网

Php 正在尝试将表单搜索转换为PDO查询

Php 正在尝试将表单搜索转换为PDO查询,php,sql,pdo,Php,Sql,Pdo,这是我之前的代码,一位SO用户说它容易被注入,所以我决定尝试将其转换为与PDO一起使用 if(isset($_POST['q'])) { $q = $_POST['q']; $select = $db->query("SELECT * FROM customers WHERE name LIKE '%$q%' OR email LIKE '%$q%' ORDER BY ID DESC"); <form method="post"> <input type="text"

这是我之前的代码,一位SO用户说它容易被注入,所以我决定尝试将其转换为与PDO一起使用

if(isset($_POST['q'])) {

$q = $_POST['q'];

$select = $db->query("SELECT * FROM customers WHERE name LIKE '%$q%' OR email LIKE '%$q%' ORDER BY ID DESC");
<form method="post">
<input type="text" name="q" /> <input type="submit" name="search" />
</form>
if(isset($\u POST['q'])){
$q=$_POST['q'];
$select=$db->query(“从名称为“%$q%”或电子邮件为“%$q%”的客户处选择*,按ID描述订购”);
这是我试图插入的代码:

include 'database.php';
   $pdo = Database::connect();
   $q = $_POST['q'];
   $sql = 'SELECT * FROM customers WHERE name LIKE '%$q%' OR email LIKE '%$q%' ORDER BY ID DESC';
   if(isset($_POST['q'])) {

   foreach ($pdo->query($sql) as $row) {
            echo '<tr>';
            echo '<td>'. $row['name'] . '</td>';
            echo '<td>'. $row['email'] . '</td>';
            echo '<td>'. $row['mobile'] . '</td>';
            echo '<td width=250>';
            echo '<a class="btn" href="read.php?id='.$row['id'].'">Read</a>';
            echo '&nbsp;';
            echo '<a class="btn btn-success" href="update.php?id='.$row['id'].'">Update</a>';
            echo '&nbsp;';
            echo '<a class="btn btn-danger" href="delete.php?id='.$row['id'].'">Delete</a>';
            echo '</td>';
            echo '</tr>';
            }
   }
   Database::disconnect();
  ?>
包括“database.php”;
$pdo=数据库::连接();
$q=$_POST['q'];
$sql='SELECT*从名称为“%$q%”或电子邮件为“%$q%”的客户按ID描述订购;
如果(isset($_POST['q'])){
foreach($pdo->query($sql)作为$row){
回声';
回显'.$row['name'].';
回显“.$row['email']”;
回显'.$row['mobile'].';
回声';
回声';
回声';
回声';
回声';
回声';
回声';
回声';
}
}
数据库::断开连接();
?>
我得到的错误是: 注意:未定义索引:q 警告:被零除


关于为什么会发生这种情况,你有什么想法吗?

用这个替换你的查询

$sql = "SELECT * FROM customers WHERE name LIKE '%$q%' OR email LIKE '%$q%' ORDER BY ID DESC";
你可以通过改变你的条件来使用你的代码

if(isset($q)){
     // your code
}

将您的查询替换为以下内容:

$sql = "SELECT * FROM customers WHERE name LIKE '%$q%' OR email LIKE '%$q%' ORDER BY ID DESC";
你可以通过改变你的条件来使用你的代码

if(isset($q)){
     // your code
}

您收到错误是因为
q
不存在,您尚未将其发布到页面。您应该尝试以下操作:

$pdo = Database::connect();
$q = filter_input(INPUT_POST, 'q', FILTER_SANITIZE_STRING);
if ($q)
{
    $query = "SELECT * FROM customers WHERE name LIKE :q OR email LIKE :q ORDER BY ID DESC";
    $sth = $pdo->prepare($query);
    $sth->bindParam(':q', "%{$q}%", PDO::PARAM_STR);
    $sth->execute();
}

您收到错误是因为
q
不存在,您尚未将其发布到页面。您应该尝试以下操作:

$pdo = Database::connect();
$q = filter_input(INPUT_POST, 'q', FILTER_SANITIZE_STRING);
if ($q)
{
    $query = "SELECT * FROM customers WHERE name LIKE :q OR email LIKE :q ORDER BY ID DESC";
    $sth = $pdo->prepare($query);
    $sth->bindParam(':q', "%{$q}%", PDO::PARAM_STR);
    $sth->execute();
}
我得到的错误是:注意:未定义索引:q警告:被零除

这意味着$u POST['q']没有定义,您的代码应该是

               if(isset($_POST['q'])) {

                  $pdo = Database::connect();
                   $q = $_POST['q'];
                   $sql = 'SELECT * FROM customers WHERE name LIKE '%$q%' OR email LIKE '%$q%' ORDER BY ID DESC';

                   foreach ($pdo->query($sql) as $row) {
                            echo '<tr>';
                            echo '<td>'. $row['name'] . '</td>';
                            echo '<td>'. $row['email'] . '</td>';
                            echo '<td>'. $row['mobile'] . '</td>';
                            echo '<td width=250>';
                            echo '<a class="btn" href="read.php?id='.$row['id'].'">Read</a>';
                            echo '&nbsp;';
                            echo '<a class="btn btn-success" href="update.php?id='.$row['id'].'">Update</a>';
                            echo '&nbsp;';
                            echo '<a class="btn btn-danger" href="delete.php?id='.$row['id'].'">Delete</a>';
                            echo '</td>';
                            echo '</tr>';
                            }
                   }
                   Database::disconnect();
                 }
               ?>
if(isset($\u POST['q'])){
$pdo=数据库::连接();
$q=$_POST['q'];
$sql='SELECT*从名称为“%$q%”或电子邮件为“%$q%”的客户按ID描述订购;
foreach($pdo->query($sql)作为$row){
回声';
回显'.$row['name'].';
回显“.$row['email']”;
回显'.$row['mobile'].';
回声';
回声';
回声';
回声';
回声';
回声';
回声';
回声';
}
}
数据库::断开连接();
}
?>
不要忘记添加html表单

我得到的错误是:注意:未定义索引:q警告:被零除

这意味着$u POST['q']没有定义,您的代码应该是

               if(isset($_POST['q'])) {

                  $pdo = Database::connect();
                   $q = $_POST['q'];
                   $sql = 'SELECT * FROM customers WHERE name LIKE '%$q%' OR email LIKE '%$q%' ORDER BY ID DESC';

                   foreach ($pdo->query($sql) as $row) {
                            echo '<tr>';
                            echo '<td>'. $row['name'] . '</td>';
                            echo '<td>'. $row['email'] . '</td>';
                            echo '<td>'. $row['mobile'] . '</td>';
                            echo '<td width=250>';
                            echo '<a class="btn" href="read.php?id='.$row['id'].'">Read</a>';
                            echo '&nbsp;';
                            echo '<a class="btn btn-success" href="update.php?id='.$row['id'].'">Update</a>';
                            echo '&nbsp;';
                            echo '<a class="btn btn-danger" href="delete.php?id='.$row['id'].'">Delete</a>';
                            echo '</td>';
                            echo '</tr>';
                            }
                   }
                   Database::disconnect();
                 }
               ?>
if(isset($\u POST['q'])){
$pdo=数据库::连接();
$q=$_POST['q'];
$sql='SELECT*从名称为“%$q%”或电子邮件为“%$q%”的客户按ID描述订购;
foreach($pdo->query($sql)作为$row){
回声';
回显'.$row['name'].';
回显“.$row['email']”;
回显'.$row['mobile'].';
回声';
回声';
回声';
回声';
回声';
回声';
回声';
回声';
}
}
数据库::断开连接();
}
?>


不要忘记添加html表单,因为您的POST请求不包含
q
索引。那是因为你没有为你的形式定义动作。此外,我对您的
$sql
字符串转义有很大的怀疑。使用双引号而不是简单的引号来包装它。您仍然容易受到SQL注入的攻击,您需要使用。@Styphon谢谢,我将在阅读您的链接后尝试更改我的代码,因为您的POST请求不包含
q
索引。那是因为你没有为你的形式定义动作。此外,我对您的
$sql
字符串转义有很大的怀疑。使用双引号来包装它,而不是简单的引号。您仍然容易受到SQL注入的攻击,您需要使用。@Styphon谢谢,我将在阅读您的链接后尝试更改我的代码,该链接修复了被零除的错误,lol-但它仍然显示“未定义的索引:q”。为什么它会显示未定义的索引,而“q”明显指向表单提交的结果?因为您在
$\u POST['q']
中没有得到值,谢谢!我喜欢这个网站上有这么多乐于助人的人。欢迎光临。很高兴提供帮助。这修复了被零除的错误,lol-但它仍然显示“未定义的索引:q”。为什么它会显示未定义的索引,而“q”明显指向表单提交的结果?因为您在
$\u POST['q']
中没有得到值,谢谢!我喜欢这个网站上有这么多乐于助人的人。欢迎光临。很高兴提供帮助。不,您将收到相同的
除零
警告,因为查询中的引号没有转义,并且变量没有正确连接。双引号也可以解决这个问题,并且两者都与原始代码有相同的sql注入问题。不,您将得到相同的
除零
警告,因为查询中的引号没有转义,并且变量没有正确连接。双引号也可以解决这个问题,而且两者都有与原始代码相同的sql注入问题。谢谢,我不知道php中内置了一个函数来自动清理代码以防止注入,需要帮我找一本php手册吗