pdo con login

  • Creatore Discussione Creatore Discussione luigi777
  • Data di inizio Data di inizio

luigi777

Utente Attivo
14 Feb 2008
1.086
1
38
43
Massa, Italy
Salve, sapete mica perché non funziona ho meglio funziona per meta ?

Ho una funziona che controlla se c'è la password è questa funziona...ma la parte dell'login che setta le sessioni e fa un while non mi funziona.
La pagina e richiamata da blog.php?a=login ..

e il codice è questo:
PHP:
try {
   
    $login = $db->prepare('SELECT * FROM setting WHERE password=:password');
	$login->bindParam(':password', $password);
	$password = md5($_POST["password"]);
	$login->execute();
	
	
	 if ($login->rowCount() > 0){	
            while($row = $login->fetch()){
	     $_SESSION["login"] = true;
	
	}
	}		
	else
	{
	 $error = "No";
	}
}
catch(PDOException $e){}

uso md5 e il form è questo:
PHP:
<form name="<?php echo $_SERVER["PHP_SELF"]; ?>" method="POST">
<fieldset>
<legend>Login</legend>
<?php
 if(isset($error)){ echo "<p class=\"error\">".$error."</p>";}
if(isset($msg)){ echo $msg;} else {
?><br />
<label for="admin">Admin:</label>
 <input type="password" name="password" value="<?php if(isset($_POST['password'])){echo $_POST['password'];}else { echo $password; }?>" size="50">
<label for="invia"></label>
<input type="submit"   name="submit" value="Login"/>
</fieldset>
</form>
<?php } ?>

non saprei e delle ore che cerco di capire .. ma non so come mai.. poi è la prima volta che faccio con pdo e sqlite.

idee?
grazie mille e buona giornata.
 
Intanto ti consiglio di dare una sistemata a tutto lo script:

PHP:
<?php

if ('POST' === $_SERVER['REQUEST_METHOD']) {
    $stm = $db->prepare('SELECT * FROM setting WHERE password = ?');
    $stm->execute(array(md5($_POST['password'])));

    $error = null;

    try {
        $stm->execute();
    } catch (PDOException $e) {
        $error = 'Errore durante il login.';
    }

    if (null === $error) {
        if ($stm->rowCount() > 0) {
            $_SESSION['login'] = true;
        } else {
           $error = 'Credenziali non corrette.';
        }
    }
}

$error_html = $error ? "<p class=\"error\">{$error}</p>" : '';

echo <<<EOF
<form action="{$_SERVER['REQUEST_URI']}" method="post">
    <fieldet>
        <legend>Login</legend>
    </fieldet>

    {$error_html}

    <div>
        <label for="password">Password:</label>
        <input type="password" name="password">
    </div>

    <button type="submit">Login</button>
</form>
EOF;

Così dovrebbe funzionare. Controlla che effettivamente il record sia presente nel database.
 
Ultima modifica:

Discussioni simili