我已经搜索过并且没有找到任何东西,但这可能是因为我甚至不知道是什么导致了这个错误,更不用说如何修复它了。
首先,我有点新鲜。我知道PHP的基础知识,但有很多我不知道,所以请原谅我,如果答案很简单(或者如果你不能读我的代码,因为它太乱了!)。
我认为作为我的第一个应用程序之一,我会创建一个简单的电子邮件脚本,用户可以在其中输入他们的姓名,主题,消息和电子邮件地址。
这是表单页面的相关位:http://pastebin.com/UhQukUuB(抱歉,不太知道如何嵌入代码......)。
<form action="send.php" method="post">
Name: <input type="text" name="name" size="20" /><br />
Subject: <input type="text" name="subject" size="20" /><br />
Message:<br /><textarea name="message" rows="12" cols="55"></textarea><br />
Your email address: <input type="text" name="emailAddress" size="20" /><br />
<input type="submit" value="Send" />
</form>
这是在send.php:http://pastebin.com/nky0L1dT。
<?php
$name=$_POST['name'];
$subject=$_POST['subject'];
$message=$_POST['message'];
$emailAddress=$_POST['emailAddress'];
//It's receiving the variables correctly, I've checked by printing the variables.
$errors=array(); //Creates empty array with 0 indexes. This will now be filled with error messages (if there are any errors).
if($name=="" || $subject=="" || $message=="" || $emailAddress=""){
if($name==""){
$errors[0]="You did not supply a name.";
}
if($subject==""){
$errors[count($errors)]="You did not supply a subject."; //I'm using count($errors) so it will create a new index at the end of the array, regardless of how many indexes it currently has (if that makes sense, it's hard to explain)
}
if($message==""){
$errors[count($errors)]="You did not supply a message.";
}
if($emailAddress==""){
$errors[count($errors)]="You did not supply an email address.";
}
}
//Were there any errors?
if(!count($errors)==0){
print "The following errors were found:<br />";
for($i=0; $i<count($errors); $i++){
print $errors[$i]."<br />";
}
die ();
}
//Rest of email script, which I'll write when the stupid bug is fixed. :(
?>
接下来会发生什么:当您错过名称,主题或消息时,错误检测器工作正常并显示“您没有提供姓名/主题/消息”。当您错过电子邮件地址时,没有任何反应。我知道它存储在数组中并被正确接收,因为如果你错过了名称/主题/消息和电子邮件地址,它会显示“你没有提供姓名/主题/消息。你没有提供电子邮件地址”。我一直在盯着我的屏幕半小时,现在只是试图找出它为什么这样做?
感谢。
答案 0 :(得分:1)
有两个问题,其中一个问题在于你的否定:
if(!count($errors)==0){
一元!
适用于count($errors)
,而非count($errors)==0
。请改用!=
:
if(count($errors) != 0) {
第二个错误是使用作业(=
)而不是比较(==
):
if($name=="" || $subject=="" || $message=="" || $emailAddress=""){
作为旁注,您不需要使用$errors[count($errors)]
将项添加到数组的末尾。 $errors[]
会这样做。对于迭代,使用foreach
循环比使用当前正在执行的循环要好得多。
答案 1 :(得分:0)
更改
if($name=="" || $subject=="" || $message=="" || $emailAddress=""){
到
if($name=="" || $subject=="" || $message=="" || $emailAddress==""){
您无意中在$emailAddress
声明中将""
设为if
... || $emailAddress=""){
答案 2 :(得分:0)
在if语句中,您使用的是赋值,而不是比较
if($name=="" || $subject=="" || $message=="" || $emailAddress=""){
而不是
if($name=="" || $subject=="" || $message=="" || $emailAddress==""){