好的,我有这个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>
问题在于,如果用户将输入qty []更改为5并添加另一个产品,则会将其恢复为1 ...任何想法如何解决此问题
答案 0 :(得分:1)
除了已经提到的所有SQL注入内容之外,我想我可能知道你的问题是什么。如果我理解你的剧本,请告诉我:
我假设#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 :(得分:1)
Re: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";
正确的方法是始终 始终 始终正确转义或取消任何来自该计划的数据。对于Php MySQL dbms查询(manual):
$sql= sprintf("SELECT * FROM productinfo WHERE ProductID=%s AND Status=1",
mysql_real_escape_string($_GET['id']));
注意: