从数据库获取id的请求无效

时间:2017-07-19 18:41:01

标签: php mysqli xampp

大家好我是php的新手我刚开始学习它我正在使用xampp本地服务器创建一个简单的电子商务网站当我使用get方法检索行的特定id时,我正面临这个问题:

  if (isset($_GET['id'])) {
           $id = mysqli_real_escape_string($_GET['id']);
                $sql = "SELECT * FROM items WHERE id= '$id'" ;
                $run = mysqli_query($conn, $sql) or die ('error');
              while($row=mysqli_fetch_array($run, MYSQLI_ASSOC)){
                  $discounted_price = $row['item_price'] - $row['item_discount'];

                  echo "
                       <div class='col-md-6'>
                       <h3 class='pp-title'>$row[item_title]</h3>
                       <img src='$row[item_image]' class='img-responsive' >
                       <div class='bottom'>

                       <div class='pull-right cutted-price text-muted'><del>$ $row[item_price]</del></div>
                       <div class='clearfix'></div>
                       <div class='pull-right disscounted-price'>$$discounted_price</div>
                       </div>
                       <h4 class='pp-dsc-title'>Description</h4>
                       <div class='pp-dsc-detail'>$row[item_description]</div>
                       </div> 

               ";
              }
           }else {
                echo "The request is not working";
            } 

我尝试访问此网址的URL如下:

http://localhost/ec/items.php?item_title%20=%20Beautiful-brown-Watch&id%20=%201

如果我从上面删除if语句并只是在查询id ='1'或'2'中写入数据出现在网页上但是当我这样做时,我得到了else输出“请求不起作用”一个特定的id它不起作用我使用mysqli_real_escape_string来摆脱SQL注入,如果这不是正确的方法来摆脱SQL注入然后指导我。

2 个答案:

答案 0 :(得分:1)

您正在检查$_GET变量id,但您根据链接传递参数item_id

除此之外,您的查询字符串参数中还有额外的空格,这会导致您在网址中看到奇怪的%20,因此请将其删除。

要使其正常运行,您需要将网址更改为:

http://localhost/ec/items.php?item_title=Beautiful-brown-Watch&id=1 

或者将您的代码更新为:

if(isset($_GET['item_id'])) {
   $id = mysqli_real_escape_string($_GET['item_id']);

您还需要检查参数化查询,因为mysqli_real_escape_string()不是保证自己安全的方法。

关于此的精彩帖子可以在How can I prevent SQL injection in PHP?

找到

答案 1 :(得分:1)

您的代码需要一个名为id的参数,当您传递一个名为item_id的参数时,请将您的网址更改为

http://localhost/ec/items.php?item_title=Beautiful-brown-Watch&id=1

它应该有用。

另请注意,创建网址时,不应包含任何空格。