2

我有一个包含类别的垂直菜单栏,这些类别下有产品。当我将鼠标悬停在类别上时看到的 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 中。

请帮忙。谢谢。

4

3 回答 3

2

你需要先检查一下catid在使用前设置的也使用单例也不是好的选择

if(isset($_GET['catid'])){
 // other stuff use $_GET['catid']

}

您也可以使用is_intorctype_digit确保 id 只有数字


警告

您的代码容易受到sql 注入的影响,您需要全部转义get,更好的方法是使用Prepared 语句postrequest

好读

  1. 如何防止 PHP 中的 SQL 注入?
  2. PDO 准备好的语句是否足以防止 SQL 注入?

笔记

  1. 整个ext/mysqlPHP 扩展提供了所有以 mysql_ 为前缀的函数,从 PHP v5.5.0 开始正式弃用,并将在未来删除。所以使用PDO或者MySQLi

好读

  1. 不推荐使用 mysql 扩展并将在将来删除:请改用 mysqli 或 PDO
  2. MySQL 开发人员的 PDO 教程
  3. Pdo 初学者教程
于 2013-03-17T05:21:44.347 回答
0

启动对$_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());
}
于 2013-03-17T05:22:41.507 回答
0

我的理解是您对 $_GET 变量有问题,而不是它们是否已设置(虽然所有优点,但我认为这不是 OP 的主要问题)。

尝试:

<?php 

if(empty($_GET)) 
echo "_GET is empty"; 
else 
print_r($_GET); 

?> 

如果您没有获得任何变量,那么您的配置设置有问题,也许 _GET 被禁用或被框架重新分配给其他变量?

GET、POST 和 REQUEST 的 PHP 文档

于 2013-03-17T05:33:18.363 回答