2011-06-23 107 views
0

我有一個簡單的表單,提交按鈕(如下)。我試圖讓用戶在文本框中輸入,然後當他/她點擊提交時,頁面將刷新並回顯他們在div中鍵入的內容。用戶輸入的數據在回顯前存儲在數據庫中。問題是,當我點擊提交,輸入不立即顯示。我必須點擊刷新才能顯示,當我瀏覽器給我一個彈出窗口(safari),詢問是否重新發送數據。這會導致在數據庫中插入重複的數據。我有一種感覺,我需要使用JavaScript,我也可以使它更優雅與淡入淡出,但我不知道如何做到這一點。我想我問的是否有一種方法來使用JavaScript來接收用戶的文本並將其插入到MySQL數據庫中,並且在提交被點擊後全部在1或0(優先)刷新之後顯示它。感謝ajax顯示提交文字

這裏是我的代碼:

<form method='POST' action='index.php'> 
<input type='text' name='text' id='text'> 
<input type ='submit' value='submit' name='submit'> 
</form> 

<?php 
$input=$_POST['text']; 
$put=mysql_query("INSERT INTO table VALUES ('$input')"); 

echo "<div id='area'>"; 
//i connect to the DB and echo out the data here 

echo "</div>"; 

?> 
+0

是您正在運行的完整且準確的代碼,因爲我沒有發現任何奇怪的內容,假設'index.php'是腳本。然而,爲什麼你需要刷新數據才能顯示,可能是數據第一次沒有插入。您是否在PHP代碼中嘗試執行'echo $ input;',在分配了$ input的位置的第二行? – Abhay

回答

0

我把PHP語句你實際的HTML代碼之前,並會修改你這樣的代碼

<?php 
if (isset($_POST['text'])) 
{ 
    $input = mysql_real_escape_string($_POST['text']); 

    $put=mysql_query("INSERT INTO table VALUES ('$input')"); //At this point the info has been put inside the DB 

    echo "<div id='area'>"; 
    //i connect to the DB and echo out the data here 
    echo mysql_query("SELECT * FROM table"); 
    echo "</div>"; 
} 
?> 

<form method='POST' action='index.php'> 
<input type='text' name='text' id='text'> 
<input type ='submit' value='submit' name='submit'> 
</form> 

爲什麼你沒有看到它的是,HTML是你之前加載的原因PHP我認爲。所以我會做一個php頁面,所有的sql處理完成後,一旦完成recal你index.php,並在那裏查詢你是從數據庫中的信息。

+0

@dtbarne你是否確信沒有從數據庫中獲取信息是一種安全的方法。什麼使你確信數據被正確地推入數據庫? (問我的personnale信息:)) – PRacicot

0

撇開SQL注入攻擊你的代碼是,標準的做法是向POST一個重定向迴應回的形式是在那裏脆弱。在你的情況下,它將是運行SELECT from table的頁面。

+0

@kotepillar index.php就是那個頁面 – user780483

0

這裏不需要使用AJAX。只要確保你執行下列操作之一:

  1. 確保您從DB 後您插入數據選擇。
  2. 更好的是,那麼if ($_SERVER['REQUEST_METHOD'] == 'POST'),而不是執行額外的SQL查詢,只是顯示POST的值,因爲你已經知道它。

您的代碼示例中的一個附註。如果您沒有啓用magic_quotes,那麼它很容易受到SQL注入的影響,所以在查詢中使用它之前,請確保您正確地轉義用戶輸入。