我有一个垂直菜单栏,其中有类别,这些类别下有产品。当我将鼠标悬停在类别上时看到的URL是..../index.php?catid=1
例如我有
category- SCHOOLS (catid=1)
products - NPS, DPS...
为了显示产品,我需要使用$_GET当我将鼠标悬停在产品上时从URL获取'catid'。
这是该部分的代码:
$fetchedcatid = $_GET['catid'];
$resultLIst = array();
$i = 0;
$sql="Select * from product_master where id = ".$fetchedcatid;
$query=mysql_query($sql) or die(mysql_error());
这给我一个MYSQL错误,因为catid没有存储在$fetchedcatid中。
请帮助。谢谢。
你需要在使用前先检查catid
是否设置好,使用单例也不是一个好选择
if(isset($_GET['catid'])){
// other stuff use $_GET['catid']
}
您也可以使用is_int
或ctype_digit
来确保id只有数字
你的代码容易受到sql注入,你需要逃避所有get
, post
和request
,更好的方法是使用准备好的语句
好读
- 如何防止SQL注入在PHP?
- PDO准备语句是否足以防止SQL注入?
注意
- 整个
ext/mysql
PHP扩展,它提供了所有以mysql_前缀命名的函数,在PHP v5.5.0中被正式弃用,并将在将来被删除。所以使用PDO
或MySQLi
好读
- mysql扩展名已弃用,将来会被删除:使用mysqli或PDO代替 MySQL开发者PDO教程
- Pdo初学者教程
我的理解是,你有$_GET变量的问题,而不是他们是否设置(虽然所有的好点,我不认为这是OP的主要问题)。
试题:
<?php
if(empty($_GET))
echo "_GET is empty";
else
print_r($_GET);
?>
如果你没有得到任何变量,那么有一个问题与您的配置设置,也许_GET被禁用或被重新分配给一些其他的框架变量?
GET、POST和REQUEST的PHP文档
启动对$_GET['catid']
变量的测试
$fetchedcatid = isset($_GET['catid']) ? $_GET['catid'] : FALSE;
if($fetchedcatid) {
// do stuff here
// you will want to sanitize this variable especially when using it in a mysql_query statement
//For Example:
$resultLIst = array();
$i = 0;
$sql = "Select * from product_master where id = ".mysql_real_escape_string($fetchedcatid);
$query = mysql_query($sql) or die(mysql_error());
}