Alpha-numerischer code erzeugen

Marco-P

Erfahrenes Mitglied
Hallo Leute,

ich will da so ein kleines Spiel basteln.
Und zwar kennt doch jeder diese Code aktion von CokaCola. da steht ein code im Deckel wenn man denn irgendwo eingibt dann bekommt man was geschenkt.

Ich denke mal man erzeigt eine Datenbank erstellt dort eine Tabelle mit denn Codes und hinterlegt was wer bekommt. bzw kann dann halt denn eingegebeen Code mit dem in der Tabelle abgleichen und wenn er existiert dann wird man weitergeleitet.

Aber wie zum teufel generiere ih soleh codes, dahte da an einen 10 stelligen code.

Der code darf sich halt niht wiederholen. Und sollte nicht gerade
1
2
3
4
5
6
.
.
.
1000
1001
1002
usw


sein, das wäre ja zu einfach.

MFG Marco
 
Einfaches Code erstellen.
PHP:
    $laenge = 10; // zehnstelliger Code

    $code = ''; // Code Variable
    
    $zeichen = range(0,9); // Array mit den Ziffern 0-9

    shuffle( $zeichen ); // Array mischen
    
    for( $i = 0; $i < $laenge; $i++ ) // Schleife 10mal durchlaufen
    {
        
        $code .= $zeichen[$i]; // Codevariable füllen.
        
    }
Das Datenbankfeld für den Code stellst du auf Unique. Wenn du einen Code einfügen willst, der schon in der Datenbank steht, wird ein Fehler ausgegeben.
Also musst du in der Schleife, in der du die Codes in die Datenbank schreibst prüfen, ob es einen Fehler gab (mysql_errno z.B.). Gibt es einen fehler -> neuen Code versuchen, ansonsten -> Code in Datenbank schreiben.
 
Hi.
Also ich würde das in etwa so machen..
PHP:
for($i=0; $i<=10; $i++){
   $zahl = rand(0,10);
   echo $zahl;
   $code = $code.$zahl;
   }
   
   
$sql = "SELECT code FROM db WHERE code='$code'";
$anz = mysql_numrows($res);
if(mysql_query($sql)){
  for($i=0; $i<=10; $i++){
     $zahl = rand(0,10);
     echo $zahl;
     $code = $code.$zahl;
     }
  }
  else{
      echo $code;
      }

Also erst den Code generieren, dann mit den vorhandenen in der Datenbank abgleichen, und wenn es keinen gleichen Eintrag gibt, gibst Du den Code aus, bzw. schreibst Ihn mit Benutzerangaben etc. in die DB.

Gruß Webrabbit
 
Also da kommt das raus

4
47
476
4765
47653
476532
4765328
47653280
476532809
4765328091

aber ich will ganz viele 10 stellige codes.
das ist ja nicht ganz so das richtige.
 
Hi.
Also ich würde das in etwa so machen..
PHP:
for($i=0; $i<=10; $i++){
   $zahl = rand(0,10);
   echo $zahl;
   $code = $code.$zahl;
   }
   
   
$sql = "SELECT code FROM db WHERE code='$code'";
$anz = mysql_numrows($res);
if(mysql_query($sql)){
  for($i=0; $i<=10; $i++){
     $zahl = rand(0,10);
     echo $zahl;
     $code = $code.$zahl;
     }
  }
  else{
      echo $code;
      }

Also erst den Code generieren, dann mit den vorhandenen in der Datenbank abgleichen, und wenn es keinen gleichen Eintrag gibt, gibst Du den Code aus, bzw. schreibst Ihn mit Benutzerangaben etc. in die DB.

Gruß Webrabbit
Wenn man tausende Codes erstellt ist das aber sehr langsam.
Und schau dir mal die Funktionsweise von rand() an.

@Threatersteller, mein Schnipsel gibt immer einen 10stelligen Code aus, ich hab das gerade getestet.
 
das ist jetzt meine lösung
PHP:
	$laenge = 10; // zehnstelliger Code
	$menge = 10;
    $code = ''; // Code Variable
    
    $zeichen = range(0,9); // Array mit den Ziffern 0-9

    
    for( $k = 0; $k < $menge; $k++)
	{
    for( $i = 0; $i < $laenge; $i++ ) // Schleife 10mal durchlaufen
    {
        shuffle( $zeichen ); // Array mischen
        $code .= $zeichen[$i]; // Codevariable füllen.
        
    }  
	echo $code;
	echo "<br>";
	$code = "";
	}

danke nochmal.
 
Naja ich sagte ja in etwa..
das bei Dir eine ganze Reihe zahlen rauskommen liegt daran, dass in der for-Schleife noch "echo $zahl" drin steht...
Du musst nur $code ausgeben. Wo ich Loomes recht gebe, ist mit der Datenbank und dem Unique schlüssel. Das geht schneller.
 
Mit rand(0,10) bekommst du nicht immer 10 Ziffern zurück. Sondern auch mal 11, 12, 13...
Richtig wäre rand(0,9).
 
Ein Array zu mischen um dann ein fixes Element auszuwählen ist aber kostenintensiver als ein zufälliges auszuwählen.
 
Zurück