zufälliges Passwort - erweitert

uwee

Erfahrenes Mitglied
Hallo!

ich habe mir ein bisschen die Tutorials durchgeschaut und eines für zufällige Passwortgenerierung gefunden:
http://www.tutorials.de/forum/showthread.php?t=6887

da ich gerne selbst festgelegen möchte, wie lang das pw sein woll, habe ich mir ein formular gebaut, da ein INPUT-Feld reingesetzt und per Button soll die Zahl an die Ausgabeseite geschickt werden.
Soweit sogut. es funktioniert nur leider nicht.
in der Variable steht zwar die eingegebene zahl (mit echo getestet) aber nach dem befehl
echo getpass();
kommt leider nichts

ich habe das echo noch um
or die (mysql_error());
erweitert, aber es bleibt bei KEINER ausgabe.

im tut steht folgender quellcode:
PHP:
function getpass() { 
    $newpass = ""; 
    $laenge=10; 
    $string="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; 

    mt_srand((double)microtime()*1000000); 

    for ($i=1; $i <= $laenge; $i++) { 
        $newpass .= substr($string, mt_rand(0,strlen($string)-1), 1); 
    } 
     
    return $newpass; 
}

ich habe dies am anfang nur um etwas erweitert:
PHP:
$laenge_holen=($_POST['name']);
[-]
      $laenge=$laenge_holen; 
[-]

also an sich... hab ich keine ahnung, warum das nicht funktioniert
 
PHP:
function getpass($laenge=10) {
    $newpass = "";
    $string="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

    mt_srand((double)microtime()*1000000);

    for ($i=1; $i <= $laenge; $i++) {
        $newpass .= substr($string, mt_rand(0,strlen($string)-1), 1);
    }
     
    return $newpass;
} 

$pass = getpass($_POST['name']);
echo $pass;

Zur Erklaerung: Du gibst der Funktion einfach $laenge als Parameter und zugleich als Standard, wenn $laenge nicht gesetzt wird, 10. Danach rufst du einfach ueber deinen POST Request die Funktion getpass() auf und hast somit den Rueckgabewert in $pass.

Cheers!
 
Ich verwende für sowas die Pear Klasse "Password".

Da kannst du dir mit nur 1ner Zeile Code ein Passwor generieren lassen, wobei
du angeben kannst wie lange es sein soll, ob es nur Zahlen oder nur Buchstaben
oder beides beinhalten soll.

mfg

Ultra
 
hat das vl. irgendwas mit dieser zeile zu tun?

PHP:
for ($i=1; $i <= $laenge; $i++) { 
        $newpass .= substr($string, mt_rand(0,strlen($string)-1), 1); 
    }
 
hmm, ich hab jetzt einfach mal nur das weggenommen:
or die(mysql_error());

jetzt gehts... auch die richtige länge.
nun möchte ich noch festlegen, was genutzt werden darf:

große Buchstaben, kleine Buchstaben, Ziffern, Zeichen.
habe alles in variablen reingeladen. nun stehe ich vor dem Problem, dass ich nicht weiss, wie ich die innerhalb einer anderen Variable verbinden soll:
PHP:
$string="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

in $string will ich jetzt hintereinander, ohne leerzeichen die Variablen $nums, $gr, $kl und $zif haben.
wie muss ich die verbinden?
mit + oder & oder , oder sonst was?

wenn mit +, dann kommen nur 0er raus
 
Mit nem Punkt, aber das ist alles im PHP Manual nachzulesen, welches du sicher nicht gelesen hast.
PHP:
$string = $nums.$gr.$kl.$zif;
 
hab ich gelesen ;)
nachdem ich das das letzte mal schon zu hören bekommen hab.
hab ich aber probiert... kommen nur 0er... genau die anzahl, die in laenge festgelegt ist,.
 
Weiss nicht ob das mit dem grossen switch ne tolle Sache ist, aber tut genau das, was du moechtest.

PHP:
<?php
function getpass($laenge=10, $mode=7) {
  /* 
    $mode 1: Kleinbuchstaben
          2: Grossbuchstaben
          3: Klein- und Grossbuchstaben
          4: Zahlen
          5: Kleinbuchstaben & Zahlen
          6: Grossbuchstaben & Zahlen
          7: All in One
  */
  
  $newpass = ""; 
  $lower   = "abcdefghijklmnopqrstuvwxyz";
  $upper   = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  $digits  = "0123456789";
  
  switch($mode) {
    case 1: $string = $lower;               break;
    case 2: $string = $upper;               break;
    case 3: $string = $lower.$upper;        break;
    case 4: $string = $digits;              break;
    case 5: $string = $lower.$digits;       break;
    case 6: $string = $upper.$digits;       break;
    case 7: $string = $lower.$upper.$digit; break;
  }
  
  mt_srand((double)microtime()*1000000); 
  for ($i=1; $i <= $laenge; $i++) { 
      $newpass .= substr($string, mt_rand(0,strlen($string)-1), 1); 
  } 
    
  return $newpass; 
} 

echo getpass(20, 4);

?>

Cheers!
 
Zurück