Hallo,
Ich hoffe ihr könnt mir weiter helfen.
Finde leider nicht das richtige bei google.
Und zwar möchte ich, das mir 10 zahlen a 4 stellen per zufall erstellt werden.
Diese sollen in der datenbank in _pins gespeichert werden.
Sollten da noch nummern gespeichert sein. Müssen die neuen anders lauten.
Es soll eine Art Pin-module werden.
Hat jemand zufällig ein tutorial mal gesehen oder könnte mir dabei helfen?
Vielen Dank im vorraus.
erstmal, mit der Beschränkung auf eine 4-stellige Zahl schränkst du prinzipiell erstmal die Möglichkeiten deines Moduls stark ein... aber das nur am Rande...
ein Lösung wäre, die Startbedingung für rand, also srand($x), immer gleich zu lassen ( $X = hardcodieren), und auch immer vor dem Erzeugen einer Zufallszahl aufzurufen.
dann rand mit den parametern rand(0,9999) aufrufen, dann zu einem 4-stelligen String mit ggf. vorangestelten nullen konvertieren.
um sicherzustellen, dass du immer eine neue Zahl erzeugst, bleibt dir wahrscheinlich nichts anderes übrig, als die Anzahl der bereits vorhandenen Zahlen zu ermitteln und dann diese Anzahl + 1 Zufallszahlen in einer Schleife noch einmal zu durchlaufen. Die letzte Zahl ist dann deine neueste und nicht gleich der vorhergehenden Zahlen. Vor der Schleife müsste dann dein srand($x) stehen...
m.E. ist aber eine Erzeugung einer eindeutigen ID besser, sicherer und schneller, auch wenn dieses keine Zahlen sind....
hallo, mit dem mt_rand hab ich gelesen, das es gerade beim durchlaufen von schleifen zu problemen kommt und öfters die gleiche zahl erzeugt wird.
Warum brauchst du unbedingt ne 4-stellige Zahl ?
kannst auch beim ersten Aufruf ein Array mit 10.000 Einträgen von o bis 9999 erzeigen, dann durch spätere Aufrufe ein zufälliges Element rauslesen und dieses dann aus dem Array entfernen. Nachteil: du musst das Array irgendwie speichern...
for($i = 0; $i < 10; $i++)
{
$Zufallszahl = rand(1000, 9999);
echo $Zufallszahl.", ";
}
meine 4 stelligen zahlen werden erstellt, nur blick ich nicht so ganz wie ich verhindere, das bereits gespeicherte zahlen und doppelte pins verhindere
Probier es mal hiermit
<?php
//setzten von Vars
$testpin_vorhanden='';
// Erstelle Zufallszahl
function CreatePin(){
$Zufallszahl = rand(1000, 9999);
#$Zufallszahl = 1234;
return $Zufallszahl;
}
// Prüfe ob Pin vorhanden ist
function CheckPin(){
global $prefix,$Zufallszahl;
$testz = CreatePin();
$result = sql_query("SELECT count(pin) FROM " . $prefix . "_pins where pin='$testz'");
list($testpin ) = sql_fetch_row($result);
if($testpin >= "1")
{
//setzte Abruch Var
$testpin_vorhanden = "1";
return $testpin_vorhanden;
}
}
function PIN(){
if(CheckPin() == "1")
{
// Erneut Zufallszahl erzeugen und testen
echo "ist gleich";
$testz = CreatePin();
if(CheckPin() == "1")
{
PIN();
}
}
else{
// In DB schreiben
echo "nicht gleich";
}
}
PIN();
?>
Also das ganze funktioniert so:
- function CreatePin() erzeugt die Zufallszahl
- function CheckPin() überprüft ob die Zufallszahl bzw der NEU PIN schon in der DB ist
- function PIN() wird solange ausgeführt bis ein PIN nicht in der DB vorkommt.
Ich hoffe es paßt so