. .
pragmaMx Support Forum 25 Mai 2012, 23:28:19 *
Willkommen Gast. Bitte einloggen oder registrieren.


Einloggen mit Benutzername und Passwort
News:
Brauchen Sie Hilfe? Bitte nutzen Sie unsere Suchfunktion bevor Sie Beiträge oder Fragen ins Board schreiben! Viele Fragen wurden bereits gestellt und beantwortet. Danke!
 
Übersicht Hilfe Forenregeln / Boardrules
 
Suche
Seiten: [1]   Nach unten
Drucken
Autor Thema: 4 stellige Zufallszahlen  (Gelesen 918 mal)
0 Mitglieder und 2 Gäste betrachten dieses Thema.
lausbub
Spezialist
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 641

lausbub


WWW
« am: 19 Dezember 2010, 19:49:25 »

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.
Gespeichert

PHP Version: 5.2.11
MySql Version: 5.0.51a
Server-Version: Apache/2.2.8 (Linux/SUSE)
Pragma 1.12
TerraProject
Administrator
******
Offline Offline

Geschlecht: Männlich
Beiträge: 501

TerraProject


WWW
« Antworten #1 am: 19 Dezember 2010, 20:02:53 »

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....


Gespeichert

g

TerraProject
...::: TECMU :::... TerraProject

Kein Support über PN, Mail oder ICQ!
Bitte die Fragen im Forum stellen, nur so helfen die Antworten auch den anderen Usern.
Bitte auch die Boardsuche nicht vergessen, oft ist genau dein Problem schon an anderer Stelle gelöst worden!
lausbub
Spezialist
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 641

lausbub


WWW
« Antworten #2 am: 19 Dezember 2010, 20:14:14 »

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.
Gespeichert

PHP Version: 5.2.11
MySql Version: 5.0.51a
Server-Version: Apache/2.2.8 (Linux/SUSE)
Pragma 1.12
TerraProject
Administrator
******
Offline Offline

Geschlecht: Männlich
Beiträge: 501

TerraProject


WWW
« Antworten #3 am: 19 Dezember 2010, 20:34:46 »

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...
Gespeichert

g

TerraProject
...::: TECMU :::... TerraProject

Kein Support über PN, Mail oder ICQ!
Bitte die Fragen im Forum stellen, nur so helfen die Antworten auch den anderen Usern.
Bitte auch die Boardsuche nicht vergessen, oft ist genau dein Problem schon an anderer Stelle gelöst worden!
lausbub
Spezialist
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 641

lausbub


WWW
« Antworten #4 am: 19 Dezember 2010, 22:42:59 »

Code: [Select]  
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
Gespeichert

PHP Version: 5.2.11
MySql Version: 5.0.51a
Server-Version: Apache/2.2.8 (Linux/SUSE)
Pragma 1.12
pyr0
weiss mehr
****
Offline Offline

Geschlecht: Männlich
Beiträge: 433

pyr0


WWW
« Antworten #5 am: 20 Dezember 2010, 12:20:26 »

Probier es mal hiermit

Code: [Select]  
<?php

//setzten von Vars
$testpin_vorhanden='';

// Erstelle Zufallszahl
function CreatePin(){
$Zufallszahl rand(10009999);
#$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
Gespeichert
Seiten: [1]   Nach oben
Drucken
 
Gehe zu:  

Powered by SMF 1.1.16 | SMF © 2011, Simple Machines
design by hENNE, layout based on YAML