Возникли проблемы с foreach + Mysql INSERT - PullRequest
1 голос
/ 13 октября 2011

Мне интересно, возможно ли создать динамическую таблицу, которая вставляется в mysql. У меня есть небольшая таблица, которую пользователь может расширять по мере необходимости. (Чтобы получить столько входных строк, сколько они хотят.)

<script>
var count = 0;
$(function(){
$('p#add_field').click(function(){
    count += 1;
    $('#container').append(
            '<strong>Recipient #' + count + '</strong><br />' 
            + '<tr><td><label>Client First Name:</label><input id="f_name_' + count + '" name="f_name[]' + '" type="text" /></td><td><label>Client Last Name:</label><input id="l_name_' + count + '" name="l_name[]' + '" type="text" /></td></tr>');

});
});
</script>

JS устанавливает хорошие входные идентификаторы и имена (f_name_1, f_name_2, l_name_1, l_name_2 и т. Д.), Но проблема для меня начинается, когда я пытаюсь перебрать вводы и вставить значения в MYSQL. Это прекрасно работает, если вы отправляете только одну строку (имя). Увы, если вы хотите передать две строки (имена), он проходит через цикл и вставляет четыре строки в БД.

т.е.
Джон Доу
Джейн Эйр
Джон Эйр
Джейн Доу

Вот ВСТАВКА:

//Loop through added fields
foreach ( $_POST['f_name'] as $key=>$f_name) {
  foreach ( $_POST['l_name'] as $key=>$l_name) {

    //Insert static values into table
    $sql_user = sprintf("INSERT INTO mytable (f_name, l_name) VALUES ('%s','%s')",
    mysql_real_escape_string($f_name),
    mysql_real_escape_string($l_name));
    $result_user = $db->query($sql_user);   
    }
    }               


<?php if (!isset($_POST['btnSubmit'])) { ?>
<h1>My Form</h1>
    <form name="userdata" method="post" action="">

    <h3>Please list the names:</h3>
<table>
    <div id="container">
        <p id="add_field"><a href="#"><span>+ Add Names</span></a></p>
    </div>
</table>

    <input type="submit" name="btnSubmit" id="go" value="Submit Your Names" class="btn" />


    </form>
<?php } ?>

Спасибо за любой совет, так как я никогда не мог понять.

JE

1 Ответ

1 голос
/ 13 октября 2011

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

foreach ( $_POST['f_name'] as $key => $f_name ) {
    $l_name = $_POST['l_name'][$key];
    // do something with $f_name and $l_name
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...