Visualizzazione risultati 1 fino 21 di 21

Discussione: [QUEL MALEDETTO IF] Condizione non funziona a dovere

  1. #1
    Guest

    Predefinito [QUEL MALEDETTO IF] Condizione non funziona a dovere

    Ragazzi, davvero... sto sclerando...
    forse sarà una mia distrazione, non so...

    cmq, allora: ho questo script di login, scritto fra ieri notte e oggi, che legge in un file di testo nickname e password degli utenti (memorizzati un utente x riga, secondo uno schema "a records", come se fossero tabelle, separati da dei caratteri separatori).
    In pratica sono le solite verifiche, che vedono se nickname e pass coincidono e ti fanno entrare.
    Ma in pratica è come se un IF non funzionasse...
    anche se i due nicknames (quello immesso e quello rilevato nel txt) coincidono PERFETTAMENTE (verificato tramite echo), l'istruzione è come se "saltasse", dicendomi che il nickname non esiste

    Nei commenti ho messo qualche spiegazione in più...

    Codice PHP:
    session_start();
    session_register('nickname');
    include(
    "txtop.php");
    $indirizzo=$_GET['page']; $nickname=$_POST['nickname']; $password=$_POST['password'];

    if(
    ereg("^[A-Za-z0-9_ -]+$",$nickname) and ereg("^[A-Za-z0-9_ -]+$",$password)){ // Solita verifica dei caratteri immessi...

    $n_users=count(file("utenti.txt")); //Prende il numero degli utenti dal file
    $found_nickname=false; $right_password=false; // "Inizializzazione" di due variabili bool
    for($cu=1;$cu<=$n_users;$cu++){ //Ciclo for che scorre gli utenti
    $at_nickname=leggirecord("utenti.txt",$cu,1); //Utente dell'attuale riga
    $at_password=leggirecord("utenti.txt",$cu,2); //Pasword dell'attuale riga
    // QUI AVEVO MESSO GLI ECHO DI VERIFICA //
    if($nickname==$at_nickname){ //La riga incriminata: le ho provate tutte ma anche quando i due nicknames sono uguali l'istruzione non fa il suo dovere!
    /* IL RESTO "SEMBRA" FUNZIONARE */
    $found_nickname=true;
    $rightpassword=$at_password;
    if(
    $password==$at_password){
    $right_password=true;
    }
    }
    }

    if(
    $right_password){ $all_done_ok=true; $_SESSION['nickname']=$nickname; }else session_unset();

    $right_items=true;

    }else
    session_unset();

    if(!isset(
    $all_done_ok)){
    if(!
    $right_password) $errore="LA PASSWORD INSERITA NON E' CORRETTA!";
    if(!
    $found_nickname) $errore="IL NICKNAME INSERITO NON ESISTE!";
    if(!
    $right_items) $errore="IL NICKNAME O LA PASSWORD INSERITI CONTENGONO CARATTERI NON VALIDI!";
    }
    Sbaglio in qualcosa?
    Ultima modifica di Zorinik : 18-12-2007 alle ore 22.18.15

  2. #2
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    arzigogolato anzichenò!

    l'unica cosa che riesco a vedere così ad una prima lettura, è che nell'if incriminato ad un certo punto usi $rightpassword invece di $right_password. Mica quello?

  3. #3
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,767

    Predefinito

    modifca questo pesso:
    Codice PHP:
    session_start();
    session_register();
    Con questo:
    Codice PHP:
    session_start();
    /*...
    ...
    ...
    */
    metti al posto dei puntini session_register() con dentro il nome della sessione che vuoi reggistrare...La parte di testo tra /* sono dei commenti, che pero lo script prende in considerazione, poi quando la sessione di serve scrivi:
    Codice PHP:
    session_register ('Username')
    $_SESSION["username"] = $Username ;
    per il resto non lo so, io ho sempre usato un db per fare ciò
    Ultima modifica di sevenjeak : 18-12-2007 alle ore 16.43.14

    Sevenjeak
    Software developer and much more

  4. #4
    Ospite Guest

    Predefinito

    Se non lo fai già, nella funzione leggirecord() (della quale sarebbe utile riportare qui il codice) applica la funzione trim() alla stringa da restituire.

    Ciao!

  5. #5
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    aggiuntina: session_register() è male, perché dipende da register_globals e non è bello. Cerca di usare solo $_SESSION

  6. #6
    Guest

    Predefinito

    Ma sinceramente a me delle sessioni importa poco per ora... il fatto è ke nn mi riconosce il nickname.
    Mi dà per FALSA una condizione VERA... è questo il problema :(

    Citazione Originalmente inviato da dreadnaut Visualizza messaggio
    arzigogolato anzichenò!

    l'unica cosa che riesco a vedere così ad una prima lettura, è che nell'if incriminato ad un certo punto usi $rightpassword invece di $right_password. Mica quello?
    No quello è il residuo di un controllo che avevo fatto prima... c'entra poco... cmq ora l'ho tolto.

    Citazione Originalmente inviato da sevenjeak Visualizza messaggio
    modifca questo pesso:
    Codice PHP:
    session_start();
    session_register();
    Con questo:
    Codice PHP:
    session_start();
    /*...
    ...
    ...
    */
    metti al posto dei puntini session_register() con dentro il nome della sessione che vuoi reggistrare...La parte di testo tra /* sono dei commenti, che pero lo script prende in considerazione, poi quando la sessione di serve scrivi:
    Codice PHP:
    session_register ('Username')
    $_SESSION["username"] = $Username ;
    per il resto non lo so, io ho sempre usato un db per fare ciò
    Eh?

    Citazione Originalmente inviato da probid Visualizza messaggio
    Se non lo fai già, nella funzione leggirecord() (della quale sarebbe utile riportare qui il codice) applica la funzione trim() alla stringa da restituire.

    Ciao!
    Fatto, ma il risultato non cambia.


    Ufffffffffff

    Cmq ecco il codice delle funzioni che entrano in gioco per il file di testo (non so cosa c'entri, ma visto ke mi è stato richiesto)...

    Codice PHP:

    function leggirecord($file,$n_riga,$n_record){
    $ar_riga=arrayrecords($file,$n_riga);
    return
    $ar_riga[$n_record-1];
    }

    function
    arrayrecords($file,$n_riga){
    $riga=leggiriga($file,$n_riga);
    $ar_riga=explode("|||",$riga);
    return
    $ar_riga;
    }

    function
    leggiriga($file,$n_riga){
    $ar_file=file($file);
    $riga=$ar_file[$n_riga-1];
    $riga=trim($riga);
    return
    $riga;
    }
    (ah, non prendetemi per folle per aver fatto tutto quel giro di funzioni, ma è ke le varie funzioni vengono riutilizzate un po' ovunque per il sito che sto facendo )

  7. #7
    Ospite Guest

    Predefinito

    Se non lo fai già, nella funzione leggirecord() (della quale sarebbe utile riportare qui il codice) applica la funzione trim() alla stringa da restituire.

    Ciao!
    Perchè l'hai fatto in leggiriga()?


    Codice PHP:
    function leggirecord($file,$n_riga,$n_record){
    $ar_riga=arrayrecords($file,$n_riga);
    return
    $ar_riga[$n_record-1];
    }
    sostituisci con:
    Codice PHP:
    function leggirecord($file,$n_riga,$n_record){
    $ar_riga=arrayrecords($file,$n_riga);
    return
    trim($ar_riga[$n_record-1]);
    }

  8. #8
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    a proposito di quello che ha scritto Sevenjeak, non so'. Non conosco commenti che vengono considerati comunque, e non vedo l'utilità della cosa, ma boh.

    Riguardo a session_blabla: il confronto che non funziona casualmente è quello con la variabile $nickname che è quella che registri. Non ho tempo di verificare, ma le coincidenze in php non esistono

  9. #9
    Guest

    Predefinito

    Citazione Originalmente inviato da probid Visualizza messaggio
    Perchè l'hai fatto in leggiriga()?


    Codice PHP:
    function leggirecord($file,$n_riga,$n_record){
    $ar_riga=arrayrecords($file,$n_riga);
    return
    $ar_riga[$n_record-1];
    }
    sostituisci con:
    Codice PHP:
    function leggirecord($file,$n_riga,$n_record){
    $ar_riga=arrayrecords($file,$n_riga);
    return
    trim($ar_riga[$n_record-1]);
    }
    Dato che leggirecord si appoggia su leggiriga... penso sia la stessa cosa... no?
    Cmq anche come hai detto tu il risultato non cambia...

    Citazione Originalmente inviato da dreadnaut Visualizza messaggio
    Riguardo a session_blabla: il confronto che non funziona casualmente è quello con la variabile $nickname che è quella che registri. Non ho tempo di verificare, ma le coincidenze in php non esistono

    ma.... con echo ho fatto in modo che venissero visualizzate a schermo sia $at_nickname, sia $nickname... e spuntavano entrambi UGUALI... ma la condizione non era verificata comunque
    Ultima modifica di Zorinik : 18-12-2007 alle ore 21.19.03

  10. #10
    Ospite Guest

    Predefinito

    Dato che leggirecord si appoggia su leggiriga... penso sia la stessa cosa... no?
    Non è la stessa cosa, un conto è se togli gli spazi dall'inizio e dalla fine da una riga, un conto e se lo togli da una parola tu prova e vedi che qualcosa cambia

    Cmq anche come hai detto tu il risultato non cambia...
    Quando???

    Ciao!

  11. #11
    Guest

    Predefinito

    Citazione Originalmente inviato da probid Visualizza messaggio
    Quando???
    Sul fatto che l'IF non funziona...

  12. #12
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    hai messo l'echo delle due variabili nell'else del if incriminato?

    ed ha messo dei simboli prima e dopo le stringhe che mostravi, in modo che non contenessero magari un ritorno a capo in fondo, che potrebbe sfuggire ad un semplice controllo? (per ritornare a trim())

  13. #13
    Guest

    Predefinito

    Sì ho messo delle virgolette, mentre gli echo li ho messi appena prima dell'IF incriminato (ho aggiunto un commento nel primo post)
    Ultima modifica di Zorinik : 18-12-2007 alle ore 22.18.34

  14. #14
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    troppo presto, potrebbero cambiare per caso nel mentre - prova nell'else !

  15. #15
    Guest

    Predefinito

    Citazione Originalmente inviato da dreadnaut Visualizza messaggio
    troppo presto, potrebbero cambiare per caso nel mentre - prova nell'else !
    Stesso, identico, risultato... :(

  16. #16
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    ma tutto questo, avendo tolto session_register() ?

  17. #17
    Guest

    Predefinito

    Sì... (e anche lasciandolo lì)

  18. #18
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    boh, a questo punto non saprei. so solo che l'errore non è li, ma era abbastanza ovvio dall'inizio
    Le due stringhe sono diverse, ma in qualche modo saltano fuori uguali con l'echo. Hai stringhe multibyte da qualche parte, o codifiche strane nei file?

    Rinomina le variabili, tipo $nickname che al momento è sovraccaricata come variabile post, di sessione e locale allo script. E' sempre male e crea casini magari non evidenti.

    Se ancora non funziona, magari riscrivi un po' più pulito quel pezzo

  19. #19
    Guest

    Predefinito

    Ho fatto qualche piccola prova...
    in pratica se al posto di $nickname==$at_nickname metto $nickname="Zorinik", la condizione me la riconosce come vera; se invece metto $at_nickname=="Zorinik", la condizione è falsa.
    Quindi tutto il problema sta nella variabile $at_nickname (ovvero quella ch'è presa dal txt).
    Stampata a video con echo risulta proprio "Zorinik", mentre se confrontata in un IF nn risulta tale..............

    E non capisco ancora il perché

  20. #20
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Con $nickname="Zorinik" assegni alla variabile $nickname il valore "Zorinik" ed è logico che te la consideri vera perché con quella assegnazione $nickname non è vuoto.
    Se vuoi controllare che $nickname sia uguale a "Zorinik", devi utilizzare $nickname=="Zorinik".
    Ricorda che le maiuscole e le minuscole vengono considerate diverse.
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  21. #21
    Guest

    Predefinito

    Citazione Originalmente inviato da funcool Visualizza messaggio
    Con $nickname="Zorinik" assegni alla variabile $nickname il valore "Zorinik" ed è logico che te la consideri vera perché con quella assegnazione $nickname non è vuoto.
    Se vuoi controllare che $nickname sia uguale a "Zorinik", devi utilizzare $nickname=="Zorinik".
    Ricorda che le maiuscole e le minuscole vengono considerate diverse.

    No scusa vabè ho sbagliato :P
    volevo scrivere due uguali, è colpa di sta dannata tastiera -.-

    cmq alla fine era un problema di codifica... in pratica ho aperto il file utenti col blocco note e l'ho salvato con codifica ANSI anziché UTF-8, ed ha tutto funzionato bene...
    sto iniziando ad odiare le codifiche -.-

    grazie cmq a tutti per il tempo che v'ho fatto perdere

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •