2012-07-12 36 views
1

我已經搜索和搜索,但沒有找到任何內容,但這可能是因爲我甚至不知道是什麼原因導致了這個錯誤,更不用說如何解決它。簡單的PHP幫助(不插入到數組中)

首先,我有點新。我知道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

變化

if($name=="" || $subject=="" || $message=="" || $emailAddress=""){ 

if($name=="" || $subject=="" || $message=="" || $emailAddress==""){ 

你不經意間在if陳述,$emailAddress""

... || $emailAddress=""){ 
0

在你的if語句,您正在使用分配,不比較

if($name=="" || $subject=="" || $message=="" || $emailAddress=""){ 

而不是

if($name=="" || $subject=="" || $message=="" || $emailAddress==""){ 
1

有兩個問題,其中一個是在否定這裏:

if(!count($errors)==0){ 

一元!適用於count($errors),不count($errors)==0。使用!=代替:

if(count($errors) != 0) { 

第二個錯誤是在這裏使用,而不是一個比較(==)的分配(=)的:

if($name=="" || $subject=="" || $message=="" || $emailAddress=""){ 

作爲一個側面說明,你並不需要使用$errors[count($errors)]將項目添加到數組的末尾。 $errors[]會做。對於迭代來說,使用foreach循環比當前正在執行的循環好得多。