Sponsor-Board.de
PHP Random Frage

+- Sponsor-Board.de (https://www.sponsor-board.de)
+-- Forum: Community (/forumdisplay.php?fid=56)
+--- Forum: Hilfe (/forumdisplay.php?fid=102)
+---- Forum: Scripting (/forumdisplay.php?fid=108)
+---- Thema: PHP Random Frage (/showthread.php?tid=48617)


PHP Random Frage - Dream-Code - 06.06.2014 20:28

Moin,

ich sitze gerade an einem winzigen Script (nein, kein Passwortgenerator, auch wenn man das denken könnte ^^) und nutze da zur Generierung von bestimmten Strings folgende Funktion:

PHP-Code:
function random($length)
{
    
$random_string "";
    
$valid_chars "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

    
$num_valid_chars strlen($valid_chars);

    for (
$i 0$i $length$i++)
    {
        
$random_pick rand(1$num_valid_chars);
        
$random_char $valid_chars[$random_pick-1];
        
$random_string .= $random_char;
    }
    return 
$random_string;


Diese wird dann in einer for-Schleife aufgerufen, aber da kommt immer der gleiche String raus. Woran liegt das? Ich habe bisher nicht wirklich tiefgründig mit Zufallszahlen in PHP gearbeitet, daher habe ich leider keinen richtigen Ansatz.

Danke!


RE: PHP Random Frage - tkausl - 06.06.2014 20:34

Du musst mit [Link: Registrierung erforderlich] einen seed setzen um bessere Zufalszahlen zu bekommen. Gleicher Seed -> gleiches ergebnis.


RE: PHP Random Frage - Dream-Code - 06.06.2014 20:43

Hmm, so in der Art dachte ich mir das, in Java setzt man auch immer erst nen Seed nur ich hatte die Option in PHP nicht gefunden. Gibt es sowas wie "System.currentTimeMillis()" in PHP auch, also etwas, was die aktuelle Systemzeit in Millisekunden als Rückgabe hat? Das wäre doch ein guter Seed Biggrin


RE: PHP Random Frage - tkausl - 06.06.2014 20:45

microtime


RE: PHP Random Frage - VarmintLP - 06.06.2014 21:05

Sowas musste ich auch mit php machen und kann dir das vlt geben

Mein Script generiert aber ein Passwort und du kannst aussuchen wieviele zeichen es haben soll, habe es mit Switches geschrieben

switch(Variable) <-- Wird abgefragt
case: Wert von Variable;
Auszuführende Aktion/en
break;

ist viele zeilen lang aber funktioniert


RE: PHP Random Frage - Dream-Code - 06.06.2014 21:09

Das bringt mich ja in dem Zusammenhang nicht wirklich weiter. Ich habe jetzt in der Funktion oben folgende Zeile eingefügt:

Code:
srand(microtime(TRUE));


Leider kommen trotzdem immer die gleichen Strings raus. Ideen?


RE: PHP Random Frage - tkausl - 06.06.2014 21:17

Dream-Code schrieb:
Leider kommen trotzdem immer die gleichen Strings raus. Ideen?


Über mehrere Seitenaufrufe hinweg? Den seed darfst du nur einmalig setzen, nicht jedesmal wieder, wenn du nämlich dann wieder den gleichen seed setzt bekommst du auch wieder das gleiche ergebnis.


RE: PHP Random Frage - Dream-Code - 06.06.2014 21:23

Naja, da die Funktion ja logischerweise (durch Rechenzeit) mit einigen Millisekunden Abstand aufgerufen wird, dürfte der Seed ja jedes Mal anders sein. Es handelt sich an sich immer nur um einen Seitenaufruf, bei dem aber diese Funktion mehrmals hintereinander in einer Schleife genutzt wird.


RE: PHP Random Frage - tkausl - 06.06.2014 21:30

Dream-Code schrieb:
Naja, da die Funktion ja logischerweise (durch Rechenzeit) mit einigen Millisekunden Abstand aufgerufen wird, dürfte der Seed ja jedes Mal anders sein.


Vertue dich da mal nicht, ne Millisekunde ist ne ganze Menge.

[Link: Registrierung erforderlich]
Schau dir mal die Kommentare an, dort sind einige gute Beispiele.


RE: PHP Random Frage - Dream-Code - 06.06.2014 21:37

Moin,

egal welches der Beispiele ich teste, es will nicht funktionieren. Da der Code an sich nicht unbedingt Public sein soll, werde ich dir tkausl wenn das in Ordnung ist einfach mal eine PN schreiben mit dem kompletten Code, vielleicht kannst du mir ja helfen. Scheinst immerhin Ahnung von PHP zu haben im Gegensatz zu mir ;D


RE: PHP Random Frage - tkausl - 06.06.2014 21:43

Kannst du gerne tun, schreib dann bitte gleich deine Entwicklungsumgebung (XAMPP?) und PHP-Version mit rein.


RE: PHP Random Frage - Sysix - 06.06.2014 21:49

dein browser cachst die Seite.
Da musst du an der htaccess die einstellungen ändern für die Seite Smile


RE: PHP Random Frage - Dream-Code - 06.06.2014 21:53

Nein, das liegt nicht am Cache. Die Strings an sich sind bei jedem Aufruf verschieden, nur die Strings im Schleifendurchlauf sind immer gleich, obwohl die eben verschieden sein sollten.


RE: PHP Random Frage - Sysix - 06.06.2014 21:56

zeig mal bitte den code der die funktion random() aufruft


RE: PHP Random Frage - Dream-Code - 06.06.2014 21:58

Hat sich soeben erledigt, nachdem ich tkausl meinen kompletten Code geschickt habe, konnte der mir ganz schnell sagen was falsch war.

Ich habe den Array-Index in Java-Syntax genutzt (array[i]) statt die PHP-Syntax (array[$i] zu nehmen - hab Java wohl im Blut ^^

Danke trotzdem an alle, die helfen wollten.