2010-10-12 112 views
0

好了,所以我有這個JavaScript新值覆蓋以前的值

function getpreconfigproducts(str1,str2) 
{ 
var url="ajax_preconfig_products.php?"; 
url=url+"id="+str1+"&cid="+str2; 
xmlHttp = GetXmlHttpObject(stateChangeHandler); 
xmlHttp_Get(xmlHttp, url); 
return false; 
} 

,並調用此PHP

<?php 
if($_GET['id']!='') 
{ 
    $sql="SELECT * FROM productinfo WHERE ProductID=".$_GET['id']." AND Status=1"; 
    $pro=ExecuteGetRows($sql); 
?> 
<p>Qty: <input type="input" name="qty[]" id="fpro[]" value="1" style="width:15px; margin-top:-3px;" /> <label><?php echo $pro[0]['ProductName'];?></label> </p> 
<?php 
     echo "^_^"; 
     echo ",".$pro[0]['ProductID']; 
    } ?> 

產生這種

<div class="fields"> 
<h2>Final Products</h2> 
<p id="finalproductsid"> 
    <p>Qty: <input name="qty[]" id="fpro[]" value="1" style="width: 15px; margin-top: -3px;" type="input"> <label>FIREBOX S5510 15</label> </p> 
    <p>Qty: <input name="qty[]" id="fpro[]" value="1" style="width: 15px; margin-top: -3px;" type="input"> <label>FIREBOX S5510 15</label> </p> 
</p> 
</div> 

的問題是,如果一個用戶改變輸入的數量[]來說5,並增加了另一個產品,它回覆到1 ...任何想法如何我可以解決這個

+0

你期望得到什麼?您正在覆蓋HTML。如果你不需要覆蓋 - 那麼就不要這樣做。 – zerkms 2010-10-12 01:33:46

+0

我只需要寫新的產品,而不是所有的東西..但我不知道如何實現這個 – Trace 2010-10-12 01:52:13

+0

順便說一句,你的PHP腳本容易受到SQL注入。 – PleaseStand 2010-10-12 01:57:05

回答

1

除了已經提到的所有SQL注入的東西,我想我可能會知道你的問題是什麼。告訴我,如果我理解你的腳本:

  1. 用戶點擊「添加產品」按鈕
  2. 按鈕觸發一個AJAX請求到PHP腳本上述
  3. PHP腳本生成一些HTML
  4. 不知何故(? )生成的HTML被顯示在形式
  5. 所有其他產品字段的值恢復到一個

我假設#4是瓦特這裏出現了問題(#5)。根據您將HTML附加到表單的方式,輸入字段有時會回覆。例如:

//Reverts all form inputs to default- 
myForm.innerHTML += "<input name='new_input'/>"; 
//Keeps current input values- 
var newNode = document.createElement('input'); 
myForm.appendChild(newNode); 

可能我建議,這不是附加HTML的字符串,你用JavaScript創建HTML中,通過一個AJAX請求,把產品名稱/ ID。

我不太明白你的腳本是如何工作的。就我的有限知識而言,PHP不會顯示到當前頁面,而是迴應AJAX的響應文本。還有更多,還是僅僅是我?

1

回覆:SQL注入在哪裏?

此答案是爲了迴應OP的評論詢問有關sql注入錯誤。

注行:

$sql="SELECT * FROM productinfo WHERE ProductID=".$_GET['id']." AND Status=1";

的錯誤是,在 「ID」 傳入的HTML值不正確地轉義。你期望它會包含一個整數或什麼也不包含。但是,如果一個黑客發送類似

1;truncate users;select * from users where id=1作爲id的值,你最終用SQL語句:

$sql="SELECT * FROM productinfo WHERE ProductID=1;truncate users;select * from users where id=1 AND Status=1";

正確的方法是ALWAYSALWAYSALWAYS正確地逃脫或不穿過任何數據進入該程序。對於PHP MySQL的數據庫管理系統查詢(manual):

$sql= sprintf("SELECT * FROM productinfo WHERE ProductID=%s AND Status=1", 
     mysql_real_escape_string($_GET['id'])); 

注:

  • 對於比MySQL其他數據庫,還有其他PHP技術。看文檔。