首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问$_POST的未定义索引错误

访问$_POST的未定义索引错误
EN

Stack Overflow用户
提问于 2011-11-28 17:49:43
回答 7查看 8.5K关注 0票数 2

我一直在努力修复这个问题,但这也给我带来了同样的错误:

注意:未定义索引:第9行C:\xampp\htdocs\shop.php中的项

注意:未定义的索引:第24行C:\xampp\htdocs\shop.php中的主体

这是我的代码:

代码语言:javascript
复制
<form action="" method="post">
    <input type="radio" name="items" value="fed" /> Fed<br />
    <input type="radio" name="items" value="body" /> Body<Br>
    <input type="submit" name="submit"><br>
</form> 

<?php
if(isset($_POST['submit'])) {
     $items = $_POST['items'];
     if($items=="fed") {
         echo "You choose feds";    
         die();
     }
     else
         echo "<Form action='' method='POST'>
         <select name='body'>
         <option value='head'>Head</option>
         </select>
         <input type='submit' name='submit' value='submit' /><br />
         </form>";

 if(isset($_POST['submit'])) {
    $body = $_POST['body'];
    $connect = mysql_connect("localhost","root","")or die(mysql_error());
    mysql_select_db("feds",$connect)or die(mysql_error());
    
    $merchandise = mysql_query("SELECT * FROM merchandise WHERE body_part='$body' ")or     die(mysql_error());

    while($row = mysql_fetch_array($merchandise)) {
        echo $row['item'];  
        echo "<bR>";
    }
}


} 
?>
EN

回答 7

Stack Overflow用户

发布于 2011-11-28 17:57:27

错误消息表明,您正在访问数组中不存在的项!

但是,通常您应该检查这些变量的存在(即使您确信表单已经发送):

代码语言:javascript
复制
$items = isset($_POST['items']) ? $_POST['items'] : outputError('...');

,请修复您的SQL注入安全漏洞!!

代码语言:javascript
复制
$body = mysql_real_escape_string( $_POST['body'] );

请考虑升级到MySQLiPDO!关于这些主题,有许多很好的资源。

票数 3
EN

Stack Overflow用户

发布于 2011-11-28 22:34:03

--这些不是错误,它们是Notes。但是它们应该在生产环境中被修复,因为这给了您一个提示,在某些情况下,您的代码可能无法正常工作。

解决方案

根据您想要实现的具体目标,可以使用以下代码:

代码语言:javascript
复制
$items = array_key_exists('items', $_POST) ? $_POST['items'] : '';

并且您可以确定您的$items变量包含一些内容(至少是空字符串)。当然,根据您的代码体系结构,您可以用falsenull替换空字符串,但这取决于您。

关于使用isset()empty()的技巧

不要使用它们来检查数组中是否存在特定的元素--使用array_key_exists()。有什么关系?

假设$my_array看起来是这样的:

代码语言:javascript
复制
$my_array = array(
    'a' => 'abc',
    'b' => 0,
    'c' => '',
    'd' => null,
);

然后:

  • empty() on $my_array['b']$my_array['c']$my_array['d']将返回true,因为所有这些值都被认为是空的,而$my_array['e']上也将返回true,因为不存在的值/变量也被认为是空的,对于所有元素的
  • isset()将返回true ( $my_array['d']除外),因为isset()将等于null的变量视为not。
  • array_key_exists()还将返回` `false (因为变量未设置),isset($my_array['e'])将返回数组中实际上存在的每个键的true,如果没有返回false,则返回

因此,如上所述,检查某个元素是否在数组中定义的更好的选项是使用array_key_exists(),因为它不会跳过“空”或null值。

附录

有指向下列文件的链接:

  • isset() -确定变量是否为空(空字符串,0作为整数,0.0作为浮点数,'0' -零作为字符串,nullfalse或空数组array()),
  • array_key_exists()实际上检查给定的键或索引是否存在于数组

中。

票数 2
EN

Stack Overflow用户

发布于 2011-11-28 18:01:49

未定义索引意味着您正在尝试访问不存在的数组键。您的表单可能并不像您所期望的那样发布。一个简单的:

代码语言:javascript
复制
print_r($_POST);

会向你展示什么是发帖。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8300068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档