显示$ _post出错的结果,给出空

时间:2013-02-12 08:10:06

标签: php mysql

我获取此代码以获取类别名称并显示此类别中的项目:

<?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变量中的$cat类似show.php?cat=6

5 个答案:

答案 0 :(得分:1)

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

一般而言:

  • $ _ GET从查询字符串或您的网址中检索变量。
  • $ _ 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.

答案 1 :(得分: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的常量。数组的键总是字符串。希望有所帮助。

答案 2 :(得分:0)

这样做,

$cat = "";
if(isset($_GET['cat'])) {
    $cat=$_GET['cat'];
}

答案 3 :(得分:0)

  1. 您没有获得$ cat值,将其更改为$_GET;

  2. 要确保您的查询不会像以后那样破坏,广告'也会ids:

  3. SELECT
        *
    FROM
        products
        ,prod_cat
        ,categories
    WHERE
        categories.id=prod_cat.cat_id
        AND products.id=prod_cat.prod_id
        AND categories.id='$cat'

答案 4 :(得分:0)

show.php?cat=6
您网址中的

表示您使用的是GET变量。使用

$_GET['cat']

此外:

  1. 请做一些关于安全的事情。人们可以将他们想要的任何内容放入GET变量中,这样他们就可以将他们想要的内容添加到SQL中!这太糟糕了!
  2. 请阅读mysql*函数的PHP手册页上的通知:不推荐使用它们,不应使用它们。使用PDO或MySQLi