大家好我是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注入然后指导我。
答案 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
它应该有用。
另请注意,创建网址时,不应包含任何空格。