Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2014
    Messaggi
    323

    login con PDO e SQLite (Stampare messaggio di errore nel caso di dati sbagliati).

    Ciao come da titolo come faccio ad fare stampare il messaggio di errori se io sbaglio email e password..?
    Non riesco ad capire come fare.. e il codice lo fatto leggendo qui e la su internet.. pero non riesco proprio come fare.. vi posto il codice:

    codice:
    <?phpinclude_once("inc.php"); 
    ?>
    <?php 
    if (isset($_POST['submit'])) 
    { 
     if(empty($_POST["email"]))
     {
      
      $message = "Non inserito utente";
      
     }elseif(empty($_POST["password"]))
     {
       $message= "Non inserito la password";
     }else
     {
     
        $sql = "select * from users where email=:email and password=:password LIMIT 1";
        
        $stmt = $pdo->prepare($sql);
        $stmt->execute(array(
                'email'  => $_POST["email"],
                'password'    => md5($_POST["password"])
            ));
    
    
            session_start();
            
            while ($row = $stmt->fetch ())
            {
    
    
                $_SESSION['name']=$row["name"];
                $_SESSION['login']=true;     
                $_SESSION['ruolo'] = $row["isAdmin"];
                
            
            }    
            header("location: index.php");
        }
    
    
    }
    ?>
    <!DOCTYPE html>
    <html>
    <head>
    </head>
    <style>
    .message {
    color: #FF0000;
    font-weight: bold;
    text-align: center;
    width: 100%;
    }</style>
    <body> 
    <form name="frmUser" method="post" action="login.php">
    <div class="message"><?php if(isset($message)) { echo $message; } ?></div>
    <table border="0" cellpadding="10" cellspacing="1" width="500" align="center">
    <tr >
    <td align="center" colspan="2">Login</td>
    </tr>
    <tr>
    <td align="right">email</td>
    <td><input type="text" name="email" size="50"></td>
    </tr>
    <tr >
    <td align="right">Password</td>
    <td><input type="password" name="password"></td>
    </tr>
    <tr >
    <td align="center" colspan="2">
    <input type="submit" name="submit" value="Submit"></td>
    </tr>
    </table>
    </form>
    vi ringrazio molto e scusate se il codice lo messo nei tag code ma con i tag non riesco propio capire come fare.. perché appena faccio anteprima mi viene tutto apicicato.

    grazie mille e buona notata.

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2014
    Messaggi
    323
    a scordavo i login funziona regolare e accetta tutto.. ma lo volevo fare più carino che quando sbaglio password o email mi dice il messaggio di errore.

    saluti.

  3. #3
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Dopo aver eseguito la query devi verificare quanti risultati ha recuperato, se ha raccolto 1 risultato vuol dire che il login è andato a buon fine, in qualsiasi altro caso deve dare errore, username e/o password erano errate.

    Tu al momento non fai questo controllo, cerchi direttamente di caricare i record trovati e comunque lo fai nel modo sbagliato
    Codice PHP:
    while ($row $stmt->fetch ())
    {
        
    $_SESSION['name']=$row["name"];
        
    $_SESSION['login']=true;     
        
    $_SESSION['ruolo'] = $row["isAdmin"];      

    Un login perché sia da considerare riuscito, DEVE restituire un solo record, quindi il while non serve, perché appunto dovrà eseguire il fetch solo una volta.
    Se trova più record, il tuo codice metterà in sessione l'ultimo.
    Questa situazione non si dovrebbe verificare, perché la coppia username/password dovrebbe essere univoca, nello specifico, l'username dovrebbe essere unico, ma se hai fatto male il db e la registrazione potrebbe verificarsi tale situazione.
    Se tale situazione è impossibile perché hai fatto bene le cose, allora il while è ancor di più inutile.

    Quindi ricapitolando:
    - esegui la query
    - verifichi quanti risultati ha trovato
    - se non ha trovato niente o più di 1 risultato, esegui il redirect a una pagina che dice "username e/o password errati"
    - se trova un risultato, esegui il fetch ed esegui il codice che hai ora

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2014
    Messaggi
    323
    quindi devo fare un'if invece di while?

    hai un esempio?
    grazie mille.

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2014
    Messaggi
    323
    guarda sto facendo ecco il codice:

    codice:
    <?php
    include_once("inc.php"); 
    ?>
    <?php 
    if (isset($_POST['submit'])) 
    { 
     if(empty($_POST["email"]))
     {
      
      $message = "Non inserito utente";
      
     }elseif(empty($_POST["password"]))
     {
       $message= "Non inserito la password";
     }else
     {
     
        $sql = "select * from users where email=:email and password=:password LIMIT 1";
        
        $stmt = $pdo->prepare($sql);
        $stmt->execute(array(
                'email'  => $_POST["email"],
                'password'    => md5($_POST["password"])));
        
        
        
    
    
        if($stmt->fetchColumn() == 0) 
        {
        
        
            echo "No records found";
                
            
        }else
        {
        
            session_start();
            
            $rows = $stmt->fetchAll();
            
            foreach($rows as $row)
            {        
                $_SESSION['name']=$row["name"];
                $_SESSION['login']=true;     
                $_SESSION['ruolo'] = $row["isAdmin"];
            }
            header("location: index.php");    
        }
            
    }
    
    
    }
    ?>
    <!DOCTYPE html>
    <html>
    <head>
    </head>
    <style>
    .message {
    color: #FF0000;
    font-weight: bold;
    text-align: center;
    width: 100%;
    }</style>
    <body> 
    <form name="frmUser" method="post" action="login.php">
    <div class="message"><?php if(isset($message)) { echo $message; } ?></div>
    <table border="0" cellpadding="10" cellspacing="1">
    <tr >
    <td align="center" colspan="2">Login</td>
    </tr>
    <tr>
    <td align="right">email</td>
    <td><input type="text" name="email" size="50"></td>
    </tr>
    <tr >
    <td align="right">Password</td>
    <td><input type="password" name="password"></td>
    </tr>
    <tr >
    <td align="center" colspan="2">
    <input type="submit" name="submit" value="Submit"></td>
    </tr>
    </table>
    </form>
    perché se sbaglio mi dice "No records found"

    ed invece se entro con i dati giusti .. non fa il redirect ?

    grazie mille.

  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Non serve neanche foreach()
    Se il login va a buon fine, overo trovi SOLO UN RECORD, non ha senso alcun ciclo, perché il risultato è uno solo, che senso ha ciclare su un solo elemento?
    Fai il fetch e basta.
    Anche se trovi 2 o più record devi dare errore.

    Poi perché fai il controllo su fetchColumn? fetchColumn carica una colonna dei risultati, che senso ha usarla per verificare quanti record hai recuperato? Il controllo va fatto usando rowCount.

    E' evidente che hai le idee molto confuse riguardo l'interazione con il database, faresti meglio a fermarti, studiare PDO e poi, dopo aver capito, riprendere quello che stai facendo, perché ora stai andando avanti a tentativi e ci perderai un casino di tempo.

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2014
    Messaggi
    323
    ok ora studio e se hai qualche guida online me la passi.. ?

    grazie mille. e buona giornata.

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2014
    Messaggi
    323
    e poi son passato a mysql perché è più comodo e mantiene più dati..

    Ma come mai cosi funziona:

    codice:
    <?php
    include_once("inc.php"); 
    ?>
    <?php 
    if (isset($_POST['submit'])) 
    { 
     if(empty($_POST["email"]))
     {
      
      $message = "Non inserito utente";
      
     }elseif(empty($_POST["password"]))
     {
       $message= "Non inserito la password";
     }else
     {
     
        $sql = "select COUNT(*) from users where email=:email and password=:password and pin=:pin LIMIT 1";
        
        $stmt = $pdo->prepare($sql);
        $stmt->execute(array(
                'email'  => $_POST["email"],
                'password'    => md5($_POST["password"]),
                'pin'=>md5($_POST["pin"])));
    
    
    
    
        if($stmt->fetchColumn() == 0)
        {
        
            $message =  "No records found";
        
        }
        else{
    
    
            $sql = "select * from users where email=:email and password=:password and pin=:pin LIMIT 1";
        
            $stmt = $pdo->prepare($sql);
            $stmt->execute(array(
                'email'  => $_POST["email"],
                'password'    => md5($_POST["password"]),
                'pin'=>md5($_POST["pin"])));
            
            session_start();
            
            $rows = $stmt->fetchAll();
            
            foreach($rows as $row)
            {        
                $_SESSION['name']=$row["name"];
                $_SESSION['login']=true;     
                $_SESSION['ruolo'] = $row["isAdmin"];
            }
                header("location: index.php");    
            }
        }
    }
    ?>
    <!DOCTYPE html>
    <html>
    <head>
    </head>
    <style>
    .message {
    color: #FF0000;
    font-weight: bold;
    text-align: center;
    width: 100%;
    }</style>
    <body> 
    <form name="frmUser" method="post" action="login.php">
    <div class="message"><?php if(isset($message)) { echo $message; } ?></div>
    <table border="0" cellpadding="10" cellspacing="1">
    <tr >
    <td align="center" colspan="2">Login</td>
    </tr>
    <tr>
    <td align="right">email</td>
    <td><input type="text" name="email" size="50"></td>
    </tr>
    <tr >
    <td align="right">Password</td>
    <td><input type="password" name="password"></td>
    </tr>
    <tr >
    <td align="right">Pin</td>
    <td><input type="password" name="pin"></td>
    </tr>
    <tr >
    <td align="center" colspan="2">
    <input type="submit" name="submit" value="Submit"></td>
    </tr>
    </table>
    </form>
    mi protesti darmi una mano ?

    hai guide anche in inglese ??

    grazie mille.

  9. #9
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Ho una guida in firma.
    Ricorda solo che invece delle funzioni mysql_ devi usare le funzioni mysqli_ (controlla le funzioni equivalenti sul manuale di php, php.net, per alcune cambiano i parametri da passare), la quida è un po' vecchia, ma a parte sostituire mysql_ con mysqli_, il resto è tutto valido.

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2014
    Messaggi
    323
    io dicevo pdo perché la connessione la faccio cosi:
    codice:
    <?php
    $username ="root";
    $password = "";
    try {
        $pdo = new PDO('mysql:host=localhost;dbname=db72711', $username, $password);
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    } catch(PDOException $e) {
        echo 'ERROR: ' . $e->getMessage();
    }
    ?>
    le vecchie istruzioni le so già usare solo che volevo imparare ad usare pdo etc..

    grazie .. il mio codice è giusto cosi come lo scritto ?.

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.