Php 访问$\u POST时出现未定义的索引错误
我一直试图解决这个问题,但它给了我同样的错误: 注意:未定义索引:第9行C:\xampp\htdocs\shop.php中的项 注意:第24行C:\xampp\htdocs\shop.php中的未定义索引:body 这是我的密码:Php 访问$\u POST时出现未定义的索引错误,php,html,forms,Php,Html,Forms,我一直试图解决这个问题,但它给了我同样的错误: 注意:未定义索引:第9行C:\xampp\htdocs\shop.php中的项 注意:第24行C:\xampp\htdocs\shop.php中的未定义索引:body 这是我的密码: <form action="" method="post"> <input type="radio" name="items" value="fed&q
<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>";
}
}
}
?>
联邦储备银行
正文
错误消息表示您正在访问不存在的数组项
但一般来说,您应该检查这些变量的存在性(即使您确定表单已发送):
请修复您的SQL注入安全漏洞强>
$body = mysql_real_escape_string( $_POST['body'] );
请考虑升级到<强> MySqLI<强>或<强> PDO < /强>!关于这些主题,有很多很好的参考资料。
未定义索引意味着您试图访问一个不存在的数组键。您的表单可能未按预期发布。一个简单的例子:
print_r($_POST);
将向您显示正在发布的内容 我无法理解你试图做什么的逻辑。你能再解释一下吗?如果
条件关闭不正确,也可以使用第一个。你的结构如下:
if(user submits) //true
{
if(){ do something}
else{ do something}
if(user submits) //true
{
//you call body variable, which is not defined the first time user submits the page, thus the error
}
}//original if ends
因此,请检查括号。您应该为每个表单创建一个隐藏的输入,而不是尝试侦听提交按钮。。
并非所有版本的php都将submit按钮注册为值。
您还编写了两次“if(isset($_POST['submit'])”),这将使php返回两条if语句true。。希望这对您有所帮助尝试将表单的回显代码更改为:-
echo "<Form action='' method='POST'>
<select name='body' id='body'>
<option value='head'>Head</option>
</select>
<input type='submit' id='submit' name='submit' value='submit' /><br />
</form>";
echo”
头
";
请注意,我已将id添加到表单元素中,最好对表单使用设置为相同值的id和名称属性。这些不是错误,它们是通知。但它们应该在生产环境中修复,因为这会提示您的代码在某些情况下可能无法正常工作
解决方案
根据您想要实现的具体目标,您可以使用以下代码:
$items = array_key_exists('items', $_POST) ? $_POST['items'] : '';
并且您确定$items
变量包含某些内容(至少是空字符串)。当然,根据您的代码体系结构,您可以将空字符串替换为false
或null
,但这取决于您自己
使用isset()或empty()的提示
不要使用它们来检查数组-use中是否存在特定元素。有什么区别
让我们假设$my_array
如下所示:
$my_array = array(
'a' => 'abc',
'b' => 0,
'c' => '',
'd' => null,
);
然后:
empty()
- 所有元素上的
isset()
都将返回true
,但$my_数组['d']
除外,因为isset()
将等于null的变量视为未设置isset($my_array['e'])
也将返回'false(因为未设置变量)
array\u key\u exists()
将为数组中实际存在的每个键返回true
,如果不存在则返回false
因此,如上所述,检查数组中是否定义了某些元素的更好选择是使用array\u key\u exists()
,因为它不会跳过“empty”或null
值
附录
有指向文档的链接:
- -确定是否设置了变量且该变量不是
NULL
- -确定变量是否为空(空字符串,
0
作为整数,0.0
作为浮点,'0'
-零作为字符串,null
,false
或空数组array()
)
- -实际检查数组中是否存在给定的键或索引
嘿,就用“POST”代替“POST”吧。希望它能像我一样解决你的问题
快乐编码欢迎使用堆栈溢出。您的问题实际上并不包含问题-因此很难回答(而且可能也会被关闭)。您到底想做什么,一个多步骤的表单?应该是print\r($\u POST)
谢谢,我都怪键盘!)@Tadeck我刚刚测试了这段代码:$arr=array('a'=>'');回声isset($arr['a'])
并返回true。我的PHP版本:5.4.12。还是我误解了你?你是对的,我犯了一个错误(我可能在想empty()。
$my_array = array(
'a' => 'abc',
'b' => 0,
'c' => '',
'd' => null,
);