Intereting Posts
Symfony2 – Пользовательский валидатор и зависимость Невозможно перенаправить с большим количеством переменных. Заголовок может содержать не более одного заголовка, обнаружена новая строка. в Как распечатать точный sql-запрос в zend framework? Как подключиться к двум таблицам в MYSQL с одинаковым идентификатором в нескольких строках PHP CURL: использование API @filename для загрузки файлов устарело Как кэшировать веб-страницу в PHP? Манипулирование массивами дат в PHP Переупорядочить XML-результаты на основе данных XML mysql имеет все значения Получение данных во время цикла с использованием левого соединения Codeigniter: Не удалось найти модель, которую вы указали Symfony2: повторение JSON от контроллера для использования в сетке ExtJS 4 Как сделать несколько запросов WHERE IN в редакторе запросов Doctrine? Как выводить данные регистрационной формы на текущую страницу и другую страницу? проанализировать идентификатор видео YouTube с помощью preg_match

php вставляет несколько значений в отдельные строки в таблице mysql

У меня есть PHP-форма с различными типами полей ввода (флажок, выпадающий список, радио, автозаполнение и т. Д.). Я бы хотел, чтобы пользователь вводил данные (это может быть более одного значения, например, для вопрос: какой ваш любимый фильм? он может написать более 1 фильма) и сохранить эти значения в отдельных строках в таблице Mysql. вот таблицы в моей базе данных:

Ответ: Id, userId, questionId, ответ

член: userId, имя, фамилия и т. д.

qustion: questionId, questionText

Я могу сделать что-то вроде этого: (Примечание: в этом случае дизайн будет другим, здесь у меня есть отдельное поле для каждого вопроса)

$stmt = $conn->prepare('UPDATE test SET q1 = :q1, q2 = :q2, q3 = :q3, q4 = :q4, q5 = :q5, q6 = :q6, q7 = :q7 WHERE username = :username'); $stmt->execute(array(':q1' => $q1,':q2' => $q2, ':q3' => $q3, ':q4' => $q4, ':q5' => $q5, ':q 6' => $q6, ':q7' => $q7, ':username' => $_SESSION['SESS_USERNAME'])); 

Моя проблема с этим подходом заключалась в том, что несколько значений ответов были вставлены в одну строку с разделенной запятой (например, если пользователь написал «Tom cruise» и «Brad Pitt», он сохранил оба эти имени в одной строке)

Я думал, что мне нужно заменить его чем-то вроде этого:

 $stmt = $conn->prepare('INSERT INTO Answer (qId, answer) VALUES (:qId, :answer)'); 

но здесь я не знаю, как определить qId? (как он может признать, что каждый ответ связан с каким вопросом)

РЕДАКТИРОВАТЬ:

В приведенном ниже коде я могу получить базу данных вопросов и сохранить ее в массиве, но все же я не уверен, как завершить этот код. Должен ли я писать инструкцию insert внутри цикла (цикл, который задает вопросы из БД, поэтому для каждого вопроса , он вставляет qId и пользователь ответа вставил … я прав?)

 $arr = array(); $sql="select qId from question"; $result = mysql_query($sql) or die(mysql_error()); while( $row = mysql_fetch_assoc( $result ) ) { arr[] = $row[ 'qId' ]; } 

Может ли кто-нибудь помочь мне узнать, как я могу вставить эти значения в несколько строк?

Большое спасибо,

Идентификатор для вопроса может быть массивом на стороне сервера. Вы можете перебирать массив и вставлять вопросы в цикл.

Другой способ – составить имена переменных в цикле for, используя переменные переменные .

Мне кажется, что мне кажется, что мне кажется, 🙂

Если у вас уже есть ответы, хранящиеся в $ _POST на qId, и вы используете [] в своих именах ввода, как предлагает Арет, вы можете сделать что-то вроде:

 // creates an object, $stmt, which will do an insert whenever $stmt->execute() // is called $stmt = $conn->prepare('INSERT INTO Answer (qId, answer) VALUES (:qId, :answer)'); $sql="select qId from Answer"; $result = mysql_query($sql) or die(mysql_error()); // loop over all question ids while( $row = mysql_fetch_assoc( $result ) ) { $qId = $row['qId']; // loop over all the answers for one question foreach ($_POST[$qId] as $answer) { // this runs the sql from the first line with :qId set to $qId, // and :answer set to $answer $stmt->execute(array(':qId' => $qId, ':answer' => $answer)); } }