Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di adiumx
    Registrato dal
    Jan 2005
    residenza
    Zurigo
    Messaggi
    353

    Login in php con mysql, errore di sintassi

    salve a tutti,
    ho un sito. In una pagina php, verifica se i dati del login sono corretti, se corrispondono ad almeno un risultato della tabella
    inserisce in una sessione i dati pw e nome, di modo da poter verificare in altre pagine se il login è`corretto
    ecco il codice della pagina che verifica se la variabile della sessione è ok
    Codice PHP:
    $db mysql_connect($db_host$db_user$db_password);
    if (
    $db == FALSE)
    die (
    "Errore nella connessione. Verificare i parametri nel file config.inc.php");
    mysql_select_db($db_name$db)
    or die (
    "Errore nella selezione del database. Verificare i parametri nel file config.inc.php");
    $result mysql_query("SELECT * FROM pw")or die(mysql_error());
    while (
    $row mysql_fetch_array($result)) {
     if (
    $_SESSION['nome'] == $row['nome'] || $_SESSION['pw'] == $row['pw']) {
       break;
    $logged"ok";
      } else {
        echo 
    "<script language=javascript>location.replace(\"login.php?c=1&action=login\");</script>";
      }
    }; 
    a livello logico mi sembra giusto.Porbabilbmente è giusto, se inserisco i dati della prima riga della tabella di mysql funziona, ma se inserisco, per esempio, i dati della 2a riga della tabella non funziona, è come se i dati inseriti fossero sbagliati. Ma sono giusti! Ciò``mì avvilisce.
    Saluti
    Adiumy


  2. #2
    Utente di HTML.it L'avatar di Gumble
    Registrato dal
    Jun 2004
    Messaggi
    1,313
    secondo me il problema sta qui:

    Codice PHP:
    while ($row mysql_fetch_array($result)) {
     if (
    $_SESSION['nome'] == $row['nome'] || $_SESSION['pw'] == $row['pw']) {
       break; 
    il fatto é che prendi la prima riga del database... e se i dati non sono uguali a quelli del login il programma esce dal ciclo! infatti se il login esiste nelle righe successive il tuo script non va avanti.

    io farei in modo che lo script estragga i dati di login = a quelli che inserisci e poi setta una variabile globale a 1 se il login é corretto e a 0 se é sbagliato. in questo modo non blocchi il ciclo se inserisci i dati di login della seconda riga... poi in cima alla pagina controlli se é uno o zero...

    spero di essere stato chiaro.. ciao e fammi sapere
    alcool: la causa e la soluzione di tutti i problemi

  3. #3
    Utente di HTML.it L'avatar di dalang
    Registrato dal
    May 2003
    Messaggi
    252
    Codice PHP:
    while ($row mysql_fetch_array($result)) {
     if (
    $_SESSION['nome'] == $row['nome'] || $_SESSION['pw'] == $row['pw']) {
       break;
    $logged"ok";
      } else {
        echo 
    "<script language=javascript>location.replace(\"login.php?c=1&action=login\");</script>";
      }

    Ciao, a livello logico mi sembra sbagliato... rilleggi quello che fa:
    Per ogni riga del DB verifica se nome e passwd corrispondono, se si esce dal while (con break) e NON setta $logged="ok", perche esce prima, però se non corrispondono fa subito il rediret, e non continua il ciclo.
    quindi è ovvio che se i dati non sono nella prima riga, fa il redirect e non li trova.

    INOLTRE:
    è sbagliato il controllo nell'if, tu controli se il nome nella sessione è = al nome del DB OPPURE (||) le password sono uguali.
    DEVI mettere un' AND al posto di || perché sia nome che passwd DEVONO esere uguali, altrimenti basta che uno sappia il nome ed entra senza password!


    il controllo in linea di massima dovrebbe essere:
    codice:
    $logged=0;
    while($row...) {
    if (nome AND password corrispondono) {
       $logged=1;
       break;
    }
    if (!($logged)) {
      fai il redirect;
    }

  4. #4
    Utente di HTML.it L'avatar di adiumx
    Registrato dal
    Jan 2005
    residenza
    Zurigo
    Messaggi
    353
    Grazie a tutti per la risposta, mettendo insieme tutto funziona,
    ma avevo risolto anche mettendo due istruzioni if al posto dell or
    saluti

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.