Как мне обработать две разные кнопки отправки в одной HTML-форме?

Если у меня есть форма, как в приведенном ниже сценарии:

<html>
<?php
session_start();

$con=mysqli_connect("localhost","root","","QSTNS");
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$dsply=$_SESSION['q_indx'][$_SESSION['cindx']] ;
//echo $dsply ;
$qstn = mysqli_query($con,"SELECT * FROM qstns where qid = '". $dsply ."'");

$qstn = $qstn->fetch_array(MYSQLI_ASSOC);

//echo $qstn['qname'] . "<br>";
//echo $qstn['opta'] ."<br>";
//echo $qstn['optb']."<br>";
//echo $qstn['optc']."<br>";
//echo $qstn['optd']."<br>";

mysqli_close($con);
?>

<body>

<?php echo $qstn['qname'] ."<br>"; ?>
<form action="prcs_ansr.php" method="post">
<input type="radio" name="rply" value="A" /><?php echo $qstn['opta'] ; ?><br />
<input type="radio" name="rply" value="B" /><?php echo $qstn['optb']; ?> <br />
<input type="radio" name="rply" value="C" /><?php echo $qstn['optc']; ?><br />
<input type="radio" name="rply" value="D" /><?php echo $qstn['optd']; ?> <br/>
<input type="submit" value="previous">
<input type="submit" value="next">
</form></body>
</html>

У меня есть две кнопки в одной форме, и я хочу обрабатывать каждую из них отдельно, и для этого я использовал isset (), но это не сработало. Код для следующей страницы:

           <?php
session_start() ;

$con=mysqli_connect("localhost","root","","QSTNS");
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

if (isset($_POST['previous'])) {
if($_SESSION['cindx']>0)
$_SESSION['cindx']-=1;
}
if(isset($_POST['next']))
{
$res=mysqli_query($con, 'SELECT COUNT(*) FROM qstns');
$row = mysqli_fetch_array($res);
//echo $row[0];

if($_SESSION['cindx']<$row[0]-1)
$_SESSION['cindx']+=1;
}
//echo 'here';
header('Location: quiz_start.php');

mysqli_close($con);
?>

Кто-нибудь может помочь?

0

Решение

Ваши кнопки отправки не имеют названия, только значение. Поэтому вещи, которые вы проверяете как isset, никогда не устанавливаются.

<input type="submit" name="next" value="next"/>

Это поможет

5

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

Ваши кнопки отправки содержат значения, но не имена. Таким образом, не будет массива с именем $ _POST [‘previous’] или $ _POST [‘next’].

Сначала вы должны назвать свои кнопки:

<button type="submit" name="next" value="some_value" />
<button type="submit" name="previous" value="some_value" />

Это создаст необходимые POST-массивы. Хотя ваш код все равно не будет функционировать, потому что при отправке формы он отправляет все элементы формы на сервер. Таким образом, и предыдущий и следующий всегда будут установлены, потому что они оба находятся в форме.

То, что вы хотите сделать, это дать обеим кнопкам отправки одно и то же имя, как, например, действие. А затем получите значение из него в своем коде PHP:

<button type="submit name="action" value="next" />
<button type="submit name="action" value="previous" />

Сделав это, вы проверяете ввод в PHP:

<?php
if( isset( $_POST['action'] ) && $_POST['action'] == 'next' ){
// do stuff if action is next
}
if( isset( $_POST['action'] ) && $_POST['action'] == 'previous' ){
// do stuff if action is previous
}

Другой вопрос на ту же тему существует здесь:

Две кнопки отправки в одной форме

2

По вопросам рекламы [email protected]