2013-01-22 137 views
4

忽略了mysql的明顯安全漏洞,也沒有sql轉義字符串,有誰知道爲什麼我的sql表在頁面重新加載時被填充爲空msgs。 頁面重新加載表單提交的每個時間。我很困惑,爲什麼會發生這種情況,我該如何阻止它?Php sql,表單在頁面加載時重新提交

<?php 
    ob_start(); 
    session_start(); 
    $con = mysql_connect("localhost","username","pass"); 
    if (!$con) 
     { 
     die('Could not connect: ' . mysql_error()); 
     } 

    $dates = date('Y-m-d H:i:s'); 
    $uid = $_SESSION['user_id']; 
    $msg_id = (int) $_GET['msg_id']; 
    mysql_select_db("db_table", $con); 

    $result = mysql_query("SELECT users.first_name, users.last_name , intro.intro, intro.outro FROM intro INNER JOIN users ON intro.user_id = users.user_id WHERE intro.message_id = {$msg_id}"); 
    while($row = mysql_fetch_array($result)) 
    { 
     echo "<div id=\"start\"><div class=\"namedate\"><h1>". $row['first_name'] ." ". $row['last_name'] . "</h1><h2>test</h2></div><div id=\"holdmsg\"><div class=\"cent\"><strong>" . $row['intro'] . "</strong><br><i>" . $row['outro'] ."</i></div></div></div> " ; 
    } 

與表格相關的部分是本部分,也是頁面頂部的$ _GET。

<form action="" method="post">  
<?php 

$sql="INSERT INTO messages (user_id, intro_id , msg, date) VALUES (('$uid'), {$msg_id} ,'$_POST[msg]', ('$dates'))"; 

if (!mysql_query($sql,$con)) 
    { 
    die('Error: ' . mysql_error()); 
    } 

mysql_close($con); 

?> 

    <textarea rows="2"style="float:left" name="msg" type="text"placeholder="Elaborate on your idea..."></textarea> 
    <input id="togz2" style="float:right; "type="submit" value="SUBMIT" name="submit" class="butts"> 
    </div></div> 
</form> 
+0

非常奇特。我假設它與你的帖子或獲取方法有關。祝你好運。 – user1775570

+0

^這個評論如何建設性的:/ – ramr

+1

你有什麼樣的邏輯來包裝插入,以確保它只發生在某些情況下?如果以上是你所有,那麼它會插入每次頁面加載,因爲你正在經歷 – bhttoan

回答

3

爲什麼不這樣做呢?

if (mysql_query($sql,$con)) 
    { 
    header('location:yourpage.php'); 
}else{ 
    die('Error: ' . mysql_error()); 
} 

而且我沒有看到你的插入查詢 上述任何這樣的說法就像

if(isset($_REQUEST['submit'])){ //to check if posted 

    $sql="INSERT ...... 
} 

除此之外,你還應該插入到數據庫之前驗證數據。

+0

如果我downvoted.Please讓我知道爲什麼,不要這樣做的沉默。 –

2

這裏是很好的例子,如何防止在頁面加載重複條目

請參考鏈接http://www.webhostingtalk.com/showthread.php?t=700175

<?php 
session_start(); 
$faction = $_REQUEST['faction'] ; 
if (!is_array($_SESSION['serials'])) $_SESSION['serials'] = array(); 
if ($_REQUEST['serial']){ 
    if (in_array ($_REQUEST['serial'] , $_SESSION['serials'])){ 
    // duplicate submition, nullify it 
    $faction = ''; 
    }else{ 
    $_SESSION['serials'][] = $_REQUEST['serial'] ; 
    } 
} 


if ($faction) { // form submited 
    // if faction is not set completely ignore submition 

} 
?> 

<form> 
<input type="hidden" name="faction" value="42"> 
<input type="hidden" name="serial" value="<?=rand(1000000 , 9999999)?;>"> 
.... 
the rest of the form is here 
.... 
</form> 

另一種解決方案: -

你應該重新定向到成功後插入新的頁面。

相關問題