Возможен ли массив в форме для сбора нескольких значений с одинаковым именем? - PullRequest
1 голос
/ 18 мая 2010

Добрый день,

Сначала я начну с цели, которую пытаюсь достичь, а затем приведу очень простой пример того, что мне нужно сделать.

Цель

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

Первый проход

Я пропущу проверочную часть этого вопроса, потому что я чувствую, что мне нужно сначала понять основы.

<form action="?" method="POST" name="Form">
Member 1 First Name:<input type="text" name="MemberFirstName[]" /><br />
Member 1 Last Name: <input type="text" name="MemberLastName[]" /><br />
Member 1 Email: <input type="text" name="MemberEmail[]" /><br />

Member 2 First Name:<input type="text" name="MemberFirstName[]" /><br />
Member 2 Last Name: <input type="text" name="MemberLastName[]" /><br />
Member 2 Email: <input type="text" name="MemberEmail[]" /><br />

Member 3 First Name:<input type="text" name="MemberFirstName[]" /><br />
Member 3 Last Name: <input type="text" name="MemberLastName[]" /><br />
Member 3 Email: <input type="text" name="MemberEmail[]" /><br />

<input type="submit" name="submit" value="Continue" />          
</form>

Я надеюсь, что каждый ввод данных для имени (обязательное поле) будет генерировать уникальный ключ для этой конкретной записи и не будет перезаписывать любые введенные данные. Поскольку я несу информацию от страницы к странице (форма проверки), я превращаю переменные POST в переменные SESSION, а затем сохраняю их в базе данных mysql. Я надеюсь иметь:

<?php

$conn = mysql_connect("localhost", "username", "password");
mysql_select_db("DBname",$conn);

$sql = "INSERT INTO tablename VALUES ('$_SESSION[Member1FirstName]', '$_SESSION[Member1LastName]', '$_SESSION[Member1Email]', '$_SESSION[Member2FirstName]', '$_SESSION[Member2LastName]', '$_SESSION[Member2Email]', '$_SESSION[Member1FirstName]', '$_SESSION[Member3LastName]', '$_SESSION[Member3Email]')";


$result = mysql_query($sql, $conn) or die(mysql_error());
Header ("Location: completed.php");
?>

Где значения Member1, Member2 и Member3 будут отображаться в отдельной строке таблицы. Я ЗНАЮ, что мой код неверен, но я делаю первый взгляд на общую цель бизнеса, которую пытаюсь достичь, и пытаюсь научиться правильно кодировать.

Я очень, очень новичок в программировании, поэтому любой «детский совет» очень ценится.

Ответы [ 2 ]

1 голос
/ 18 мая 2010

В зависимости от имен ваших столбцов следующие

INSERT INTO tablename 
VALUES ('$_SESSION[Member1FirstName]', '$_SESSION[Member1LastName]', '$_SESSION[Member1Email]'),
       ('$_SESSION[Member2FirstName]', '$_SESSION[Member2LastName]', '$_SESSION[Member2Email]'), 
       ('$_SESSION[Member1FirstName]', '$_SESSION[Member3LastName]', '$_SESSION[Member3Email]')"

будут работать на mysql, см. INSERT .

Однако этот ответ может привести к большим проблемамесли вы не выполните санитарную обработку ввода.

РЕДАКТИРОВАТЬ: Санитарная обработка относится к атаке sql инъекция , где строки, передаваемые непосредственно в базу данных, могут содержать конструкции, которые позволят злоумышленнику изменить пароли базы данных или обновить илиуничтожить данные.

EDIT2: Что касается синтаксиса php, я думаю этот вопрос имеет разумные ответы, из которых вы можете выучить.

1 голос
/ 18 мая 2010

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

Member 1 First Name:<input type="text" name="MemberFirstName[1]" /><br />
Member 1 Last Name: <input type="text" name="MemberLastName[1]" /><br />
Member 1 Email: <input type="text" name="MemberEmail[1]" /><br />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...