PHP-код для прикрепления формы внутри выражения echo

0

Моя форма создает тест из текстового файла и строит выбор ответа с использованием выражений эха, как показано ниже:

function buildTest()
    {
        /*if((file_exists("files/questions.txt")) && ((file_exists("files/answers.txt")) && (filesize("files/questions.txt")!=0)) && (filesize("files/answers.txt") !=0))
        {*/
            $questionArray = array();
            $questionArray = file("files/questions.txt"); //populate the questions array from a file
            $answerArray = array();
            $answerArray = file("files/answers.txt"); //populate the answers array from a file
        //}

        for ($i = 0; $i < 10; $i++)
        {
            echo "<div class=\"question\"><br />";
            echo "<h3>Question #" . ($i + 1) . "</h3><br />";
            echo $questionArray[$i] . "<br /><br />";

            switch ($i)
            {
                case 0:
                    echo "<input type='radio' name='questionOne' value='True'" . if (isset($questionOne) && $questionOne=="True") echo "checked" . "?>/> True<br />";
                    echo "<input type='radio' name='questionOne' value='False' <?php if (isset($questionOne) && $questionOne=="False") echo "checked";?>/> True<br />";
                    break;
                case 1:
                    echo "<input type='radio' name='questionTwo' value='false' /> Blood, Water, Fire, Wind and Earth<br />";
                    echo "<input type='radio' name='questionTwo' value='false' /> Diamond, Ice, Water, Fire and Wind<br />";
                    echo "<input type='radio' name='questionTwo' value='Metal, Water, Wood, Fire and Earth' /> Metal, Water, Wood, Fire and Earth<br />";
                    break;
                case 2:
                    echo "Answer: <input type='text' name='questionThree' />";
                    break;
                case 3:
                    echo "<input type='radio' name='questionFour' value='True' /> True<br />";
                    echo "<input type='radio' name='questionFour' value='False' /> False<br />";
                    break;
                case 4:
                    echo "<input type='radio' name='questionFive' value='Goat' /> Goat<br />";
                    echo "<input type='radio' name='questionFive' value='false' /> Rat<br />";
                    echo "<input type='radio' name='questionFive' value='false' /> Dragon<br />";
                    break;
                case 5:
                    echo "Answer: <input type='text' name='questionSix' />";
                    break;
                case 6:
                    echo "<input type='radio' name='questionSeven' value='True' /> True<br />";
                    echo "<input type='radio' name='questionSeven' value='False' /> False<br />";
                    break;
                case 7:
                    echo "<input type='radio' name='questionEight' value='false' /> Horse<br />";
                    echo "<input type='radio' name='questionEight' value='false' /> Fox<br />";
                    echo "<input type='radio' name='questionEight' value='Pig' /> Pig<br />";
                    break;
                case 8:
                    echo "Answer: <input type='text' name='questionNine' />";
                    break;
                case 9:
                    echo "<input type='radio' name='questionTen' value='True' /> True<br />";
                    echo "<input type='radio' name='questionTen' value='False' /> False<br />";
                    break;
            }
            echo "</div>";
            echo "<br /><hr />";
        }

Приведенное выше показывает, что в случае 0 два метода, которые я пытался решить эту проблему.

Однако ни одно из них не представляет собой решение. Как бы я сделал свои поля ввода липкими в выражениях формирования эха формы?

Спасибо.

Теги:
forms
echo
sticky
builder

3 ответа

0

Я подозреваю, что у вас есть путаница - (1) что происходит с PHP и вашими данными. (2) Как заставить его делать то, что вы хотите.

Я посмотрел на "questionTwo" и предоставил некоторый код, который, мы надеемся, поможет вам "получить несколько ручек" от того, что происходит.

Во-первых: вот код, который имеет "липкие значения" для "questonTwo", и вы можете запускать и играть с:

Codepad - Viper-7: Q26806928/php-sticky-form-

Объяснение:

1) Каждый отдельный переключатель в группе должен иметь уникальное значение. Это значение "value" возвращается в массиве "$ _POST". Если два переключателя имеют одинаковое значение, вы не можете знать, какой из них выбран.

2) когда вы генерируете код HTML для вывода "радиокнопки", который вам известен с уникальным значением, вам нужно проверить $ _POST, чтобы узнать, есть ли у вас соответствующее значение. Если это так, выведите "checked" и браузер отметит его как выбранный.

Это весь код, который я предоставил:

Если "var_dumps" $ _POST, когда он предоставлен, чтобы вы могли видеть, что код работает.

О, не забудьте "просмотреть источник страницы" в своем веб-браузере, чтобы узнать, какой код он действительно получил.

Играйте с кодом. Надеюсь, что станет ясно, что происходит.

