Un piccolo chiarimento su una funzione...

Salve a tutti! Come qualcuno avra' gia' notato mi sto dando da fare per imparare questo benedetto PHP! Ho trovato un tutorial, a mio parere molto completo, che mi insegna a creare uno script di login molto completo e ben spiegato, infatti spiega in maniera molto approfondita ogni singolo passaggio!

Nello svolgimento dello script utilizza pero' delle funzioni esterne che nn vengono spiegate, o meglio viene fornito il codice ma nn ci sono parole a riguardo, quindi vi chiedevo cortesiemente se avreste voglia di analizzare insieme a me il seguente script che serve per la generazione di stringhe casuali.

function random_string($type = 'alnum', $len = 8)
{
switch($type)
{
case 'alnum':
case 'numeric':
case 'nozero':
switch($type)
{
case 'alnum' : $pool = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
break;

case 'numeric' : $pool = '0123456789';
break;

case 'nozero' : $pool = '123456789';
break;
}
$str = '';
for ($i = 0; $i < $len; $i++)
{
$str .= substr($pool, mt_rand(0, strlen($pool) -1), 1);
}
return $str;
break;
case 'unique' : return md5(uniqid(mt_rand()));
break;
}

Premetto che ho analizzato tutte le funzioni PHP presenti in questo script, infatti il mio file e' pieno di commenti che qui ho evitato di postare per ovvi motivi di spazio :P

Ma ci sono piccole lacune che nn riesco a capire...

Ad esempio perche' lo sviluppatore ha scritto i primi tre case lasciandoli vuoti? Nel senso leggendo la documentazione dello switch() viene detto che in caso un campo case sia vuoto si passa senza indugi all'analisi di quello successivo; ma allora perche' lo a scritto???

E poi volevo una dritta per il case 'unique', sopratutto per vedere se l'ho capito bene...

Allora in questo caso io creo un identificatore numerico unico basato su il tempo attuale in microsecondi, e do come prefisso un numero casuale generale (a parte che pur leggendo sul manuale php nn riesco a capire a cosa serva il parametro string prefix....); e successivamente passo tutto tramite la funzione md5().

Quindi questo mi restituisce una stringa casuale numerica che e' basata su il tempo attuale, e pper aprirla devo verificare il suo md5.

Ho capito bene il senso?

Avete ragione, potevo direttamente chiedere al creatore dello script, ma per quanto nn trovo problemi nella lettura di testi in inglese, ho una grandissima difficolta' nel scriverlo!!! Lo so anche di inglese ho bisogno di maggiore pratica... Datemi tempo ragazzi!:P

Vi ringrazio ancora per l'attenzione, ma sopratutto per le risposte!

inviato 9 anni fa
Pr0v4
X 0 X
Ad esempio perche' lo sviluppatore ha scritto i primi tre case lasciandoli vuoti?

Bisognerebbe chiederlo a lui, si pu ipotizzare:

1 c' per controlli futuri

2 un refuso

3 altro che purtroppo non ho tempo di studiare anche xk manca una parte di codice.

nn riesco a capire a cosa serva il parametro string prefix

Se uniqid viene usato si pi server che potrebbero generare lo stesso idunico nello stesso microsecondo con un prefisso differente gli id saranno unici, semplificando se nello stesso istante in 2 server viene generato l'id 1235486 con il prefisso differente (a.e. A e B) avresti lo stesso 2 id unici: A1235486 e B1235486.

e pper aprirla devo verificare il suo md5.

Non una cosa che puoi "aprire" e non hai nemmeno la stringa originale, puoi solo verificare l'MD5.

Suppongo che serva per qualche cookie? Non credo che un utente possa memorizzare un hash MD5 per fare il login.

risposto 9 anni fa
LonelyWolf
X 0 X
Ad esempio perche' lo sviluppatore ha scritto i primi tre case lasciandoli vuoti?

Bisognerebbe chiederlo a lui, si pu ipotizzare:

1 c' per controlli futuri

2 un refuso

3 altro che purtroppo non ho tempo di studiare anche xk manca una parte di codice.

Come manca un pezzo di codice???

In teoria dovrebbe essere una funzione completa!

Secondo te nn funziona? O intendi che manca il pezzo di codice in cui si utilizza la funzione?

Grazie ancora per le dritte!

risposto 9 anni fa
Pr0v4
X 0 X

Ad esempio manca la graffa che chiude la funzione o forse chiude qualche switch prima, non posso saperlo: ci sono 4 graffe aperte e 3 graffe chiuse.

Diciamo che se la graffa chiusa mancante dopo l'ultima che hai riportato tu si potrebbe utilizzare un if al posto del primo switch; una cosa tipo:

if ($type == 'unique') { return md5(uniqid(mt_rand())); }
else {
//il secondo switch senza il case unique
}
risposto 9 anni fa
LonelyWolf
X 0 X

Sinceramente nn ho capito molto bene la funzionalita' di quel nuovo ciclo if...

Cmq la graffa che manca e' stata una mia mancanza, mi sono dimenticato di copiarla per postarla qua sul forum, ho controllato lo script e le graffe tornano.

Scusa la confusione, ma devo ancora imparare anche a mostrare bene il codice :p

I novizi... fanno sempre confusione ;D

risposto 9 anni fa
Pr0v4
X 0 X

L'if che ho suggerito serve a eliminare il primo switch che, come hai giustamente notato, si comporta come un if eseguendo lo stesso codice per i primi 3 case ed un codice differente per l'ultimo case.

risposto 9 anni fa
LonelyWolf
X 0 X

Ah grazie mille!!!

Sempre disponibilissimo complimenti!

risposto 9 anni fa
Pr0v4
X 0 X

Di nulla, mi piace quando gli utenti cercano di capire invece che chiedere la pappa pronta!

Buon lavoro.

risposto 9 anni fa
LonelyWolf
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda