2015-04-17 2 views
-1

Я могу добавлять/удалять поля ввода динамически, но у меня есть проблема с вводом входных значений в мою базу данных, так как есть повторяющиеся значения.Дублирующие значения, вставленные в базу данных

JQuery для полей ввода

<script type="text/javascript"> 
jQuery(document).ready(function($){ 
var counter = 1; 
var max_fields = 10; 
$('.my-form .add-box').click(function(e){ 
    e.preventDefault(); 
    if (counter < max_fields){ 
     counter++; 
     $('#container').append(
      '<div><strong>Link #' + counter + '</strong><br />' 
      + '<input id="field_' + counter + '" name="fields[]' + '" type="text" placeholder = "From" /><a href = "#" class = "remove-box"><img src = "Remove Button.png" height = "35" width = "35" align = "middle"/></a><br />' 
      + '<input id="field_' + counter + '" name="fields[]' + '" type="text" placeholder = "To" /><a href = "#" class = "remove-box"><img src = "Remove Button.png" height = "35" width = "35" align = "middle"/></div></a>'); 
} 
}); 
//code to remove fields 

вставки данных

foreach ($_POST['fields'] as $key=>$value) { 

     //Insert into transport table 
     $sql_transport1 = sprintf("INSERT INTO tbl_transport (Origin,Destination) VALUES ('%s','%s')", 
      mysql_real_escape_string($value), 
      mysql_real_escape_string($value)); 

     $result_transport1 = $db->query($sql_transport1); 
     $inserted_transport_id1 = $db->last_insert_id(); 
} 

Введенное значение:

  • Origin # 1-> здесь, Destination # 1: есть

  • Origi п # 2-> дом, назначение # 2: аэропорт

Выход:

Мое мнение, что он должен делать с этой функцией mysql_real_escape_string(), но не необходимым, чтобы предотвратить инъекции SQL ? Буду признателен за любую оказанную помощь. Благодарю.

+1

Также не может этого достаточно подчеркнуть, пожалуйста, прекратите использовать функции mysql, либо используйте mysqli, либо PDO. –

+0

Вы должны использовать параметризованные запросы, а не 'mysql_real_escape_string'. –

+0

Я намерен сделать это, поскольку он устарел, но я должен использовать mySQL в соответствии с требованием моего назначения. –

ответ

0

Ваша форма ввода кажется мне очень странным.

Если ваши формы просит 2 происхождения и назначения ваш вход POST будет:

"fields" => array("origin1", "destination1", "origin2", "destination2"); 

Это, безусловно, может работать, но не с тем, как ваш цикл работает в настоящее время. В этом примере, используя $key,$value, вы должны ввести 0,origin11,destination12,origin23,destination2. Это совсем не то, чего вы хотите: origin1,destination и origin2,destination2.

Существует лучшее решение.

Вместо имен полей fields дать им реальные имена:

+ '<input id="field_' + counter + '" name="origins[]' + '" type="text" placeholder = "From" /><a href = "#" class = "remove-box"><img src = "Remove Button.png" height = "35" width = "35" align = "middle"/></a><br />' 
+ '<input id="field_' + counter + '" name="destinations[]' + '" type="text" placeholder = "To" /><a href = "#" class = "remove-box"><img src = "Remove Button.png" height = "35" width = "35" align = "middle"/></div></a>'); 

Теперь в PHP вы можете сделать:

foreach ($_POST["origins"] as $index => $origin) { 
    $destination = $_POST["destinations"][$index]; 

    $sql_transport1 = sprintf("INSERT INTO tbl_transport (Origin,Destination) VALUES ('%s','%s')", 
     mysql_real_escape_string($origin), 
     mysql_real_escape_string($destination)); 
    // run query etc. 
} 

Вам нужно будет добавить некоторые проверки, чтобы узнать, существуют ли все индексы и т. д.

+0

Благодарим вас за вход. Теперь узнайте что-то новое, хаха. –

1

Ваша проблема в том что вы используете $value дважды

$sql_transport1 = sprintf("INSERT INTO tbl_transport (Origin,Destination) VALUES ('%s','%s')", 
      mysql_real_escape_string($value), 
      mysql_real_escape_string($value)); 

Попробуйте использовать $key для одного из значений

$sql_transport1 = sprintf("INSERT INTO tbl_transport (Origin,Destination) VALUES ('%s','%s')", 
      mysql_real_escape_string($key), 
      mysql_real_escape_string($value)); 
+0

Я пробовал это раньше, это выход. Оригин # 1-> 0, Место назначения №1: здесь Происхождение # 2-> 1, Место назначения №2: там –

+0

'$ key' будет' 0' '1' '2' и т. Д. OP не хочет эти индексы ни для чего. – Halcyon

Смежные вопросы