在PHP中将url更改为不存在的url

时间:2017-05-04 19:29:17

标签: php mysqli

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>

1 个答案:

答案 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攻击。您应该使用带有绑定参数的mysqliPDO预处理语句,如post

中所述