новое значение перезаписывает предыдущие значения - PullRequest
0 голосов
/ 12 октября 2010

Хорошо, у меня есть этот 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 ... любые идеи, как мне решить эту проблему

Ответы [ 2 ]

1 голос
/ 12 октября 2010

Re: Где SQL инъекция?

Этот ответ является ответом на комментарий ОП с вопросом об ошибке внедрения SQL.

Обратите внимание на строку:

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

Ошибка в том, что входящее значение HTML для "id" не экранировано должным образом. Вы ожидаете, что он будет содержать целое число или ничего. Но если хакер отправил что-то вроде

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 ( manual ):

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

Примечания:

  • Для баз данных, отличных от MySQL, существуют другие методы Php. Смотрите документы.
1 голос
/ 12 октября 2010

Помимо всех упомянутых выше SQL-инъекций, я думаю, что я знаю, в чем ваша проблема.Скажите, если я понимаю ваш сценарий:

  1. Пользователь нажимает кнопку «Добавить продукт»
  2. Кнопка запускает AJAX-запрос к сценарию PHP выше
  3. PHP-сценарийгенерирует некоторый HTML
  4. Каким-то образом (?) отображается сгенерированный HTML
  5. Значения всех других полей продукта в форме возвращаются к одному

IЯ предполагаю, что # 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 вы создаете HTML-код с JavaScript, получая имя / идентификатор продукта с помощью запроса AJAX.

IЯ не совсем понимаю, как работает ваш скрипт.Насколько мне известно, PHP не отображается на текущей странице, а повторяет текст ответа AJAX.Есть что-то еще, или это только у меня?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...