1)我有网址http://localhost/Mayboo/az/product.php?id=1,当我将网址更改为 localhost / Mayboo / az / product.php?id = [我在这里写任何其他内容] 时,它会给出错误信息这:致命错误:在第12行的C:\ Users \ Javid \ Desktop \ maybo \ az \ product.php中的非对象上调用成员函数fetch_assoc()。如何防止此类错误,如果没有此类网址重定向到404页面?
2)另外一个问题:当我写 localhost / Mayboo / az / product.php?id = 1%27 时,它会出现此错误:您的SQL语法中有错误;检查与MySQL服务器版本对应的手册,以便在第144行“1”附近使用正确的语法。我怎么能防止这种情况呢?这是我的代码。先谢谢!
<?php include 'inc/header.php'; ?>
<?php
//create DB Object
$db = new Database();
?>
<?php
$id = $_GET['id'];
$query = "SELECT * FROM mallar WHERE id = '$id'";
$post = $db->select($query)->fetch_assoc();
?>
<div class="productcolumn col-md-8">
<?php if($id == $post['id']): ?>
<h1><?php echo $post['title_az']; ?></h1>
<div class="productinfo">
<img src="img/<?php echo $post['img']; ?>">
<p><?php echo $post['text_az']; ?></p>
</div>
<div class="pdf">
<?php if($post['pdf']): ?>
<img src="img/pdf.png">
<a href="doc/<?php echo $post['pdf']; ?>"><p><?php echo $post['pdf']; ?></p></a>
<?php endif; ?>
</div>
<?php else: ?>
<?php header("Location: 404.html"); ?>
<?php endif; ?>
</div>
答案 0 :(得分:0)
您可以在代码中添加以下检查:
ID
是否有integer
值ID
更改强>
$id = $_GET['id'];
$query = "SELECT * FROM mallar WHERE id = '$id'";
$post = $db->select($query)->fetch_assoc();
收件人:
$id = $_GET['id'];
$error = "";
// check if id id an integer
if(is_int($id)) {
$query = "SELECT * FROM mallar WHERE id = '$id'";
// check if there are no records for an invalid ID.
if($db->select($query)->num_rows()) {
$post = $db->select($query)->fetch_assoc();
}
else {
echo "No results found";
die();
}
else {
echo "Wrong user ID supplied";
die();
}
P.S:您的代码容易受到SQL injection攻击。您应该使用带有绑定参数的mysqli或PDO预处理语句,如post
中所述