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

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

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 два метода, которые я пытался решить эту проблему.

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

Спасибо.

0

Решение

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

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

0

Другие решения

Когда php обрабатывает форму, отмеченные переключатели и отмеченные флажки приводят к тому, что переменная $ _POST этого элемента будет иметь значение «on». Поэтому, если пользователь не заполнил форму в соответствии со сценарием, и вы хотите оставить флажки и переключатели включенными, вам нужно посмотреть, какие элементы $ _POST прошли со значением ‘on’, и в этих случаях вы будете необходимо включить проверил = ‘проверил’ во входных данных HTML.

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

if ($ _ POST [‘elementA’] == ‘on’) $ stickifierA = «checked = ‘checked'»;

вызовет ввод HTML:

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

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

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

0

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

Я посмотрел на «questionTwo» и предоставил код, который, надеюсь, поможет вам «разобраться» с тем, что происходит.

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

Кодовая панель — Viper-7: Q26806928 / php-sticky-form-

Объяснение:

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

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

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

Если ‘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
По вопросам рекламы [email protected]