我为葡萄酒数据库创建了一个表单,除非填充了所有字段,否则不会提交。我一直收到“未定义的变量”错误。我是新手,所以我不知道如何找到它甚至修复它。当填充所有字段(并且它实际上将记录提交到数据库)时,错误发生在带有“if(!$ error)”的行上,并且$ error的行是缺少字段的行(并且不提交到数据库)。
(!)注意:未定义的变量:第29行的C:\ wamp \ www \ Wine \ insert.php中的错误 调用堆栈
1 0.0010 262984 {main}().. \ insert.php:0 需要评论 再次购买Y / N缺失 由于缺少数据,无法插入记录。点击此处返回
这是我的代码:
<?php
$link=mysqli_connect('localhost', 'root', 'password','winelist');
if (!$link) {
die('Could not connect: ' . mysqli_error());
}
$wine = mysql_real_escape_string($_POST['wine']);
if(!$wine){
$error .= "Wine name is missing<br />";
}
$color = mysql_real_escape_string($_POST['color']);
if(!$color){
$error .= "Color is missing<br />";
}
$grapetype = mysql_real_escape_string($_POST['grapetype']);
if(!$grapetype){
$error .= "Type of grape is missing<br />";
}
$year = mysql_real_escape_string($_POST['year']);
if(!$year){
$error .= "Year of wine is missing<br />";
}
$alc = mysql_real_escape_string($_POST['alc']);
if(!$alc){
$error .= 'Alcohol content is missing<br />';
}
$comments = mysql_real_escape_string($_POST['comments']);
if(!$comments){
$error .= 'Comments are required<br />';
}
$again = mysql_real_escape_string($_POST['again']);
if(!$again){
$error .= 'Buy again Y/N missing<br />';
}
if(!$error){
$sql="INSERT INTO wines(wine, color, grapetype, year, alc, comments, again) VALUES('$wine', '$color', '$grapetype', '$year', '$alc', '$comments', '$again')";
}
else{
//display $error however you want e.g....
echo "<div class=\"error\">$error</div>";
die('Could not insert record due to this missing data. <a href="list.php">Click here to return</a>');
}
if (!mysqli_query($link,$sql))
{
die('Error: ' . mysqli_error($link));
}
echo "1 record added";
echo '<br/>';
echo '<a href="list.php">Click here to return</a>';
mysqli_close($link);
?>
<html>
<body>
</body>
</html>
答案 0 :(得分:0)
在代码顶部的某处尝试$error = '';
。您使用$error .=
连接到未定义的变量。此外,您不应在mysqli
和mysql
之间进行更改,并坚持使用mysqli
。如果你去面向对象的mysqli,它将节省你的时间。
答案 1 :(得分:0)
分配给php的时候你会发一个未定义的变量声明未使用的声明,因为如果没有找到错误,$ error将没有值。你可以随时关闭php代码中的注意事项和错误。
将此代码放在php代码的顶部
error_reporting(E_ALL ^ E_NOTICE);