2012-03-04 38 views
1

我有兩個頁面,product.php和viewcart.php。當用戶點擊product.php上的按鈕時,它會將產品添加到後端(以及它的屬性)並轉到viewcart.php。通過下面的代碼將數據提交給viewcart.php。除了來自product.php文本框的值之外,還有一些需要傳遞的php變量(下面的變量是「val」)。如何解決與使用php將條目插入到mysql有關的問題?

<script language="javascript"> 
      function test() 
{ 
    var val=document.getElementById("textarea").value; 
    var hrf="viewcart.php?retailer=<?php echo $retailer?>&link=<?php echo $link; ?>&price=<?php echo $price; ?>&title=<?php echo $title; ?>&options="+val; 
     document.getElementById("a_link").href=hrf; 
} 
</script> 
<a href ="#" id="a_link" onclick="test();" class="btn btn-success" type="submit"><i class="icon-shopping-cart icon-white"></i> Add to Cart</a> 

在viewcart.php,該產品被添加到後端,然後通過下面的代碼獲取顯示:

@$link = $_GET['link']; 
$price = $_GET['price']; 
$title = $_GET['title']; 
$retailer = $_GET['retailer']; 
$options = $_GET['options']; 
$session = session_id(); 
$_SESSION['sess_var'] = $session; 

//connect to database code here 
mysql_query("INSERT INTO sessionid (sessionid, link, retailer, price, title, qt, options) VALUES('$session' , '$link', '$retailer', '$price', '$title', 1, '$options') "); 

我遇到的問題是,當用戶刷新viewcart.php ;由於上面的代碼,產品再次被添加。如果用戶點擊product.php上的提交按鈕(而不是刷新viewcart.php或單擊「後退」按鈕以轉到viewcart.php),如何確保產品已添加到數據庫?

+2

允許我成爲第一個指出PHP代碼中的SQL注入漏洞 - 在與SQL混合之前轉義您的變量:) – halfer 2012-03-04 10:56:28

回答

0
// where submit is the name of the forms submit input/button 
if ($_GET["submit"]) { 
    // add to cart 
} else { 
    // products should have already been added 
} 
0

如果該行已被添加,則必須重新輸入。 因此,使用select,如果「fetch()」返回與「false」不同的內容插入數據。

0

此問題通常使用POST/Redirect/GET模式解決。一般來說,如果你有一個名爲viewcart.php的文件,那麼它應該只顯示購物車,而不是添加產品。

1

從技術上講,如果你刷新頁面以相同的POST數據,據我所知,你也會有同樣引薦,所以你不應該試圖檢查引用是否product.php。

你應該做的是使用更新/插入MySQL查詢。首先,請確保您還插入主鍵在查詢(以便刷新頁面時,這將是相同的密鑰),然後用類似於:

INSERT INTO sessionid (id,a,b,c) VALUES (0,1,2,3) 
    ON DUPLICATE KEY UPDATE id=id; 

最後,不要忘了消毒你的輸入。