Использование цикла for () для создания уникальных переменных PHP - PullRequest
1 голос
/ 15 октября 2011

У меня есть форма ввода, которая позволяет мне вставить новый тест в базу данных. Форма выглядит примерно так:

 Question Title
    Question #1
        is_correct_1
        choice#1
        is_correct_2
        choice#2
        is_correct_3
        choice#3
        is_correct_4
        choice#4
    Question #2
    .
    .
    .

Различные тесты будут иметь разное количество вопросов (хотя каждый вопрос всегда будет иметь 4 варианта). Я определяю, сколько вопросов у него будет до того, как форма будет построена. Для этого я генерирую форму, используя пару для циклов. Я также инициализирую имена различных полей ввода таким же образом. Смотрите ниже:

// Grab number of questions from Admin page
    $num_of_Qs = $_POST['num_of_Qs'];
// Produce form by using for loops
    echo '<form method="post" action="' . $_SERVER['PHP_SELF'] . '">';
    echo '<fieldset><legend>New Quiz Details</legend><label for="title">Quiz Title</label>';
    echo '<input type="text" id="title" name="title" value="" /><br /><br />';
    for ($i = 1; $i <= $num_of_Qs; $i++) {
        echo '<label for="question_'.$i.'">Question #'.$i.'</label>';
        echo '<input type="text" id="question_'.$i.'" name="question_'.$i.'" value="" /><br /><br />';
        for ($x = 1; $x <= 4; $x++) {
            echo '<label for="is_correct_'.$i.'_'.$x.'">is_correct_'.$x.'</label>';
            echo '<input type="text" id="is_correct_'.$i.'_'.$x.'" name="is_correct_'.$i.'_'.$x.'" value="" /><br />';
            echo '<label for="choice_'.$i.'_'.$x.'">Choice #'.$x.'</label>';
            echo '<input type="text" id="choice_'.$i.'_'.$x.'" name="choice_'.$i.'_'.$x.'" value="" /><br /><br />';
        }
    }
    echo '</fieldset><input type="hidden" name="num_of_Qs" value="'.$num_of_Qs.'" />';
    echo '<input type="submit" value="Create" name="create" /></form>';

Итак, переменные в конечном итоге выглядят примерно так:

$title
$question_1
is_correct_1_1
choice_1_1  // first question, first choice
is_correct_1_2
choice_1_2 // first question, second choice
...

Когда я сохраняю эти переменные с помощью функции $ _POST, у меня возникают проблемы. Вот мой код:

// If user has submitted New Quiz data
    if (isset($_POST['create'])) {
        $num_of_Qs = $_POST['num_of_Qs'];
        $title = $_POST['title'];
        for ($i = 1; $i <= $num_of_Qs; $i++) { 
            $question_$i = $_POST['question_'.$i.''];
            for ($x = 1; $x <= 4; $x++) {
                $is_correct_$i_$x = $_POST['is_correct_'.$i.'_'.$x''];
                $choice_$i_$x = $_POST['choice_'.$i.'_'.$x.''];
            }
        }
        print_r($title);
        print_r($question_1);

        exit();
    }

Мне интересно, есть ли способ получить значения из формы на основе структуры, которую я определил для имен моих переменных. Конкретная проблема заключается в $question_$i = .... Можно ли спасти этот код или мне нужно переосмыслить способ именования этих переменных? Спасибо!

Ответы [ 2 ]

5 голосов
/ 15 октября 2011

Чтобы ответить на ваш вопрос, вы можете ссылаться на переменные с помощью таких строк, как

$var_1 = "hello";
echo ${"var_1"};
// or
$str = "var_1";
echo $$str;

НО ЭТО НЕ ДЕЛАЕТ

Вы хотите сохранить эти значения в массиве.

$question[$i] = $_POST['...'];
$is_correct[$i][$x] = $_POST['...'];
0 голосов
/ 15 октября 2011

Почему вы не называете свои входы массивами?

<input type='text' name='correct[]'/>

Затем, когда вы отправляете форму с POST, $ _POST ['correct'] будет массивом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...