2016-11-10 3 views
1

Der folgende PHP-Code dient zum Generieren einer Zufallszahl von vier Ziffern () und die Verwendung als Validierung für ein einfaches HTML-Formular mit drei Eingabefeldern. Das letzte Eingabefeld dient zur Eingabe des Codes (der Zufallszahl). Wenn der Benutzer nicht die richtige Nummer in das letzte Eingabefeld schreibt, überspringt das Programm seinen Zweck, indem es Text zu einer Datenbank hinzufügt (agregar.txt). Ich denke, der Code ist in Ordnung, außer für if ($_POST['password'] != $numero) {. Soll ich es in eine Zeichenfolge ändern oder eine andere Art von Variable verwenden? Jedes Mal, wenn ich den Code laufen lasse, verhält es sich so, als ob $numero sich von password unterscheidet, und ich bin mir sicher, dass ich die richtige Nummer schreibe. Bitte etwas Hilfe.Formular mit Zufallszahl als Validierung

<html> 
<body> 
<center> 
<h2>Agregar entradas a diccionarioie</h2> 

<?php 
// RANDOM FOUR DIGITS NUMBER 
$numero = rand(1000, 9999); 
echo "<b>Código: </b><big>".$numero."</big><p>"; 
if ($_POST['password'] != $numero) { 
?> 

<form name="form" method="post" action=""> 
<input title=" LEMA " size="30" type="text" name="lema" autofocus><br> 
<input title=" TRADUCCIÓN " size="30" type="text" name="trad"><br> 
<input title=" CÓDIGO " size="30" type="text" name="password"><br> 
Gracias por colaborar <input title=" ENVIAR " type="submit" value="•"></form> 

<?php 
} else { 
$lema = $_POST['lema']; 
$trad = $_POST['trad']; 
// ADDING TEXT TO A DATABASE 
$texto = $lema." __ ".$trad."\n"; 
$docu = fopen("agregar.txt", "a+"); 
fwrite($docu, $texto); 
fclose($docu); 
} 
?> 

</center> 
</body> 
</html> 
+2

Wie können die beiden möglicherweise übereinstimmen, wenn Sie bei jedem Laden einer Seite einen neuen Wert für "$ numero" generieren (einschließlich Formularübergabe)? –

+0

Dies ist eine typische Sache, die wir so oft sehen: Da so viele "Erste Schritte" -Guides Beispiele zeigen, wo Formular- und Formularverarbeitungscode in einem einzigen Skript zusammengefasst sind, stolpert jeder über solche dummen Probleme. _Stop, dass doof habbit! _ Legen Sie HTML-Formular und den Bearbeitungscode in separaten Skripten! – arkascha

+0

Weisen Sie die Zufallszahl einem Sitzungsarray und einem versteckten Eingang zu und zerstören Sie sie, sobald sie übereinstimmen. Ihre Logik ist weit entfernt und muss Ihren gesamten Code umgestalten. Sie sollten beim ersten Laden der Seite auch einen undefinierten Index erhalten. –

Antwort

1

Wie von @Fred -II-, ist das Problem in Ihrem Code die $numero unterschiedliche Zufallszahl generiert werden, wenn Sie das Formular abschicken. Die Lösung ist die Verwendung der Sitzung: PHP session example

Die Sitzung kann verwendet werden, um Ihre $numero Wert nach dem Formular zu speichern. Hier ist der aktualisierte Code:

<?php 

// Make sure to start the session before any output. 
session_start(); 

if (isset($_POST['password']) && isset($_SESSION['numero']) && $_POST['password'] == $_SESSION['numero']) { 
    unset($_SESSION['numero']); 
    $lema = $_POST['lema']; 
    $trad = $_POST['trad']; 
    // ADDING TEXT TO A DATABASE 
    $texto = $lema." __ ".$trad."\n"; 
    $docu = fopen("agregar.txt", "a+"); 
    fwrite($docu, $texto); 
    fclose($docu); 
} else { 
    // RANDOM FOUR DIGITS NUMBER & STORE IT IN SESSION. 
    $numero = $_SESSION['numero'] = rand(1000, 9999); 
?> 
<html> 
<body> 
    <center> 
     <h2>Agregar entradas a diccionarioie</h2> 
     <b>Código: </b><big><?php echo $numero; ?></big><p> 
     <form name="form" method="post" action=""> 
      <input title="LEMA " size="30" type="text" name="lema" autofocus><br> 
      <input title="TRADUCCIÓN " size="30" type="text" name="trad"><br> 
      <input title="CÓDIGO " size="30" type="text" name="password"><br> 
      Gracias por colaborar <input title=" ENVIAR " type="submit" value="•"> 
     </form> 
    </center> 
</body> 
</html> 
<?php } 

einfach sicher, dass Sie session_start() rufen vor jedem Ausgang (in Ihrem Fall des HTML-Dokument).

Hoffe diese Hilfe.

+0

♦ Risan Bagja Pradana ▬ Vielen Dank! Es funktioniert perfekt. Ich werde deinen Code studieren. Es wird auch für viele andere Anfänger nützlich sein. –