Php 正在尝试将表单搜索转换为PDO查询
这是我之前的代码,一位SO用户说它容易被注入,所以我决定尝试将其转换为与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"
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 ' ';
echo '<a class="btn btn-success" href="update.php?id='.$row['id'].'">Update</a>';
echo ' ';
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 ' ';
echo '<a class="btn btn-success" href="update.php?id='.$row['id'].'">Update</a>';
echo ' ';
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 ' ';
echo '<a class="btn btn-success" href="update.php?id='.$row['id'].'">Update</a>';
echo ' ';
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手册吗