Kombination von Zufallszahlen und Buchstaben

Das brauche ich für eine Kunden.
Soll sowas wie ein "Gewinn-Code" werden.

Ähnlich wie bei diesen Codes die man per SMS an irgendjemanden schicken kann und man dann ganz tolle Sachen bekommt.
Deswegen sollte der Code auch nur einmal existieren.
Sorry, habe mich da unglücklich ausgedrückt. Aber wie schon richtig vermutet darf der ganze string nur einmal vorkommen und nicht die Zahlen im string.

OK. Das erzeugen ist jetzt nicht mehr das Problem.
Muss das ganze in einer Mysql-DB haben.

Habe da jetzt eine einfache Abfrage gemacht, ob es den aktuellen string in der DB gibt.
Wenn ja, fang von vorne an, wenn nein trage den String ein.

Das ganze in einer for-Schleife.
Soweit funktioniert das ganze jetzt.
ABER: bei 32768 Zeilen ist schluss! :(
Kann das Script jetzt aufrufen wie ich will... er addet keine keys mehr :(
Gibt es da ein Limit?
Wenn ja, wie erhöhe ich es?
Mache das alles hier an meinem PC mit xampp. Kann an den configs also schrauben wie ich will.

Danke
droni
 
soweit ich weis gibt es ein Zeitlimit und ei Größenlimit für scripts
schau im xampp\php verzeichnis nach einer php.ini und php5.ini
da stehen die limits drin
Code:
max_execution_time = 60    
max_input_time = 60
memory_limit = 16M

Die hauptfrage is, liegts am php script oder der datenbank.
Wenns am Script liegt, bau einfach ein das er nach 20000 keys die Seite neu aufruft.
Pass aber auf das du keine Endlosschleifen programmierst.
 
droni hat gesagt.:
Das brauche ich für eine Kunden.
Soll sowas wie ein "Gewinn-Code" werden.

Ähnlich wie bei diesen Codes die man per SMS an irgendjemanden schicken kann und man dann ganz tolle Sachen bekommt.
Deswegen sollte der Code auch nur einmal existieren.
Sorry, habe mich da unglücklich ausgedrückt. Aber wie schon richtig vermutet darf der ganze string nur einmal vorkommen und nicht die Zahlen im string.

OK. Das erzeugen ist jetzt nicht mehr das Problem.
Muss das ganze in einer Mysql-DB haben.

Habe da jetzt eine einfache Abfrage gemacht, ob es den aktuellen string in der DB gibt.
Wenn ja, fang von vorne an, wenn nein trage den String ein.

Das ganze in einer for-Schleife.
Soweit funktioniert das ganze jetzt.
ABER: bei 32768 Zeilen ist schluss! :(
Kann das Script jetzt aufrufen wie ich will... er addet keine keys mehr :(
Gibt es da ein Limit?
Wenn ja, wie erhöhe ich es?
Mache das alles hier an meinem PC mit xampp. Kann an den configs also schrauben wie ich will.

Danke
droni

Hi,

hast du überprüft, ob auch 500.000 Zeilen in der DB vorhanden sind?

Wenn Schluss ist, was kommt als Info zurück? Die Zahl, ein Error oder was genau?
 
Hier mal der Code:

PHP:
<?php

include('connect.php');
$buchstaben = array(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z);

srand ((double)microtime()*1000000);
for($i=1; $i<=50000; $i++)
{

	$rand = rand(0,25); 
	$rand1 = rand(0,25);
	$rand2 = rand(0,9);
	$rand3 = rand(0,9);
	$rand4 = rand(0,9);
	$rand5 = rand(0,25);
	$rand6 = rand(0,9);
	$rand7 = rand(0,9);
	$rand8 = rand(0,9);
	$string = "$buchstaben[$rand]$buchstaben[$rand1]$rand2$rand3$rand4$buchstaben[$rand5]$rand6$rand7$rand8";
	
	$is_da_abf = "SELECT * FROM zufall WHERE zufall_zahl='$string'";
	$is_da_res = mysql_query($is_da_abf) or die(mysql_error());
	$is_da = mysql_num_rows($is_da_res);
	
	if($is_da=="0")	
	{
		$insert_bef = "INSERT INTO zufall (zufall_id, zufall_zahl) VALUES ('', '$string')";
		$insert_res = mysql_query($insert_bef) or die(mysql_error());
	}
}
echo "fertig";
?>


Es kommt eigentlich gar nichts.
Er fügt nur keine mehr an. Nach längerem rödeln kommt das "fertig" und das wars.
 
Zuletzt bearbeitet:
Code:
for($i=1; $i<=50000; $i++)
du führst die Schleife zwar 50000x aus, das bedeutet jedoch nicht, dass 50000 Zeilen eingefügt werden, da dein Zähler auch bei Dopplern weiterläuft.

Probiers mal mit ner while-Schleife nach der Art wie in meinem Vorschlag, als Bedingung nimmst du halt die Anzahl der bereits gespeicherten Datensätze.
 
das habe ich schon versucht.
wenn ich vorher abfrage, wieviel Datensätze drin sind und das mit ner while-Schleife mache, bekomme ich nen timeout.

Du hast natürlich recht, was das mit den 50000 angeht, aber wenn ich das Script erneut aufrufe, müsste er ja eigentlich weiter machen. Aber da passiert nix mehr.
Kann *F5* drücken wie ich lustig bin. Er rödelt sich einen zurecht, addet aber keine einzige Zeile in der Datenbank.

In Excel habe ich ja auch das 65536 Zeilen Limit. Wenn ich das durch 2 Teile komme ich o wunder auf 32768. Daher vermute ich halt, dass es ein Linit der DB ist.
 
Also es gibt mehrere Möglichkeiten wo das Problem liegt.

Zum einen ist eine while() - Schleife besser und du könntest bereits in dieser auch für die Insert - Anweisung einen bzw. mehrere Zwischenstop's einlegen, was ohnehin erforderlich ist.

In aller Regel wird ein Insert nach rund 1.500 / 2.000 Zeilen wegen Timeout abgebrochen (je nachdem, wie groß die Datensätze sind). Du solltest also die Anzahl der Zeilen / 1500 und somit ein Unterbrechnung und gleichzeitig einen Neustart der Schleife einbinden.

Dann ist wichtig, wie die DB-Tabelle aufgebaut ist. Da die Verschlüsselungslänge festgelegt ist (ist davon auszugehen?) gleich ist, ist eine führende ID immer oder in der Regel von Vorteil.

Allerdings sind die Spaltenatribute noch wichtig. Wenn diese nicht korrekt sind, bekommst du auch keine 50.000 Zeilen rein.
 
ich habe nur eine tabelle mit id (Integer, auto-increment) und die zahl (text)

Was meinst du mit zwischenstops?
 
Bist du sicher, dass zufall_id nicht SMALLINT ist...das würde die Sache erklären, da dann keine neue ID mehr erzeugt werden kann....denn der Wertebereich von SMALLINT geht bis......rate mal :-)
 
So sieht es wohl aus.....

Bzgl. zweiter Spalte - warum ein text Atribut? sind die Zeichen der Schlüssel länger als 255? Da ginge auch ein tinytext, damit auch eine führende 0 übernommen wird.

bzgl. Zwischenstop:
wenn du eine INSERT Anweisung stellst, wird diese ebenfalls nach 60 Sekunden von der Datenbank zurückgewiesen. Timeout eben.

Deshalb solltest du einen Zwischenstop berücksichtigen.
 
Zurück