Problem beim Erzeugen von Zufallszahlen und späterem Vergleich

blck

Mitglied
Hallo,
Mein Script erzeugt zwei Zufallszahlen, die der User zusammenrechnen soll, sozusagen als Spamschutz.Das Ergebnis wird später bei einem möglichen POST überprüft. So weit die Theorie.
Jetzt mein Problem, nach dem Submit berechnet er zwei neue Werte und trägt diese in die alte Variable ien. Warum weiß ich nicht. Ich habe versucht, das über ein Array abzufangen und sozusagen alle Werte zu speichern und dann runter zu rechnen, um mit dem alten Wert vergleichen zu können. Seltsamer Weise wird aber der Zähler zum Wechseln der Arrayfelder nicht hochgezählt(nachgeguckt per var_dump()). Das heißt für mich aber, dass er die Seite nicht neu lädt, nur warum errechnet er dann sofort zwei neue Zufallszahlen? Hier mal mein Skript, vielleicht findet ihr ja was:
PHP:
<?
$i++;
$ergarray=array();
$rand1 = rand(1,10);
$rand2 = rand(1,10);
$erg = $rand1*$rand2;
$ergarray[$i] = $erg;
?>
   <td>Wieviel ist <?echo $rand1."*".$rand2?><input type='text' name='kommerg' value='' style='width: 30px;'></td>
  </tr>
  <tr><td><input type='submit' value='Kommentieren'></td>
   <input type='hidden' name='Kommentar' value='komm'>
  </tr>
 </form>
</table>

<?
//Neuer Kommentar
$kommerg = $_POST['kommerg'];
$kommerg = mysql_real_escape_string(htmlentities($kommerg));

var_dump($ergarray);

if (($_POST['Kommentar'])&&($kommerg == $erg)){

echo "BULKSHIT";
echo $erg."br".$kommerg;
die();
Ich weiß, ich vergleiche nicht mit dem Array sondern nur mir $erg, das ist noch alt, aber var_dump() müsste ja trotzdem je nach dem ein anderes bzw. größeres Array ausspucken. Ohne den Vergleich von $kommerg und $erg funktioniert die Schleife übrigens.

MfG Blck
 
Hallo,

ohne das Skript genauer angeschaut zu haben: du vermutest anscheinend, dass Variablenwerte zwischen zwei Aufrufen eines Skriptes automatisch erhalten bleiben. Dem ist allerdings nicht so. Für diesen Zweck gibt es unter anderem Sessions.

Grüße, Matthias
 
Hallo Matthias,
nein das nicht. Irgendwie werden die Zufallswerte sofort nach dem Klick auf den SUbmit-Button neu berechnet, ohne das die Abfrage vernünftig, oder mit dem Ergebnis der Aufgabe vor dem Klicken auf den Submitbutton. Es ist mir auch schleierhaft warum.

MfG Blck
 
Doch. Was du dadurch…
Irgendwie werden die Zufallswerte sofort nach dem Klick auf den SUbmit-Button neu berechnet, ohne das die Abfrage vernünftig, oder mit dem Ergebnis der Aufgabe vor dem Klicken auf den Submitbutton. Es ist mir auch schleierhaft warum.
gerade bewiesen hättest. Nach dem Klick auf den Submit-Button wird das Skript erneut aufgerufen. Schau dir dazu vielleicht mal die entsprechende Stelle im Quakenet/#php Tutorial an.

Grüße, Matthias
 
hallo,

was ist dein problem? du berechnest zwei zufallszahl, die zusammengezählt werden sollen.
nach dem abschicken des formulars, und sei das ergebnis richtig gewesen, die wahrscheinlichkeit dafür das nach dem abschicken des formulars nochmal die selben zufallszahlen erzeugt werden ist verschwindend gering. was wunderst du dich da?

ich glaube du hast die logik von deinem code noch nicht begriffen ;)
 
Gut, wenn dem so ist, wie stelle ich das dann geschickter an? Also wie kreiere ich zwei Zufallszahlen, lasse diese in die HTML-Seite einfließen und überprüfe am Ende die Rechenaufgabe?

MfG Blck
 
Abend,
der Sinn der Sache ist doch, das man nicht automatisiert Kommentare hinterlegen kann. ( oder verstehe ich da was falsch) Was du gerade versucht ist ein CAPTCHA zu bauen.

Dabei ist es wichtig, dass das Ergebnis Serverseitig gespeichert wird (!!) und der User es in eine Form bekommt die nur Menschen "auslesen" können. (Grafik mit verzerrungen etc.)

Falls du dir selber sowas wirklich selber programmieren möchte, schau doch mal hier rein:
http://www.tutorials.de/forum/php-tutorials/248923-php-einfacher-captcha-mit-gd2-und-freetype.html

Ein Fertiges zum einbauen gibt es hier:
http://recaptcha.net/

Ansonsten, falls du es wirklich selber schreiben möchtes:
Variable in die Session speichern (PHP).


Gruß
PH
 
Ja das hab ich auch gelesen, nur ist meine Überlegung folgende:
Wenn ich das Ergebnis in einer Session speichere(die mir durchaus bekannt ist) und dies an dieser Stelle tue:
PHP:
<?
$i++;
$ergarray=array();
$rand1 = rand(1,10);
$rand2 = rand(1,10);
$erg = $rand1*$rand2;
$_SESSION['ergebnis'] = $erg
?>

Dann wird sie doch beim Neuladen der Seite, nach Button-Klick, wieder überschrieben. Oder lasse ich eine Sessioneigenschaft außen vor?

MfG Blck
 
Oder lasse ich eine Sessioneigenschaft außen vor?
Genau so solltest du es tun.

Zum Beispiel:
PHP:
if ( empty( $_SESSION['ergebnis'] ) ) {
  $i++;
  $ergarray=array();
  $rand1 = rand(1,10);
  $rand2 = rand(1,10);
  $erg = $rand1*$rand2; 
  $_SESSION['ergebnis'] = $erg;
}
Du setzt die Variable nur, wenn sie noch nicht vorhanden ist.
 
Zurück