存在变量时的未定义索引

时间:2012-02-29 15:07:37

标签: php mysql

代码:

<?php 
if (isset($_REQUEST['g'])) {
    if ($_REQUEST['g'] == "Set") {
        $g = strtolower($_REQUEST['g'])."_title";
    }else{
        $g = strtolower($_REQUEST['g']);
    }
    $result1 = mysql_query("SELECT LEFT($g, 1) FROM cards GROUP BY $g ORDER BY $g ASC");
    while ($row = mysql_fetch_array($result1)) { 
?> 
<a href="./index.php?route=<?php echo $var[0]."/".$var[1]."&g=".$_REQUEST['g']; ?>&sort=<?php echo substr($row[$g], 0, 1); ?>"><?php echo substr($row[$g], 0, 1); ?></a>&nbsp;     
<?php 
    } 
}
?>

错误讯息:

Notice: Undefined index: set_title in E:\xampp\htdocs\zipdown\include\sort.php on line 11

我缺少什么?

4 个答案:

答案 0 :(得分:0)

如果不知道$g,请不要忘记转义Set的值。

$g = mysql_real_escape_string($g);

LEFT()创建的列别名为$g,并附在反引号中:

$result1 = mysql_query("SELECT LEFT(`$g`, 1) AS `$g` FROM cards GROUP BY `$g` ORDER BY `$g` ASC");
//----------------------------------------^^^^^^^

否则,mysql_fetch_array()电话返回的列名称如下:

$row['LEFT(set_title,1)']

安全注意事项:

鉴于您的数据库必须具有一组有限的列名,建议您使用白名单来检查$g的值:

// Assuming your columns are named title, author, etc...
if (in_array($g, array('title','author','set_title','publisher','whatever'))) {
   // do the rest of your work
}
else {
   // Invalid value to $_REQUEST['g']
}

答案 1 :(得分:0)

您应该为LEFT($g, 1)指定别名,如果LEFT(set_title, 1)$g,则结果中的键名称只是lkie set_title

答案 2 :(得分:0)

您的$g的值为set_title,而您的$row在该索引处没有元素。 为了更清楚,$row['set_title']不存在。

答案 3 :(得分:-1)

如果您要求$row['set_title']set_title中没有此类密钥$row,则PHP会发出通知,告知您无法找到任何内容。它将返回一个空值。

这是通知,而不是错误。一般来说,通知仅在PHP设置开发时出现;对于生产场所,通常会关闭通知。

如果您想沉默注意,请查看此处的文档: