Как я могу заставить это эхо работать?
Используя этот код, как сделать так, чтобы он отображал только радио или флажок, если у вас есть abcd-ответы или ab-ответы. В моей викторине это будет abcd и a (true) b (false) ответы. Чтобы закончить мой тест, это единственное, что мешает мне закончить его. Мой вопрос, возможно, не к сути, но я попытался спросить его ближе к тому, что я сделал. Спасибо за любую помощь.
<?php
//retreive questions from database and put into question box
$query2 = "SELECT `QuestionId`, `Question`, `Opt1`, `Opt2`, `Opt3`, `Opt4`,`Answer` FROM `pf_questions`";
$question2 = mysql_query($query2);
while($row = mysql_fetch_array($question2)){
$id = $row['QuestionId'];
$question = $row['Question'];
$opt1 = $row['Opt1'];
$opt2 = $row['Opt2'];
$opt3 = $row['Opt3'];
$opt4 = $row['Opt4'];
$answer = $row["Answer"];
?>
<div id="ContainerQuestion">
<span class="Question">Question <?php echo $id; ?>. <?php echo $question; ?></span>
<p><input type=radio name='q<?php echo $id; ?>' <?=( $answer == 'a')?("checked='checked'"):(""); ?> value="a"> <?php echo $opt1; ?> </p>
<p><input type=radio name='q<?php echo $id; ?>' <?=( $answer == 'b')?("checked='checked'"):(""); ?> value="b"> <?php echo $opt2; ?> </p>
<p><input type=radio name='q<?php echo $id; ?>' <?=( $answer == 'c')?("checked='checked'"):(""); ?> value="c"> <?php echo $opt3; ?> </p>
<p><input type=radio name='q<?php echo $id; ?>' <?=( $answer == 'd')?("checked='checked'"):(""); ?> value="d"> <?php echo $opt4; ?> </p>
</div>
<?php
}
?>
2 ответа
Я думаю, я понимаю, что вы спрашиваете. Вы хотите заключить каждую строку в предложение "если". Например:
<?php if( isset ($opt3) ) { ?>
<p><input type=radio name='q<?php echo $id; ?>' <?=( $answer == 'c')?("checked='checked'"):(""); ?> value="c"> <?php echo $opt3; ?> </p>
<?php }
if( isset ($opt4) ) { ?>
<p><input type=radio name='q<?php echo $id; ?>' <?=( $answer == 'd')?("checked='checked'"):(""); ?> value="d"> <?php echo $opt4; ?> </p>
<?php } ?>
несколько уродливый взломать, но это должно работать, и вы поняли.
Я бы наверное заменил твой while
цикл с чем-то вроде следующего (не проверено):
$answerFields = array('Opt1'=>'a', 'Opt2'=>'b', 'Opt3'=>'c', 'Opt4'=>'d');
while($row = mysql_fetch_array($question2)){
$id = $row['QuestionId'];
$question = $row['Question'];
// Print Question
printf('<div id="ContainerQuestion">');
printf('<span class="Question">Question %s. %s</span>', $id, $question);
// Print Answers
foreach($answerFields as $field=>$ans)
{
if(array_key_exists($field, $row) && $row[$field])
{
$checked = ($row["Answer"] == $ans) ? 'checked' : '';
printf('<p><input type="radio" name="%s" %s value="%s">%s</p>',
$id, $checked, $ans, $row[$field]);
}
}
}
Если поле ответа в вашей базе данных (Opt1, Opt и т. Д.) Не задано, или пустая строка, <p>
содержащий ответ не должен быть напечатан.
Это решение позволяет распространить ваше заявление на случаи, когда 3/4 ответа заполнены, а 1/4 пуста. Это также немного очищает ваш код, используя printf
операторы вместо того, чтобы прыгать между встроенным PHP и HTML.
Наконец, обязательная записка с указанием важного комментария о готовых высказываниях.