我一直试图解决这个问题,但它给我同样的错误:
下面是我的代码:注意:未定义的索引:C:'xampp'htdocs'shop.php第9行
注意:未定义的索引:正文在C:'xampp'htdocs'shop.php第24行
<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>";
}
}
}
?>
错误提示您正在访问一个不存在的数组项!
但通常你应该检查这些变量的存在(即使你确定表单已经发送):
$items = isset($_POST['items']) ? $_POST['items'] : outputError('...');
请修复你的SQL注入安全漏洞!!
$body = mysql_real_escape_string( $_POST['body'] );
请考虑升级到MySQLi或PDO !关于这些主题有很多很好的资源。
这些不是错误,它们是通知。但是它们应该在生产环境中修复,因为这会提示您代码在某些情况下可能无法正常工作。
解决方案根据您想要实现的目标,您可以使用以下代码:
$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()
,因为它不会跳过"empty"或null
值。
有指向文档的链接:
-
isset()
-确定是否设置了一个变量并且不是NULL
, -
empty()
-确定变量是否为空(空字符串,0
为整数,0.0
为浮点,'0'
- 0为字符串,null
,false
或空数组array()
), -
array_key_exists()
-实际上检查给定的键或索引是否存在于数组中,
你应该为每个表单设置一个隐藏的输入,而不是试图监听一个提交按钮。并不是所有版本的PHP都将提交按钮注册为一个值。你还写了"if(isset($_POST['submit']))"两次,这将使php返回两个if语句为真。希望对大家有所帮助
我不能理解你想做的事情的逻辑。你能再解释一下吗?此外,您的第一个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
检查括号
尝试更改响应表单的代码:-
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属性设置为相同的值。
未定义索引意味着您正在尝试访问一个不存在的数组键。您的表单可能不像您期望的那样发布。简单的:
print_r($_POST);
将显示正在发布的内容。
嘿,把method改成"POST"而不是"POST",希望它能像我一样解决你的问题。
快乐编码