Как я могу захватить и сохранить несколько переменных $ _POST в a для каждого цикла?

#php #mysql #post #for-loop #survey

#php #mysql #Публикация #для цикла #опрос

Вопрос:

Итак, в настоящее время я использую стороннее программное приложение для получения результатов различных опросов. Это приложение отправляет результаты на страницу через переменную $ _POST.

Так, например..

 $demoEMP = $_POST['demoEMP'];
  

Это просто сохраняет ответ на конкретный вопрос в переменной.

Что я хочу сделать, это сохранить вопросы 1-20 в переменных POST и вставить их в базу данных.. Чего я не хочу делать, так это писать 20 команд вставки или 20 $ var = $ _POST[‘var’]

Итак, я подумал, что цикл for сделает свое дело… Это то, что у меня есть до сих пор … на основе изучения различных методов и руководств. =/

 for ($i = 0; $i < 55; $i  ) {
$answer = "Q{$i}";
echo $_POST[$answer];
}
  

Я вообще на правильном пути? Спасибо за вашу помощь!

ОБНОВЛЕНИЕ :: Решение Kas отлично сработало.

Я использовал что-то вроде этого…

 foreach ($_POST as $i => $v)
{
if (preg_match("/^Qd $/",$i)) {

// Here we insert value $v to database
$query_2 = mysql_query("INSERT INTO SGresult VALUES ('', '', '$pID', '$SGQID','$v')") or die('Error: '.mysql_error ());
  

}
}

Однако сейчас я пытаюсь найти способ добавить идентификатор к вопросу и автоматически увеличивать этот идентификатор … при каждой вставке. Я думал, что смогу сделать что-то вроде $SGQID , но это, похоже, не работает.. у кого-нибудь есть какие-либо мысли?

Еще раз спасибо!

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

 $SGQID= 1;

foreach ($_POST as $i => $v)
{

if (preg_match("/^Qd $/",$i)) {

// Here we insert value $v to database
$query_2 = mysql_query("INSERT INTO SGresult VALUES ('', '', '$pID', '$SGQID','$v')") or die('Error: '.mysql_error ());
$SGQID  ; //added value to increment Question ID in DB

}
}
  

Комментарии:

1. да, вы почти на правильном пути. вы можете использовать count ($ _POST) вместо 55. также foreach можно использовать с переменной $counter .

2. Использование foreach() над массивом $ _POST и фильтрация по именам ключей — лучшее решение, потому что использование цикла for с count($_POST) предполагает, что вы последовательно нумеруете переменные $ _POST и что никакие другие переменные не передаются в ваш скрипт.

Ответ №1:

 foreach ($_POST as $i => $v) {
  if (preg_match("/^Qd $/",$i)) {
    // Here we insert value $v to database
  }
}
  

Комментарии:

1. В настоящее время, давая этому шанс, я никогда раньше не использовал preg_match. Спасибо, я буду держать вас в курсе!

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

3. значение автоинкремента устанавливается базой данных, по крайней мере, в случае, если вы используете sql: СОЗДАЙТЕ ТАБЛИЦУ вопросов ( id INT NOT NULL ПЕРВИЧНЫЙ КЛЮЧ АВТОИНКРЕМЕНТА, text ТЕКСТ NOT NULL) ENGINE = MYISAM; — Для этой таблицы вставка выглядит как «вставить в вопросы ( text ) значения (‘lalala’)», а затем вы получаете свой индекс автоинкрементас помощью mysql_insert_id() или «выберите LAST_INSERT_ID из вопросов»

Ответ №2:

Вы можете перебирать сам массив $ _POST:

 foreach ($_POST as $key => $value) {
    // Filter on value of $key
    // In this case only keep variables that start with a Q
    if (! substr($key, 0, 1) == 'Q') {
        continue;
    }

    // Do something with value
    echo $_POST[$key];     
}
  

Если вы хотите присвоить значения переменным PHP с тем же именем, что и ключ массива $ _POST, вы можете использовать переменные переменные:

 $$key = $value
  

Затем значение $_POST[‘demoEMP’] будет присвоено $demoEMP.

Комментарии:

1. Спасибо, Ян, я попробую это и дам вам знать. =)