2010-10-12 70 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技术。看文档。