вставить два вида массива в одной таблице - PullRequest
0 голосов
/ 14 мая 2009

у меня есть пример двух массивов из формы,

<input type="text" name="children[]" />
<input type="text" name="age[]" />

Моя проблема - вставить указанное выше значение в ту же таблицу, например

insert into childTable(children,age) values('children[]','age[]')

это в виде массива, потому что я не знаю, сколько детей ввести ... ты можешь помочь мне решить это ???? любые ответы будут высоко оценены ... спасибо !!!

Ответы [ 3 ]

2 голосов
/ 14 мая 2009

Данные из вашей формы будут доступны на PHP в переменной $ _POST (или $ _GET, но вам, вероятно, следует использовать $ _POST, например: <form method="post">).

Первое, что я обычно делаю после разработки формы, это отправляю ее обратно в скрипт и добавляю следующую строку:

print_r($_POST);

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

array(
    "children" => array(
        0 => "Bobby",
        1 => "Mary",
        2 => "Janey"
    ),
    "age" => array(
        0 => 8,
        1 => 12,
        2 => 7
    )
);

(я предполагаю, что для каждого поля children есть соответствующее поле age, да?)

Следовательно, это просто вопрос циклического прохождения массива таким образом:

$numKids = count($_POST['children']);
$values = array();

for ($i = 0; i < $numKids; ++$i) {
    $values[] = "('" . mysql_real_escape_string($_POST['children'][$i]) . "'"
              . ", " . intval($_POST['age'][$i]) . ")";
}
$sql = "INSERT INTO `childTable` (`children`, `age`) "
     . "VALUES " . implode(",", $values);
0 голосов
/ 14 мая 2009

Поля формы с несколькими значениями на самом деле не предназначены для использования с такими полями. Нет гарантии при условии, что несколько значений $_POST['children'] и $_POST['age'] будут представлены в одном и том же порядке или даже с одинаковым количеством элементов.

Вам лучше использовать серию пронумерованных полей, например:

Child 1:    
<input name="children_1" />
<input name="age_1">
<br />
Child 2:
<input name="children_2" />
<input name="age_2" />
...

Затем используйте код, подобный этому, для перебора представленных значений:

$i = 1;
while (isset($_POST['children_' . $i]) && isset($_POST['age_' . $i])) {
    if ($_POST['children_' . $i] != '') {
        mysql_query('insert into childTable (children, age) values (\''
           . mysql_real_escape_string($_POST['children_' . $i]) . '\', \''
           . mysql_real_escape_string($_POST['age_' . $i]) . '\')');
    }
    $i++;
}

Конечно, в реальном мире вы также захотите добавить некоторую проверку, чтобы проверить, что эти значения имеют смысл, прежде чем вставлять их в вашу базу данных.

0 голосов
/ 14 мая 2009

Я думаю, вам нужен цикл for.

Псевдокод:

for(int i = 0; i < children.Length; i++)
{
    insert into childTable(child, age) values(children[i], ages[i])
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...