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

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

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

$demoEMP = $_POST['demoEMP'];

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

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

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

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

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

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

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

foreach ($_POST as $i => $v)
{
if (preg_match("/^Q\d+$/",$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("/^Q\d+$/",$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

}
}

person Zanrok    schedule 17.10.2011    source источник
comment
да, вы почти на правильном пути. вы можете использовать count($_POST) вместо 55. Также foreach можно использовать с переменной $counter.   -  person Riz    schedule 17.10.2011
comment
Использование foreach() над массивом $_POST и фильтрация по именам ключей — лучшее решение, потому что использование цикла for с count($_POST) предполагает, что вы последовательно нумеруете переменные $_POST и что никакие другие переменные не передаются вашему сценарий.   -  person Jan-Henk    schedule 17.10.2011


Ответы (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.

person Jan-Henk    schedule 17.10.2011
comment
Ян, спасибо, попробую и сообщу. знак равно - person Zanrok; 17.10.2011

person    schedule
comment
В настоящее время делаю это, Кас, я никогда раньше не использовал preg_match. Спасибо, буду держать вас в курсе! - person Zanrok; 17.10.2011
comment
Эй, Кан, это сработало отлично! Тем не менее, я хочу указать значение автоматического увеличения на основе каждой вставки, которую я делаю, начиная с 1. См. отредактированный вопрос выше. - person Zanrok; 17.10.2011
comment
значение автоинкремента устанавливается базой данных, по крайней мере, в случае, если вы используете sql: вопросы CREATE TABLE (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, text TEXT NOT NULL) ENGINE = MYISAM; - Для этой таблицы вставка выглядит как вставка в вопросы (text) значения ('lalala'), а затем вы получаете свой индекс автоинкремента с помощью mysql_insert_id() или выбираете LAST_INSERT_ID из вопросов. - person Kasheftin; 17.10.2011