我还是php的初学者,我似乎无法理解这里有什么问题。即使存在“未识别的索引”错误,代码仍然有效。我得到的错误是指变量$ food,$ calories,$ healthy,$ submit。
代码是:
<?php
require 'connect.inc.php';
$foodname = $_POST['food_name'];
$calories = $_POST['calories'];
$healthy = $_POST['healthy_unhealthy'];
$submit_button = $_POST['submit'];
$sql="INSERT INTO `food` (`food`, `calories`, `healthy_unhealthy`) VALUES('$foodname', '$calories', '$healthy')";
if(isset($submit_button)&&!empty($foodname)&&!empty($calories)&&!empty($healthy))
{
mysql_query($sql, $conn);
}
else{
echo'Kindly fill in fields';
}
?>
<form action="insert.php" method="POST">
Food Name:<br>
<input type="text" name="food_name"><br>
Calories:<br>
<input type="text" name="calories"><br>
Healthy:<br>
<input type="text" name="healthy_unhealthy"><br>
<input type="submit" name="submit">
</form>
答案 0 :(得分:3)
首先,确保您处于接受数据的适当状态。将您的代码包装在:
中<?php
require 'connect.inc.php';
// We only run this code if the user has POSTed data to this page. Without this we
// will get an 'undefined index' error.
if(isset($_POST['submit'])) {
$foodname = $_POST['food_name'];
$calories = $_POST['calories'];
$healthy = $_POST['healthy_unhealthy'];
$submit_button = $_POST['submit'];
$sql="INSERT INTO `food` (`food`, `calories`, `healthy_unhealthy`) VALUES('$foodname', '$calories', '$healthy')";
if(isset($submit_button)&&!empty($foodname)&&!empty($calories)&&!empty($healthy))
{
mysql_query($sql, $conn);
}
else{
echo'Kindly fill in fields';
}
}
?>
<form action="insert.php" method="POST">
Food Name:<br>
<input type="text" name="food_name"><br>
Calories:<br>
<input type="text" name="calories"><br>
Healthy:<br>
<input type="text" name="healthy_unhealthy"><br>
<input type="submit" name="submit">
</form>
这将确保您当前正在从您定义的表单中接收POST请求。
$ _POST变量是一个数组,其中包含您通过POST请求发送到Web应用程序的数据。在您的表单中,您应该具有适当名称的字段(food_name,calories,healthy_unhealthy等)。听起来这些字段可能会丢失。
在您的代码中,靠近顶部的位置,放入以下内容:
print_r($_POST);
或者,你可以做一个
var_dump($_POST);
这将打印出$ _POST变量的内容。如果您没有看到对food_name,calories或healthy_unhealthy的任何引用,请检查您的表单是否正确并将这些变量传递给Web应用程序。
答案 1 :(得分:2)
尝试在你的php中放一个包装器......就像这样:
if (isset($_POST['submit'])) {
//code here....
}
并将你的表格改为:
<form action="" method="POST">
调试..使用此:
var_dump($toDebug);
答案 2 :(得分:1)
第一次加载页面时,您会看到Undefined Index错误消息。
要修复错误,请使用isset()
并检查表单是否已实际提交:
if(isset($_POST['submit'])) {
print_r($_POST); //to see all the form inputs
// your code ...
}
我还要检查是否设置了变量:
$foodname = (isset($_POST['food_name'])) ? $_POST['food_name'] : NULL;
$calories = (isset($_POST['calories'])) ? $_POST['calories'] : NULL;
$healthy = (isset($_POST['healthy_unhealthy'])) ? $_POST['healthy_unhealthy'] : NULL;
无关旁注:您的代码容易受到SQL注入攻击。不要直接在MySQL查询中插入变量,而是先使用mysql_real_escape_string()
转义它们,如下所示:
$foodname = mysql_real_escape_string($foodname);
$calories = mysql_real_escape_string($calories);
$healthy = mysql_real_escape_string($healthy);
这有助于防止SQL注入。更好的是,停止使用mysql_*
函数。它们不再被维护and are officially deprecated。请改为了解prepared statements,并使用PDO或MySQLi。
通过更正,您的代码应如下所示:
if(isset($_POST['submit']))
{
/* form was submitted, proceed */
$submit_button = $_POST['submit'];
/* checking if user inputs are set */
$foodname = (isset($_POST['food_name'])) ? $_POST['food_name'] : NULL;
$calories = (isset($_POST['calories'])) ? $_POST['calories'] : NULL;
$healthy = (isset($_POST['healthy_unhealthy'])) ? $_POST['healthy_unhealthy'] : NULL;
/* escaping user inputs */
$foodname = mysql_real_escape_string($foodname);
$calories = mysql_real_escape_string($calories);
$healthy = mysql_real_escape_string($healthy);
//query
$sql="INSERT INTO `food` (`food`, `calories`, `healthy_unhealthy`) VALUES('$foodname', '$calories', '$healthy')";
/* storing query result to a variable */
$result = mysql_query($sql, $conn);
if($result)
{
//do stuff
}
else
{
die(mysql_error()); //display error, and exit
}
}
希望这有帮助!
答案 3 :(得分:1)
PHP允许您使用未定义或未声明的变量。当您引用一个从未声明过的变量时,您会收到此通知。
当遇到未识别的变量时,它将采用扣除类型的默认“零”值。数字为0,字符串为空字符串。
在您的情况下,$_POST
变量未填充值(它们通过POST表单填充),并且您会收到每个未识别变量的通知。
更多信息可以在documentation中找到:
没有必要在PHP中初始化变量,但这是一个非常好的做法。未初始化的变量具有其类型的默认值,具体取决于使用它们的上下文 - 布尔值默认为FALSE,整数和浮点数默认为零,字符串(例如,在echo中使用)设置为空字符串,数组变为空阵列。
这是否是一个聪明的语言设计决定,我会留给自己。
答案 4 :(得分:0)
您有此代码
$sql="INSERT INTO `food` (`food`, `calories`, `healthy_unhealthy`) VALUES('$foodname', '$calories', '$healthy')";
if(isset($submit_button)&&!empty($foodname)&&!empty($calories)&&!empty($healthy))
{
mysql_query($sql, $conn);
}
在哪里,你使用if
语句之外的那些变量,并且第一次不可用,所以,你可以使用,( $sql
变量应填入if语句< /强>)
if( isset($_POST['submit']) && (!empty($foodname) && !empty($calories) &&!empty($healthy)) ) {
$sql="INSERT INTO `food` (`food`, `calories`, `healthy_unhealthy`) VALUES('$foodname', '$calories', '$healthy')";
mysql_query($sql, $conn);
}
此外,您可以使用(更好)
if( isset($_POST['submit']) ) {
$foodname = $_POST['food_name'];
$calories = $_POST['calories'];
$healthy = $_POST['healthy_unhealthy'];
if( !empty($foodname) && !empty($calories) && !empty($healthy) ){
$sql="INSERT INTO `food` (`food`, `calories`, `healthy_unhealthy`) VALUES('$foodname', '$calories', '$healthy')";
mysql_query($sql, $conn);
}
}
答案 5 :(得分:0)
Unindentified index
不是错误,而是通知。它不会停止你的脚本,因此它会继续。
请记住,您的$_POST
- 变量可能为空,这就是导致此通知出现的原因。这本身不是问题,但是你继续在sql语句中使用这个(现在没有正确初始化的变量) - 如果处理不当可能会产生问题。
对于调试目的,请快速var_dump($_POST);
查看其中的内容。
您可以使用isset()
函数来避免这种情况:
if (isset($_POST['food_name'])) {
//do something here
}
我倾向于随时初始化我的变量,p.e。像这样:
$food_name = (isset($_POST['food_name'])) ? $_POST['food_name'] : '' ;
这会导致更棘手的问题:SQL安全性。像这样编码,你的脚本很容易发生sql注入攻击。
关于这个主题的两个建议:
mysqli_real_escape_string
,或者更好的是,使用预处理语句。