<?php // https://stackoverflow.com/questions/26806928/php-sticky-form-code-within-form-building-echo-statement

// This is the code for 'QuestionTwo'

// Run it and inspect the source code to see what is happening.

/*
 * Please don't let someone look at the 'page source' and see the answers.
 *
 * <input item1 --- false
 * <input item2 --- false
 * <input item3 --- value
 *
 *  is a clue as to the correct answer.
 */

/*
 * To re-select the 'user selected' input item then the 'input items' must have unique values
 * so that you can output 'checked' on the correct item when displaying it.
 */

// example:
$questions = array();

$questions['questionTwo'] = array('Q2_A1'  => 'Blood, Water, Fire, Wind and Earth',
                                   'Q2_A2'  => 'Diamond, Ice, Water, Fire and Wind',
                                   'Q2_A3'  => 'Metal, Water, Wood, Fire and Earth',
                            );

$answers = array();
$answers['questionTwo'] = 'Q2_A2'; // for example

/*
 * If there was some selected input then it will appear in the $_POST array...
 * It MUST have a unique *value* so that we can identify which item the
 * user selected.
 */

// display the input so you can see what is happening

/* debug */ if (!empty($_POST)) {
/* debug */ var_dump('Post array is:', $_POST);
/* debug */ }

// use PHP as a templating language...
?>
<!DOCTYPE html>
<html>
<head>
    <title>sticky-form-code</title>
</head>
<body>

<form action="" method='POST'>
<div>
    <?php foreach($questions['questionTwo'] as $answerCode => $answerText): ?>
        <input type='radio' name='questionTwo' value="<?= $answerCode ?>"

             <?php if (!empty($_POST['questionTwo'])): // user selected answer to this question? ?>
                <?php if ($_POST['questionTwo'] === $answerCode): // check if matches this entry? ?>
                    checked
                <?php endif; ?>
             <?php endif; ?>
            ><?= $answerText ?><br />
    <?php endforeach; ?>
</div>

<!-- check the answer if provided -->
<?php if (!empty($_POST['questionTwo'])): // is there a selected value in $_POST? ?>
     <div>
        <?php if ($_POST['questionTwo'] === $answers['questionTwo']): // match? ?>
         correct!
        <?php else: ?>
         sorry...
        <?php endif ?>
     </div>
<?php endif; ?>
 </div>
 <div>
     <input type='submit' value='Go For it!'>
 </div>

</form>
</body>
</html>
0

Когда php обрабатывает форму, проверенные переключатели и проверочные флажки приводят к переменной $ _POST этого элемента, чтобы иметь значение "включено". Поэтому, если пользователь не заполнил форму до степени удовлетворенности скриптом, и вы хотите, чтобы флажки и переключатели были проверены, вам нужно увидеть, какие элементы $ _POST прошли со значением "включено", и в тех случаях, необходимо включить checked = 'checked' в html-ввод.

например, используя:

if ($ _ POST ['elementA'] == 'on') $ stickifierA = "checked = 'checked'";

приведет к вводу html:

<input type='checkbox' name='elementA' <?php echo $stickifierA;?>>

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

Вы можете использовать цикл foreach для проверки всего и создания соответствующих переменных php для эха в каждом элементе ввода.

0

Почему бы просто не использовать блок if для проверки, является ли questionOne истинным или ложным, а затем действовать соответствующим образом?

Кроме того, для параметра false в случае 0 вы используете <?php внутри PHP. Следствием этого является то, что он пытается повторить этот бит PHP, затем он переливается, когда он попадает в кавычки вокруг False.

  • 0
    Я просто пытаюсь сделать поля липкими, это означает, что при нажатии кнопки «Отправить», когда форма не заполнена, пользователь отправляет сообщение с сообщением, чтобы заполнить его, но поля не теряют ответы, уже заполненные пользователь. Остальная часть кода будет написана - это единственное, что я пытаюсь выяснить - как быть в состоянии отобразить форму таким образом, но также повторить липкие поля. Если бы вся форма была HTML, а я не пытался создать ее с помощью PHP, это было бы легко, но, поскольку HTML построен из кода PHP, это сложно.
  • 0
    Это не плохо. Все ваши входные данные HTML имеют имена, а имена - это ключи, используемые для переменных в массиве POST при отправке формы. Что вам нужно сделать, это отправить форму в скрипт PHP, который проверяет элементы в массиве POST, и, если какой-либо из входных данных не может быть проверен, верните их обратно на исходную страницу формы и используйте массив POST для повторного заполнения значений формы , Чтобы избавиться от необходимости выполнения двух запросов POST, вы можете просто отправить страницу формы себе, а затем запустить проверку правильности на той же странице, если и только если установлена $_POST .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню