Visualizzazione risultati 1 fino 8 di 8

Discussione: Piccolo script autenticazione in php, pieno d'errori

  1. #1
    Guest

    Unhappy Piccolo script autenticazione in php, pieno d'errori

    Premettendo che di php nn ne so una cicca, xò a scuola quest'anno abbiamo fatto un po' di C++...comunque sto tentando di creare un piccolo sistema di autenticazione basato su dei file e non su database(nn so come fare), almeno x il momento....
    questa è l'ipotetica pagina di login
    pagLog.html
    Codice:
    <html>
    <div>
    <form action="log.php" method="post">
    <p>Inserisci la tua UserID<input name="userid" type="text"></p>
    <p>Inserisci la tua password<input name="password" type="text"></p>
    <p><input type="submit" value="Invia Risposta"></p>
    </form>
    </div>
    </html>
    Questa le pagine da cui prendo i "dati degli utenti"
    utenti.php
    Codice PHP:
    $numero=4
    $uto0
    ='a';
    $uto1='b';
    $uto2='c';
    $uto3='d';
    $uto4='e';
    psw.php
    Codice PHP:
    $psw0='h';
    $psw1='i';
    $psw2='l';
    $psw3='m';
    $psw4='n';
    E infine la pagina che dovrebbe "elaborare" tutto...
    log.php
    Codice PHP:
    <?php
    include 'utenti.php';
    include
    'psw.php';
    $auth=FALSE;
    for(
    $x=1;$x<$numero;$x++){
    if(
    $_POST['userid']==($uto($x))&&$_POST['password']==($psw($x))){
    $auth=TRUE;
    echo
    'Grazie per esserti autenticato';
    }
    else{
    echo
    'UserID o password errati';
    }
    }
    ?>
    MI DICE QUESTO:
    "$numero=4 $uto0='a'; $uto1='b'; $uto2='c'; $uto3='d'; $uto4='e'; psw0='h'; psw1='i'; psw2='l'; psw3='m'; psw4='n';
    Notice: Undefined variable: numero in c:\programmi\easyphp1-8\www\admin\log.php on line 5"
    Se qualcuno mi aiutasse mi farebbe un grandissimo piacere, vorrei capire l'errore alla riga 5 cosa sia...e perchè nn va un po' tutto...please, è praticamente il primo script che "creo" di mio...è già non funzia...

    PS: nel tag "form" della pagina html non capisco cosa cambia tra method "post" o "get"...

  2. #2
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Allora, ecco una piccola sintesi delle tue "magagne": quando dei file parziali contengono del codice PHP (come è il tuo caso, anche se si tratta di semplici assegnamenti), devi inserire per forza i tag di codice <?php e ?>. In caso contrario PHP crederà che quello sia un testo, ecco perché ti viene stampato!

    Quello che segue, invece, è una piccola proposta per correggere il codice della pagina principale che hai inserito:
    Codice PHP:
    include 'utenti.php';
    include
    'psw.php';
    $auth=FALSE;
    for(
    $x=0;!auth && $x<=$numero;$x++){
    $user = "uto" . x;
    $pass = "psw" . x;
    if(
    $_POST['userid']==($$user)&&$_POST['password']==($$pass)){
    $auth=TRUE;
    }
    }
    if (
    auth)
    echo (
    "Grazie per esserti autenticato");
    else
    echo (
    "Nome utente e/o password non validi!");
    In questo modo:
    - risolvi un errorino di sintassi che non avevi previsto (non puoi usare le parentesi per riferirti a variabili diverse come hai scritto sopra)
    - esamini tutti gli utenti senza saltarne nessuno (prima saltavi il primo...)
    - stampi il messaggio di login fallito soltanto quando non viene trovato e non ad ogni confronto user/password fallito
    - interrompi la scansione degli utenti quando avrai trovato il login corretto...

    Stammi bene...
    Ultima modifica di dementialsite : 09-08-2006 alle ore 13.46.47
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  3. #3
    Guest

    Predefinito

    Citazione Originalmente inviato da dementialsite
    Allora, ecco una piccola sintesi delle tue "magagne": quando dei file parziali contengono del codice PHP (come è il tuo caso, anche se si tratta di semplici assegnamenti), devi inserire per forza i tag di codice <?php e ?>. In caso contrario PHP crederà che quello sia un testo, ecco perché ti viene stampato!

    Quello che segue, invece, è una piccola proposta per correggere il codice della pagina principale che hai inserito:
    Codice PHP:
    include 'utenti.php';
    include
    'psw.php';
    $auth=FALSE;
    for(
    $x=0;!auth && $x<=$numero;$x++){
    $user = "uto" . x;
    $pass = "psw" . x;
    if(
    $_POST['userid']==($$user)&&$_POST['password']==($$pass)){
    $auth=TRUE;
    }
    }
    if (
    auth)
    echo (
    "Grazie per esserti autenticato");
    else
    echo (
    "Nome utente e/o password non validi!");
    In questo modo:
    - risolvi un errorino di sintassi che non avevi previsto (non puoi usare le parentesi per riferirti a variabili diverse come hai scritto sopra)
    - esamini tutti gli utenti senza saltarne nessuno (prima saltavi il primo...)
    - stampi il messaggio di login fallito soltanto quando non viene trovato e non ad ogni confronto user/password fallito
    - interrompi la scansione degli utenti quando avrai trovato il login corretto...

    Stammi bene...
    Grazie mille, xò che funzione ha il "."? unire "parti" per creare una "nuova" variabile(o impostarne una presente)?cosa significa "!auth"?xcui immagino che che nel finale "if(auth) stia a intendere, quando auth è TRUE allora ECHO...ELSE?giusto?cmq grazie ancora


    EDIT: Ho provato il codice che mi hai dato, ma mi da questo errore e mi dice che mi sono loggato correttamente:
    "
    Notice: Use of undefined constant auth - assumed 'auth' in c:\programmi\easyphp1-8\www\admin\log.php on line 5

    Notice: Use of undefined constant auth - assumed 'auth' in c:\programmi\easyphp1-8\www\admin\log.php on line 12
    Grazie per esserti autenticato"
    che significa?...sta variabile auth...
    Ultima modifica di worldfree : 09-08-2006 alle ore 14.26.25

  4. #4
    Guest

    Predefinito

    Dunque, il punto (.) serve a concatenare dei valori.
    Gli errori sono dati dal fatto che manca il simbolo del dollaro prima delle variabili, che devi agitogdre anche nelle due righe dopo l'if, prima delle rispettive "x".
    Preso* che sia tutto chiaro. Paura* se non vi scrivo tutto il codice corretto ma sto scrivendo con il cellulare ed è un po' scomodo...

    *: Thanks to Mr. Nokia T9....
    Ultima modifica di tuttoeniente2 : 10-08-2006 alle ore 14.52.01

  5. #5
    Guest

    Predefinito

    Citazione Originalmente inviato da tuttoeniente2
    Dunque, il punto (.) serve a concatenare dei valori.
    Gli errori sono dati dal fatto che manca il simbolo del dollaro prima delle variabili, che devi agitogdre anche nelle due righe dopo l'if, prima delle rispettive "x".
    Preso che sia tutto chiaro. Paura se non vi scrivo tutto il codice corretto ma sto scrivendo con il cellulare ed è un po' scomodo...
    Thanks!


    ...Ho sistemato un po' lo script e sembra funzioni, volevo però fare in modo che se l'utente fosse già loggato, gli uscisse un messaggio con scritto che era apposto e invece qllo non funziona proprio[mentre l'autenticazione sembra funzioni!]....sapete come posso fare?Grazie x l'aiuto
    Codice PHP:
    <?php
    //auth lo metterei come variabile impostata FALSE dal file utenti.php
    if(isset($auth)==TRUE)//con isset verifico l'esistenza...
    if($auth==TRUE){
    echo (
    "Ti sei già loggato");
    }
    else{
    include
    "utenti.php";
    include
    "psw.php";
    for(
    $x=0;$x<=$numero;$x++){
    $user = "uto" . $x;
    $pass = "psw" . $x;
    if(
    $_POST['userid']==($$user)&&$_POST['password']==($$pass)){
    $auth=TRUE;
    }
    }
    if (
    $auth==TRUE)
    echo (
    "Grazie per esserti autenticato");
    else
    echo (
    "Nome utente e/o password non validi!");

    }
    else{
    include
    "utenti.php";
    include
    "psw.php";
    for(
    $x=0;$x<=$numero;$x++){
    $user = "uto" . $x;
    $pass = "psw" . $x;
    if(
    $_POST['userid']==($$user)&&$_POST['password']==($$pass)){
    $auth=TRUE;
    }
    }
    if (
    $auth==TRUE)
    echo (
    "Grazie per esserti autenticato");
    else
    echo (
    "Nome utente e/o password non validi!");
    }
    ?>

  6. #6
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Citazione Originalmente inviato da tuttoeniente2
    ... Preso che sia tutto chiaro. Paura se non vi scrivo tutto il codice corretto ma sto scrivendo con il cellulare ed è un po' scomodo...
    Brutti scherzi fa il T9, eh...?

    Quanto al problema di worldfree, penso che ti serva una variabile di sessione: se non ho capito male a te servirebbe propagare la variabile $auth tra le diverse pagine del tuo forum (o sistema per utenti registrati equivalente)...

    Ecco come puoi fare:
    - sostituisci $auth con $_SESSION['auth'] in tutte le sue occorrenze in tutte le pagine
    - aggiungi la riga <?php session_start(); ?> in testa a tutte le pagine

    Altro consiglio: quando fai dei test con variabili o funzioni booleane (che possono cioè assumere solo il valore TRUE o FALSE), puoi cavartela con qualche carattere in meno:
    - if ($auth) equivalente a "se $auth è impostata a TRUE"
    - if (!$auth) equivalente a "se $auth è impostata a FALSE"

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  7. #7
    Guest

    Predefinito

    Citazione Originalmente inviato da dementialsite
    Brutti scherzi fa il T9, eh...?
    Sì, per quanto controlli qualcosa scappa sempre...

  8. #8
    Guest

    Predefinito

    Citazione Originalmente inviato da dementialsite
    Brutti scherzi fa il T9, eh...?

    Quanto al problema di worldfree, penso che ti serva una variabile di sessione: se non ho capito male a te servirebbe propagare la variabile $auth tra le diverse pagine del tuo forum (o sistema per utenti registrati equivalente)...

    Ecco come puoi fare:
    - sostituisci $auth con $_SESSION['auth'] in tutte le sue occorrenze in tutte le pagine
    - aggiungi la riga <?php session_start(); ?> in testa a tutte le pagine

    Altro consiglio: quando fai dei test con variabili o funzioni booleane (che possono cioè assumere solo il valore TRUE o FALSE), puoi cavartela con qualche carattere in meno:
    - if ($auth) equivalente a "se $auth è impostata a TRUE"
    - if (!$auth) equivalente a "se $auth è impostata a FALSE"

    Stammi bene...
    Grazie mille per i consigli, faccio subito....

    EDIT: ho messo <?php session_start(); ?> in cima a tutte le pagine, ma alla prima pagina che apro pagLog.php(era pagLog.html)...mi dice

    Warning: session_start(): Cannot send session cookie - headers already sent by (output started at c:\programmi\easyphp1-8\www\admin\paglog.php:2) in c:\programmi\easyphp1-8\www\admin\paglog.php on line 2

    Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at c:\programmi\easyphp1-8\www\admin\paglog.php:2) in c:\programmi\easyphp1-8\www\admin\paglog.php on line 2
    + il form

    loggandomi con dati "giusti"...
    Notice: A session had already been started - ignoring session_start() in c:\programmi\easyphp1-8\www\admin\utenti.php on line 1

    Notice: A session had already been started - ignoring session_start() in c:\programmi\easyphp1-8\www\admin\psw.php on line 1
    Grazie per esserti autenticato
    Che faccio?!?!?
    Ultima modifica di worldfree : 10-08-2006 alle ore 23.07.57

Regole di scrittura

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