2013-04-28 97 views
-1

當我測試我的PHP聯繫表單時,我不斷收到「警告:爲第102行的foreach()提供的無效參數」消息。我最近重建了我的網站,但我使用的是我在舊網站上使用的完全相同的PHP聯繫人表單代碼,而舊網站的表單仍能正常工作。我已複製&一字不差,所以我不知道爲什麼我得到這個錯誤。任何幫助真的會被讚賞。PHP表單中的參數無效 - foreach()

這裏是我得到的(線102)假定錯誤的行:

foreach($errors as $value) { 

這裏是整個表格的腳本(誤差線正好處於底部):

<?php 

// 
if(isset($_POST["submit"])) 
{ 

    //This is checking if the string length in the firstname field was greater than 1 character 
    if(strlen($_POST["firstname"]) > 1) 
    { 

     $firstname = $_POST["firstname"]; 
     //echo $firstname; 
    } 

    else 
    { 
     //echo "You did not type in first name"; 
     $errors["firstname"] = "<span class=\"error\">You did not type in a first name.</span>"; 
    } 


    if(strlen($_POST["lastname"]) > 1) 
    { 

     $lastname = $_POST["lastname"]; 
    } 

    else 
    { 
     $errors["lastname"] = "<span class=\"error\">You did not type in a last name.</span>"; 
    } 


    if(strlen($_POST["email"]) > 1) 
    { 

     $email = $_POST["email"]; 

     if(filter_var($email, FILTER_VALIDATE_EMAIL)) { 
      $email = $email; 
     } 

     else { 
      $errors["email"] = "<span class=\"error\">Email is invalid.</span>"; 
     } 
    } 

    else 
    { 
     $errors["email"] = "<span class=\"error\">You did not type in an email address.</span>"; 
    } 

    //This is checking if the string length in the message field was greater than 1 character 
    if(strlen($_POST["message"]) > 1) 
    { 

     $message = $_POST["message"]; 
     //echo $firstname; 
    } 

    else 
    { 

     $errors["message"] = "<span class=\"error\">You did not type in a message.</span>"; 
    } 


    // Code to tell form NOT to send form if there are any errors. 
    if($errors < 1) 
    { 
      $to = "[email protected]"; 
      $from = $email; 
      // headers makes sure you have a reply-to address 
      $headers = "From: {$from}" . "\r\n"; 
      $headers .= 'MIME-Version: 1.0' . "\r\n"; 
      $headers .= 'Content-type: text/html; charset=iso-8859-1'; 

      $subject = 
       "From: ($from)" . "<br />" . 
       "First name: ($firstname)" . "<br />" . 
       "Last name: ($lastname)" . "<br />" . 
       "Email: ($email)" . "<br />" . 
       "Message: ($message)"; 

      if(mail($to, $from, $subject, $headers)) 
      { 
       $finalMsg = "<p class=\"success\">Thank you! Your email was sent.</p>"; 
      } 

      else { 
       $finalMsg = "<p class=\"error\">Your email was NOT sent. Please try again.</p>"; 
      } 

} 

?> 

<?php 

//each error is displayed 

foreach($errors as $value) { 

echo "<span>$value</span><br />"; 

} 
    } 
?> 
+1

警告信息的措詞不夠清楚嗎? 「foreach」期望有一些數組,但它沒有得到一個。您可能沒有將'$ errors'初始化爲空數組,並且在沒有驗證錯誤時未定義它。 (另外,'$ errors <1'將不起作用...) – DCoder 2013-04-28 07:28:10

+0

在頂部添加'$ errors = array();'也許?你在多個地方操作'$ errors',但不要告訴PHP它是一個數組。 – 2013-04-28 07:28:33

+0

由於您是新手,請接受解決問題的答案(打勾)。向上(向上箭頭)提供您的信息或幫助您的答案。向下投票(向下箭頭)假的答案。 – Techie 2013-04-28 07:30:55

回答

0

你正在做一個不是數組的事情的foreach。你應該檢查你所傳遞給foreach是使用is_array功能

數組如果你不知道這將是一個數組,你可以隨時查詢使用下面的PHP代碼示例:

if (is_array($errors)) { 

    foreach ($errors as $error) { 
    //do something 
    } 
} 

foreach構造提供了一種簡單的方法來遍歷陣列。 foreach僅適用於數組和對象,並且當您嘗試在具有不同數據類型的變量或 未初始化的變量上使用它時,會發出錯誤。

0

您的變量$errors沒有在手之前設置,這會導致嘗試迭代的錯誤。正如其他人一樣,在我的同一時間建議,事先聲明$errors應該解決這個特定的問題。

類似$errors = array();之前你的第一個if-statement會做的伎倆。否則也類似於其他人的建議,做issetis_array(稍微好一點,因爲它檢查它是否是一個數組)會有所幫助。

PHP foreach Documentation

+1

不知道爲什麼這被否決了,如果$ _POST ['submit']'被設置,並且他檢查的所有其他變量都是正確的,'$ errors'對象在代碼中從不設置**,這會導致這個問題。 – Turnerj 2013-04-28 07:32:14

2
<?php 

$errors = array(); 
if(isset($_POST["submit"])) 
{ 
    ... 

你必須定義所有變量。 你在做$firstname嗎?所以你應該有$errors

另外,定義錯誤時不要添加格式,請在輸出處添加它。它會爲你節省很多打字。