Hilfe bei Zufallszahl

Raptor72

Mitglied
Hi Leute,

ich glaube ich sitze schon wieder zu lange am PC aber ich bekomme es einfach nicht hin wie ich es will.

Ich möchte mit mt_rand eine Zufallszahl generieren lassen, die als Sicherheitscode ausgegeben wird.
Der Benutzer soll diese Zahl dann eingeben und diese soll dann mit der Zufallszahl verglichen werden.
Ich denke das ist wieder mal ein kleiner Fehler aber ich finde ihn einfach nicht :(

PHP:
  <td align="left">
     <input name="sichercode" type="text" size="6" maxlength="5" style="background-color:#CCC" />
     <?php
	   $i = 0;
	   if($i < 1)
	   { 
	 	$a = mt_rand(1000,9999);
		$i++;
	   }
		echo "<input type='submit' readonly='readonly' disabled='disabled' value='".$a."' class='anmeldeweiter'>";
		$code = $a;	 
	 ?>

In dem anderen Script wollte ich diese dann abfragen, die PHP Datei weiter.php wird mit include in das Script eingefügt.

weiter.php
PHP:
    $sichercode = $_POST["sichercode"];
 if($code != $sichercode)
 {
 	   echo'<script type="text/javascript">alert ("Sicherheitscode nicht richtig !");</script>';
       echo'<script>history.back();</script>';
 }
 else
 {
	$username = trim(htmlentities($_POST["username"]));
	$password = trim(htmlentities($_POST["password"]));
	$password_repeat = trim(htmlentities($_POST["password_repeat"]));
	$mailadr = trim(htmlentities($_POST["mailadr"]));
	$geschl = $_POST["geschl"];

Danke schon im voraus :rolleyes:
 
Du willst also so eine Art Captcha bauen? Captchas haben die Eigenschaft

- das der einzugebende Wert auf keinen Fall direkt im Form eingetragen wird
- das der einzugebende Wert in der Session abgelegt wird


Aber um deine Frage zu beantworten: Der Submit-Button braucht einen Namen, unter dem er im Form ansprechbar ist, wenn du das tatsächlich so machen willst. Aber eigentlich sollte es wohl eher so ablaufen:

PHP:
<?php
session_start();
...
?>
  <td align="left">
     <input name="sichercode" type="text" size="6" maxlength="5" style="background-color:#CCC" />
     <?php
       $i = 0;
       if($i < 1)
       { 
         $a = mt_rand(1000,9999);
        $i++;
       }
        echo "<input type='submit' readonly='readonly' disabled='disabled' value='Absenden' class='anmeldeweiter'>";
        $_SESSION['securitycode']= $a;
     ?>

PHP:
session_start();
....
    $sichercode = $_POST["sichercode"];
 if($_SESSION['securitycode'] != $sichercode)
 {
        echo'<script type="text/javascript">alert ("Sicherheitscode nicht richtig !");</script>';
       echo'<script>history.back();</script>';
 }
 else
 {
    $username = trim(htmlentities($_POST["username"]));
    $password = trim(htmlentities($_POST["password"]));
    $password_repeat = trim(htmlentities($_POST["password_repeat"]));
    $mailadr = trim(htmlentities($_POST["mailadr"]));
    $geschl = $_POST["geschl"];
 
Hi Saftmeister,

ja genau, soll so eine Art Captcha sein nur damit man bei dem Formular keinen replizierenden Code eingeben kann.

Der User erhält nachdem er dieses Formular ausgefüllt hat noch eine Mail mit einem 16 stelligen Sicherheitscode wo er seine eMail Adresse mit bestätigt und dann kann er erst weitermachen.
 
Dann wäre auch Session die falsche Wahl und dir bleibt nur noch der Weg über DB oder File, wobei DB sinnvoller wäre, wenn dort eh schon Benutzerdaten abgelegt werden. Füge einfach eine weitere Spalte der Benutzer-Tabelle hinzu und füge den Zufallsschlüssel dort ab. Wenn der Benutzer seinen Schlüssel per Mail bekommen hat, ihn in das Formular einträgt, ließt du den Schlüssel wieder aus der DB aus und vergleichst.
 
Klar, mit dem langen Schlüssel der per Mail kommt habe ich das auch vor das er in der DB abgespeichert wird, aber wie mache ich das bei der ersten Eingabe wie oben mit dem kleinen Sicherheitscode der ja gegen Autobots sein soll ?

So sieht der ganze Code aus, unten ist wie gesagt die "kleine" Code Abfrage und wenn der User dann diesen Code richtig eingegeben hat wird er erst eine Mail mit dem langen Sicherheitscode bekommen.

Ganz vorn im Script ist natürlich SESSION_START();


PHP:
<table class="anzeigebodie" cellpadding="10" >
  <tr>
      <td class="willkommen" colspan="2">Willkommen auf Homepage 
      </td>
  </tr>
  <tr>
      <td align="center" colspan="2">
       <script>
          var d = new Date()
		  var Monat = new Array("Januar","Februar","M&auml;rz","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember");
		  document.write(d.getDate())
	      document.write(" ")
	      document.write(Monat[d.getMonth()])
	      document.write(" ")
	      document.write(d.getFullYear())
	   </script>
      </td>
  </tr>
  <tr>
  <td colspan="2" align="center" class="text3"><u><b>Neu anmelden !</b></u>
  </td>
  </tr>
<form action="" method="post" name="register">  
  <tr>
    <td width="33%" align="center">
      <label for="Username">Username :</label>
    </td>
    <td align="left">
        <input name="username" type="text" id="username" size="30" maxlength="20" style="background-color:#CCC" value="<?php echo $_POST["username"]; ?>"/>
        <input type="submit" name="pruefen" value="pr&uuml;fen" class="anmeldeweiter"  style="width:50px;height:20px"/>
  <?php
  	if(isset($_POST["pruefen"]))
	{
		include("pruefen.php");
	}
  ?>

    </td>
  </tr>
  <tr>
    <td width="33%" align="center">
      <label for="password">Passwort :</label>
    </td>
    <td align="left">
      <input name="password" type="password" id="password" size="30" maxlength="50" style="background-color:#CCC" />
    </td>
  </tr>  
  <tr>
    <td width="33%" align="center">
        <label for="password_repeat">Passwort wiederholen :</label>
    </td>
    <td align="left">
        <input name="password_repeat" type="password" id="password_repeat" size="30" maxlength="50" style="background-color:#CCC" />
    </td>
  </tr>
  <tr>
    <td width="33%" align="center">
        <label for="mailadr">E-Mail :</label>
    </td>
    <td align="left">
        <input name="mailadr" type="text" id="mailadr" size="30" maxlength="50" style="background-color:#CCC" value="<?php echo $_POST["mailadr"]; ?>"/>
    </td>
  </tr>
  <tr>
  <td width="33%" align="center">
    <label for="sichercode">Bitte Sicherheitscode eingeben :</label>
  </td>
  <td align="left">
     <input name="sichercode" type="text" size="6" maxlength="5" style="background-color:#CCC" />
     <?php
	   $i = 0;
	   if($i < 1)
	   { 
	 	$a = mt_rand(1000,9999);
		$i++;
	   }
		echo "<input type='submit' readonly='readonly' disabled='disabled' value='".$a."' class='anmeldeweiter'>";
		$code = $a;	 
	 ?>
  </td>
  </tr>

  <tr>
    <td align="center" colspan="2">
        <input type="submit" name="weiter" class="anmeldeweiter" value="weiter" />
        <input type="reset" name="loeschen" class="anmeldeweiter" value="doch nicht!" />
    </td>
  </tr>

Und das hier ist die Abfrage ob eben alles eingegeben wurde und auch richtig ist, da muß ich nur noch die Mailbenachrichtigung einfügen.


PHP:
<?php

$sichercode = $_POST["sichercode"];

 if($code != $sichercode)
 {
       echo'<script type="text/javascript">alert ("Sicherheitscode nicht richtig !");</script>';
       echo'<script>history.back();</script>';
 }
 else
 {
	$username = trim(htmlentities($_POST["username"]));
	$password = trim(htmlentities($_POST["password"]));
	$password_repeat = trim(htmlentities($_POST["password_repeat"]));
	$mailadr = trim(htmlentities($_POST["mailadr"]));
	
	if($password != $password_repeat OR $password == "" OR $password_repeat == "")
	{
	  echo'<script type="text/javascript">alert ("Fehler bei den Passwoertern !");</script>';
      echo'<script>history.back();</script>';
	}
  else
  {

  $password = md5($password);
  }
  
   $eintrag = "INSERT INTO `mitglieder` (`username`, `password`, `mailadr`) VALUES ('$username', '$password', '$mailadr')";
   $eintragen = mysql_query($eintrag);
   
  /* Weiterleitung zur Sicherheitscode abfrage */
 }
?>
 
Zuletzt bearbeitet:
Dann also doch über Session. Aber warum schreibst du den Sicherheitscode als Value auf den Button? Damit ist er einem Bot auch bekannt. Wenn du es richtig machen willst, müsstest du es in ein Bild packagen und den Wert in die Session eintragen.
 
Weil ich keine Ahnung habe wie das andere funktioniert oder wie ich es realisieren kann.

Werde mir aber so ein Tut suchen wo sowas erklärt wird wie das geht.
 
Zurück