2014-03-06 98 views
0

我正在php中製作一個簡單的留言腳本。我已經完成了它,但需要幫助查找我的代碼中的邏輯錯誤。其中之一是當迴應表單內容的結果時。我想要在不同的行上顯示電子郵件,全名和評論。GuestBook PHP腳本諮詢

這樣

email: [email protected] 
Name: joe somebody 
Comment: 
hello world. 

但由於某種原因,它只是顯示所有線路上的第一個和最後一個名字。

其他3個問題是排序(升序,降序)和刪除重複。

在此先感謝您對如何解決此問題的建議。

我只是問你詳細,所以我知道你在說什麼。

在任何情況下,繼承人的代碼:

 <!DOCTYPE html> 
    <html> 
    <head>   
    <meta charset="UTF-8"> 
    <title>Guest Book</title> 
    </head> 
    <body>                    
    <?php 
     // is there data in the fields 
     if (isset($_POST['submit'])){ 
     $firstName = addslashes($_POST['first_name']);       
     $lastName = addslashes($_POST['last_name']); 
     $wholeName = $firstName . "," . $lastName; 

     $email = addslashes($_POST['email']); 
     $comment = addslashes($_POST['comment']); 

     $guestRecord = "$wholeName~$email~$comment\n"; 
     $guestBook = fopen("guestbook.txt", "ab"); 

     //if not let the user know 
     if ($guestBook === FALSE)   
     echo "There was an error saving your entry!\n";  
     else { 
     // if there is info add it to the txt file   
     fwrite($guestBook, $guestRecord);   
     // close the txt file 
     fclose($guestBook); 
     //let the user know info was saved  
     echo "Your entry has been saved.\n";  
     } 
     }  
     ?> 
     <h2>Enter your name to sign our guest book</h2> 
     <hr>  
     <form method="POST" action ="GuestBook1.php">        
     <p>First Name<input type ="text" name="first_name"/></p>      
     <p>Last Name<input type ="text" name="last_name"/></p> 
     <p>Email<input type ="text" name="email"/></p> 
     <p><textarea name="comment" id="comment"/></textarea></p> 
     <p><input type ="submit" value ="Submit"  name="submit"/></p>        
    </form>  
    <hr> 

    <p><a href ="GuestBook.php">Show Guest Book</a> 
    <br /> 
     <a href="GuestBook.php?action=Delete%20First">Delete Guest Entry</a> 
     <br /> 
     <a href="GuestBook.php?action=Remove%20Duplicates">Remove Duplicate Entries</a> 
     <br /> 
     <a href="GuestBook.php?action=Sort%20Ascending">Sort Entries A-Z</a> 
     <br /> 
     <a href="GuestBook.php?action=Sort%20Descending">Sort Entries Z-A</a> 
     <br /> 
    </p> 

     <?php 
     // if theres info in the form process info 
     if (isset($_GET['submit'])) { 
       if ((file_exists("guestbook.txt")) && 
        (filesize("guestbook.txt") != 0)) { 
        $guestArray = file("guestbook.txt"); 
        //switch to $_Get Method 
        switch ($_GET['submit']) {      
       // remove duplicate entries 
      case 'Remove Duplicates':  
      $guestArray = array_unique($guestRecord);  
      $guestArray = array_values($guestRecord);  
      break; 
      //sort ascending 
       case 'Sort Ascending': 
       $guestArray = sort($guestArray); 
        break; 
       //sort Decending 
       case 'Sort Decending': 
       $guestArray = ksort($guestArray); 
       break;        
       }    
        //count to see how many entries there are    
        if (count($guestArray)>0) { 
        $newGuest = implode($guestArray); 
        $guestStore = fopen("guestbook.txt", "ab"); 
        if ($guestStore === false) 
        echo "There was an error updating the message file\n";     
        else {fwrite($guestStore, $newGuest); 
        fclose($guestStore); 
         }   
             }   
             else 
             unlink("guestbook.txt");} 
             } 
             if ((!file_exists("guestbook.txt")) || 
             (filesize("guestbook.txt") == 0))  
             echo "<p>There are no entries.</p>\n"; 
             else { 
     // there isnt anything in the txt file show an error         
     if ((!file_exists("guestbook.txt")) || 
     (filesize("guestbook.txt") == 0))  
     echo "<p>There are no entries.</p>\n"; else { 
     //if there is information display the txt file in a table  
     $guestArray = file("guestbook.txt");  
     echo "<table style=\"background-color:lightgray\" 
     border=\"1\" width=\"100%\">\n";  

     //begin counting number of guest entries 
     $count = count($guestArray);  
     for ($i = 0; $i < $count; ++$i) { 
     $currMsg = explode("~", $guestArray[$i]);  
     // display results in a table  
     echo "<td width=\"5%\" style=\"text-align:center; 
     font-weight:bold\">" . ($i + 1) . "</td>\n"; 
      echo "<td width=\"95%\"><span style=\"font-weight:bold\"> 
       Email:</span> " . htmlentities($currMsg[0]) . "<br />\n"; 
       echo "<span style=\"font-weight:bold\">Name:</span> " .   
        htmlentities($currMsg[0]) . "<br />\n"; 
          echo "<span style=\"text-decoration:underline; 
          font-weight:bold\">Comment</span><br />\n" . 
          htmlentities($currMsg[0]) . 
          "</td>\n";  
          echo "</tr>\n"; 
          }  
          echo "</table>\n"; 
          } 
               } 
     ?>                   
    </body> 
</html> 
+0

當你談論排序時,你想對它們進行排序?姓名(第一名還是最後一名)?電子郵件?評論?還有別的嗎? –

+2

一個數據庫比平面文件要容易一百萬倍 – 2014-03-06 03:16:06

回答

-1

關於你的第一個問題,你是呼應$currMsg[0]所有領域。您需要爲每個值使用正確的索引(名稱爲0,電子郵件爲1,註釋爲2)。或者更好的是,使用類似的東西:

list($name, $email, $comment) = explode("~", $guestArray[$i]); 

這樣你就有了有意義的變量名。

其他問題您需要更具體地瞭解您要做什麼(以及您當前的代碼不工作的方式)。

但我至少可以看到一個問題 - 你的鏈接有?action=但你switch聲明看着$_GET['submit'],不$_GET['action']。另外,您在case 'Sort Decending':一個錯字(缺少「S」)

0
$firstName = addslashes($_POST['first_name'])."\r\n"; 

\r\n\將會把物理的東西在新的一行。確保使用雙引號。