Jelszó készítő
Csináltam (volna) egy jelszó készítőt, de hiba üzenetet dob ki, hogy a 60. vagy a 48. sorban van hiba valami harminc másodperccel kapcsolatban(?).Mi az, ami miatt nem megy?
■ <?php
$kisbetűk = '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';
$nagybetűk = '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';
$számok = '0,1,2,3,4,5,6,7,8,9';
$írásjelek = '~,",\',+,-,%,/,\,|,=,(,),[,],{,},@,&,#,$,<,>,_,;, ';
$tömb[1] = $kisbetűk;
$tömb[2] = $nagybetűk;
$tömb[3] = $számok;
$tömb[4] = $írásjelek;
$kisbetűtlen[1] = $nagybetűk;
$kisbetűtlen[2] = $számok;
$kisbetűtlen[3] = $írásjelek;
$nagybetűtlen[1] = $kisbetűk;
$nagybetűtlen[2] = $számok;
$nagybetűtlen[3] = $írásjelek;
$számtalan[1] = $kisbetűk;
$számtalan[2] = $nagybetűk;
$számtalan[3] = $írásjelek;
for ($i = 0; $i < 30; $i ++) {
$kivont = $i - 1;
if ($i = 0) {
$faj = $tömb[array_rand($tömb)];
if ($faj = $kisbetűk) {
$jel = explode (',', $kisbetűk);
}
elseif ($faj = $nagybetűk) {
$jel = explode (',', $nagybetűk);
}
elseif ($faj = $számok) {
$jel = explode (',', $számok);
}
elseif ($faj = $írásjelek) {
$jel = explode (',', $írásjelek);
}
$jelszó[$i] = $jel[array_rand($jel)];
} elseif (strstr ($kisbetűk, $jelszó[$kivont])) {
$faj = $kisbetűtlen[array_rand($kisbetűtlen)];
if ($faj = $nagybetűk) {
$jel = explode (',', $nagybetűk);
}
elseif ($faj = $számok) {
$jel = explode (',', $számok);
}
elseif ($faj = $írásjelek) {
$jel = explode (',', $írásjelek);
}
$jelszó[$i] = $jel[array_rand($jel)];
} elseif (strstr ($nagybetűk, $jelszó[$kivont])) {
$faj = $nagybetűtlen[array_rand($nagybetűtlen)];
if ($faj = $kisbetűk) {
$jel = explode (',', $kisbetűk);
}
elseif ($faj = $számok) {
$jel = explode (',', $számok);
}
elseif ($faj = $írásjelek) {
$jel = explode (',', $írásjelek);
}
$jelszó[$i] = $jel[array_rand($jel)];
} elseif (strstr ($számok, $jelszó[$kivont])) {
$faj = $számtalan[array_rand($számtalan)];
if ($faj = $kisbetűk) {
$jel = explode (',', $kisbetűk);
}
elseif ($faj = $nagybetűk) {
$jel = explode (',', $nagybetűk);
}
elseif ($faj = $írásjelek) {
$jel = explode (',', $írásjelek);
}
$jelszó[$i] = $jel[array_rand($jel)];
}
echo $jelszó[$i];
}
?>
if ($i = 0) {Mivel minden
$i
értékét0
-ra, nem csoda. Így sose fejeződik be a ciklus.Nem állítom be
Jah == kell. :D
Így működik, de a számokat és a különleges írásjeleket nem használja fel. Miért?
http://realgameguides.com/jel/index.php
nem a megoldás...
1.) átláthatóbb
2.) nem fut le kismilliószor az explode!
Másik megközelítés
Kiváló
Azt hogyan adhatom meg neki, hogy ugyanolyan betűt, számot, írásjelet ne adjon ki kétszer, illetve hogy egymás után ne lehessen két kisbetű, két nagy vagy két szám?
Rádbízom
Annyi segítséget adok, hogy érdemesebb az előző típust letárolni, és csak azt ellenőrizni, hogy a mostani típus nem olyan típusú-e mint az előző. Ehhez érdemes tárolni a
$types
tömbben az elemek típusát, és ashuffle
helyett egy olyan összekeverést használni, ami megtartja a kulcsokat.shuffle
helyettashuffle
függvényt kell meghívni.Kösz!