我一直试图解决这个问题,但它给了我同样的错误:
注意:未定义的索引:第9行的C:\ xampp \ htdocs \ shop.php中的项目
注意:未定义的索引:第24行的C:\ xampp \ htdocs \ shop.php中的正文
这是我的代码:
<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>";
}
}
}
?>
答案 0 :(得分:3)
错误消息表明您正在访问不存在的数组项目!
但一般来说,你应该检查这些变量是否存在(即使你确定表格已经发送):
$items = isset($_POST['items']) ? $_POST['items'] : outputError('...');
请修复您的SQL注入安全漏洞!!
$body = mysql_real_escape_string( $_POST['body'] );
请考虑升级到 MySQLi 或 PDO !这些主题有很多很好的资源。
答案 1 :(得分:2)
这些不是错误,它们是通知。但是它们应该在生产环境中修复,因为这会提示您在某些情况下代码可能无法正常工作。
根据您想要实现的目标,您可以使用以下代码:
$items = array_key_exists('items', $_POST) ? $_POST['items'] : '';
并且您确定您的$items
变量包含某些内容(至少为空字符串)。当然,根据您的代码架构,您可以将空字符串替换为false
或null
,但这取决于您。
isset()
或empty()
不要使用它们来检查数组中是否存在特定元素 - 使用array_key_exists()
。有什么区别?
我们假设$my_array
看起来像这样:
$my_array = array(
'a' => 'abc',
'b' => 0,
'c' => '',
'd' => null,
);
然后:
empty()
$my_array['b']
,$my_array['c']
和$my_array['d']
将返回true
,因为所有这些值都被视为空,而$my_array['e']
将会{还返回true
,因为不存在的值/变量也被视为空,
所有元素的isset()
将返回true
,$my_array['d']
除外,因为isset()
将等于null
的变量视为未设置。 isset($my_array['e'])
也将返回`false(因为未设置变量),array_key_exists()
将为数组中实际存在的每个键返回true
,如果不存在则返回false
,因此,如上所述,检查某个元素是否在数组中定义的更好选项是使用array_key_exists()
,因为它不会跳过“空”或null
值。
有文档链接:
isset()
- 确定变量是否已设置且不是NULL
,empty()
- 确定变量是否为空(空字符串,0
为整数,0.0
为浮点数,'0'
- 零为字符串,null
,false
或空数组array()
),array_key_exists()
- 实际检查数组中是否存在给定的键或索引,答案 2 :(得分:0)
未定义的索引意味着您正在尝试访问不存在的数组键。您的表单可能不像您期望的那样发布。一个简单的:
print_r($_POST);
将显示发布的内容。
答案 3 :(得分:0)
我无法理解你想要做什么的逻辑。你能解释一下吗?您的第一个if
条件也会被错误关闭。您的结构如下:
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
所以,检查括号。
答案 4 :(得分:0)
您应该为每个表单创建一个隐藏的输入,而不是尝试收听提交按钮。 并非所有版本的php都将提交按钮注册为值。 你也写了“if(isset($ _ POST ['submit']))”两次,这将使php返回if-statements都是真的..希望这有帮助
答案 5 :(得分:0)
尝试将回显表单的代码更改为: -
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>";
注意我已经将id添加到表单元素中,最好将id和name属性设置为表单的相同值。
答案 6 :(得分:0)
嘿,只需使用方法&#34; POST&#34;而不是&#34; post&#34; .hope所以它会像我一样解决你的问题。
快乐编码