#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. Спасибо, Ян, я попробую это и дам вам знать. =)