0

我得到了用于获取类别名称并显示此类别中的项目的代码:

<?php 
// This block grabs the whole list for viewing
$cat_list="";
$cat=$_POST['cat'];
$cat_sql="SELECT * FROM products,prod_cat,categories WHERE categories.id=prod_cat.cat_id AND products.id=prod_cat.prod_id AND categories.id=$cat";
$cat_query=mysql_query($cat_sql) or die(mysql_error());
$results=mysql_fetch_assoc($cat_query);
$cat_list= "$results[cat_name]";
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>show</title>

</head>
<?php echo $cat_list; ?>

</html>

它给了我这个错误:

注意:未定义的索引:第 12 行 show.php 中的 cat

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '' 附近使用正确的语法

我需要的只是显示变量cat_name中的类别,如.$catshow.php?cat=6

4

5 回答 5

1

$_GET并且$_POST不一样。在这种情况下,您正在尝试访问cat in show.php?cat=6,因此您应该使用$_GET['cat'].

一般来说:

  • $_GET 从查询字符串或您的 URL 中检索变量。
  • $_POST 从 POST 方法中检索变量,例如表单。

PHP.net 手册:
$_GET - http://php.net/manual/en/reserved.variables.get.php
An associative array of variables passed to the current script via the URL parameters.

$_POST - http://php.net/manual/en/reserved.variables.post.php
An associative array of variables passed to the current script via the HTTP POST method.

于 2013-02-12T08:14:41.790 回答
1

首先使用 $_GET 或 $_REQUST 而不是 $_POST。并确保您保护您的输入。试试这个功能:

function protect($string){
    $string = urldecode($string); // url decode to make things like %20 into whitespace
    $string = trim(strip_tags($string)); //remove whitespaces
    $string = preg_replace("/'/", "", $string); //remove single quotes
    return $string;
}

并像这样使用它

$cat = protect($_REQUEST['cat']);

最后,我认为这里有一个语法。这条线在这里

$cat_list= "$results[cat_name]";

应该

$cat_list= $results['cat_name'];

它正在寻找一个名为 cat_name 的常量。数组的键总是字符串。希望有帮助。

于 2013-02-12T08:19:01.897 回答
0

这样做,

$cat = "";
if(isset($_GET['cat'])) {
    $cat=$_GET['cat'];
}
于 2013-02-12T08:13:09.000 回答
0
  1. 您没有获得 $cat 值,请将其更改为$_GET;

  2. 为确保您的查询在未来不会像那样中断,'也向 ids 发送广告:

选择
    *
从
    产品
    ,prod_cat
    , 类别
在哪里
    categories.id=prod_cat.cat_id
    AND products.id=prod_cat.prod_id
    AND categories.id='$cat'
于 2013-02-12T08:13:50.347 回答
0
show.php?cat=6

在您的网址中表示您正在使用GET变量。利用

$_GET['cat']

此外:

  1. 请做一些关于安全的事情。人们可以将他们想要的任何东西放入该 GET 变量中,这样他们就可以将他们想要的东西添加到您的 SQL 中!!这是不好的!
  2. 请阅读mysql*函数的 PHP 手册页上的通知:它们已被弃用,不应使用。使用 PDO 或 MySQLi
于 2013-02-12T08:14:09.800 回答