Autor Zpráva
kockomel
Profil *
Zdravím,

potřeboval bych prosím poradit. Vytvářím antispamovou otázku pomocí jednoduchého příkladu (např. Kolik je 1+1 ? - uživatel zadá 2 ).

Generuji dvě náhodné čísla, které poté sčítám a vypisuji do uvedené otázky. Uživatel zadá výsledek do formulářového inputu a pokud umí sčítat měla by být podmínka OK.

Při načtení stránky se čísla vygenerují a příklad se zobrazí....můj problém je v tom, že když uživatel klikne na submit button Odeslat, tak dříve než se ověří podmínka znovu se provede kod a čísla se opět vygenerují, takže podmínka není nikdy splněna.....(tedy pouze v případě, že se náhodou vygeneruje stejný příklad, pak výsledek sedí).

Potřeboval bych nějakým způsobem zajistit, aby se při kliku na Odeslat čísla znovu negenerovala.

zde je můj kód:

<?php

@$spam = $_POST['spam'];

$cislo1 = rand(1, 5);
$cislo2 = rand(1, 5);
$vysledek = $cislo1 + $cislo2;

if ( isset($_POST['submit']) ) {
    if ($spam == $vysledek) {
        echo ("Spravne !!! ");
    }else {
        echo ("Spatne !!! ");
    }
}

echo ("Aktualni stav pred klikem na Odeslat: ".$cislo1." + ".$cislo2." = ".$vysledek);
?>

<form action="pokus.php" method="post">
    <p><?php  echo ("Kolik je ".$cislo1." + ".$cislo2." ?");?><input type="text" name="spam"/></p>
    <input type="submit" name="submit" value="Odeslat" />
</form>



Děkuji za každou radu

Moderátor Chamurappi: Pojem „generace“ znamená pokolení, nikoliv výroba, opravuji titulek.
mckay
Profil
kockomel:
Vytvoř si sadu výsledků, a potom jen zjišťuj, jestli odpovídá číslo jednomu z výsledků, nebo zpracuj formulář externím skriptem.

Mimochodem, když kód obalíš do , lépe se to čte a lépe radí.
Libe
Profil *
Předgeneruj si to do
<input type="hidden" name="nahodne1" value="<?php echo rand(0, 99); ?>">

a pak dále pracuj s proměnnýma $nahodne1, $nahodne2.
kockomel
Profil *
Libe:
Díky za radu, kontrola už funguje.....jak ale udělat to, aby se hodnota atributu value v hidenn inputu generovala hned po spuštění skriptu (ne až po kliku na input submit). Jde to vůbec ? V této fázi je to pro mě zatím nepoužitelné :/

Díky za každý nápad.
Libe
Profil *
Myslíš tohle?
<?php
$cislo1 = rand(1, 5);
$cislo2 = rand(1, 5);
$vysledek = $cislo1 + $cislo2;
if (isset($_POST['submit']))
{
if ($_POST['spam'] == $_POST['soucet'])
{
echo 'Spravne !!!';
}
else
{
echo 'Spatne !!!';
}
}
echo 'Aktualni stav pred klikem na Odeslat: '.$cislo1.' + '.$cislo2.' = '.$vysledek;
?>
<form action="pokus.php" method="post">
<?php
echo 'Kolik je '.$cislo1.' + '.$cislo2.'?';
?>
<input type="text" name="spam" />
<input type="hidden" name="soucet" value="<?php echo $vysledek; ?>" />
<input type="submit" name="submit" value="Odeslat" />
</form>
Sirius
Profil
<?php

if (isset($_POST['submit'])) { // Zpracování odeslaných dat

  if ($_POST['spam'] == $_POST['vysledek']) {
    echo "Spravne !";
  }
  else {
    echo "Spatne !";
  }
  
}
else { // Generování čísel a formuláře

  $cislo1 = rand(1, 5);
  $cislo2 = rand(1, 5);
  $vysledek = $cislo1 + $cislo2;

?>

<form action="pokus.php" method="post">
  
  <p>
    <?php  echo ("Kolik je ".$cislo1." + ".$cislo2." ?");?><input type="text" name="spam"/>
  </p>
  
  <input type="hidden" name="vysledek" value="<?php echo $vysledek; ?>">
  <input type="submit" name="submit" value="Odeslat" />

</form>

<?php } ?>
kockomel
Profil *
Libe:
To je přesně ono ! Nějak mi to nešlo vypotit. Díky moc za pomoc :)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0