Я делаю викторину, в которой есть вопросы и варианты. И вопросы, и варианты поступают из базы данных в наборах результатов. Я сталкиваюсь с проблемами в циклах и наборах результатов.
1 — я не могу выбрать вариант из каждого вопроса. Всякий раз, когда я выбираю вариант из Вопроса 1, я не мог выбрать вариант из Вопроса 2.
2 — Моя страница перезагружается равняется количеству вопросов в викторине. Как, например, у меня есть два вопроса в викторине, затем страница перезагружается дважды, если есть 5 вопросов, то она перезагружается 5 раз.
if(@$_GET['q']== 'quiz' && @$_GET['step']== 2) {
$eid=@$_GET['eid'];
$sn=@$_GET['n'];
$total=@$_GET['t'];
$a=1;
$b=0;
$q=mysqli_query($con,"SELECT count(*) FROM questions WHERE eid='$eid'" );
while($row=mysqli_fetch_array($q) ){
$b=$row['count(*)'];
}
echo '<div class="panel" style="margin:5%">';
for($a=1;$a<=$b;$a++){
$q=mysqli_query($con,"SELECT * FROM questions WHERE eid='$eid' AND sn='$a' " );
while($row=mysqli_fetch_array($q) )
{
$qns=$row['qns'];
$qid=$row['qid'];
echo '<b>Question '.$a.' :<br />'.$qns.'</b><br />';
$q=mysqli_query($con,"SELECT * FROM options WHERE qid='$qid' " );
echo '<form action="update.php?q=quiz&step=2&eid='.$eid.'&n='.$sn.'&t='.$total.'&qid='.$qid.'" method="POST" class="form-horizontal">
<br />';
while($row=mysqli_fetch_array($q) )
{
$option=$row['option'];
$optionid=$row['optionid'];
echo'<input type="radio" name="ans" value="'.$optionid.'">'.$option.'<br />';
}
echo '<br /><br />';
}
}
echo'<br /><button type="submit" class="btn btn-primary"><span class="glyphicon glyphicon-lock" aria-hidden="true"></span> Submit</button></form></div>';
}
Спасибо за помощь.
Итак, справа от летучей мыши я вижу несколько вопросов.
Простое SQL-внедрение — это главное. Вы используете запросы GET, поэтому вы берете информацию из URL. Я могу просто избежать цитаты, завершить этот запрос и выполнить удаление полностью из URL. Вы делаете это, когда вы устанавливаете $q
,
Как я могу предотвратить внедрение SQL в PHP?
Не нужно делать цикл времени на count()
MySQL заявление. Возвращает одну строку.
Ты устанавливаешь $a
а затем установите его снова для for
петля. Заглянуть в foreach
петли …
Извините, но я не могу помочь вам с вашим кодом. Это должно быть полностью переделано, потому что есть другие логические ошибки. Вы должны понимать HTML <form>
и что вы можете отправить только одну форму. Также в HTML идентификатор элемента должен быть уникальным. По этой причине вы можете отправить только один ответ на вопрос. Кроме того, у вас есть много форм, так что как только вы найдете способ ответить на ваш вопрос, вы отправите только одну из них.
Похоже, вы пытались сделать все как можно меньше строчек кода, но вы еще не понимаете, что делаете.
Других решений пока нет …