2015-02-24 158 views
1

我在處理一個小型網站時遇到了一個小問題。基本上,我已經設置了一個用戶可以將任何想要的內容輸入到<textarea>元素中的地方。當表單被提交時,它被髮送到PHP腳本以將其存儲在數據庫中。然後,頁面被重定向到顯示所有已提交條目的索引年齡。這工作,但以一種奇怪的方式。PHP和SQL無法正常工作

因此,到目前爲止,無論他們鍵入什麼都不會顯示在index.php上,直到他們再次轉到表單並提交另一個條目。然後,來自以前的那個出現,而不是他們剛剛放入的那個,而且這個鏈條繼續前進。

我希望它顯示一切,包括他們剛剛提交表單時的內容。這裏是我的3個腳本

的index.php

define("HOSTNAME", "localhost"); 
         define("USERNAME", "root"); 
         define("PASSWORD", ""); 
         define("DB_NAME", "testdatabase"); 

         $retrieve = new mysqli(HOSTNAME, USERNAME, PASSWORD, DB_NAME); 
         $query = "SELECT * FROM entries ORDER BY EntryID DESC"; 
         $rs = $retrieve->query($query); 

         if (!$rs){ 
          echo($retrieve->error); 
         } else { 
          $array = $rs->fetch_array(MYSQL_ASSOC); 
          while($array = $rs->fetch_array(MYSQL_ASSOC)){ 
           echo("<div class='panel panel-default'> 
             <p>" . $array['EntryContent'] . "</p> 
            </div>"); 
          } 
         } 

「newentry.php」(形式,此頁面上沒有PHP代碼)

<form method='post' action='addentry.php'> 
        <textarea name='EntryContent' class='styled'></textarea> 
        <span class='pull-right'> 
         <input type='reset' class='btn btn-default'/> 
         <input type='submit' class='btn btn-primary'/> 
        </span> 
        </form> 

「addentry.php」(進程的形成,並將其添加到數據庫)」

<?php 
$EntryContent = htmlentities($_POST['EntryContent']); 

define("HOSTNAME", "localhost"); 
define("USERNAME", "root"); 
define("PASSWORD", ""); 
define("DB_NAME", "testdatabase"); 

$connection = new mysqli(HOSTNAME, USERNAME, PASSWORD, DB_NAME); 
$sql = "INSERT INTO entries VALUES(null, \"$EntryContent\")"; 

if ($connection->query($sql) == true){ 
    header("Location: index.php"); 
} else { 
    echo("Error connecting to database.<br>" . $connection->error); 
} 
?> 

回答

5

我覺得這個代碼使問題給你。

$array = $rs->fetch_array(MYSQL_ASSOC); // Remove this line 
while($array = $rs->fetch_array(MYSQL_ASSOC)){ 

} 

所以將其更改爲僅

while($array = $rs->fetch_array(MYSQL_ASSOC)){ 

} 

,因爲當你調用該方法fetch_array()將取回的第一條記錄。所以當你再次調用while循環中的方法時,它只會從第二條記錄開始。