par
moogli » 08 févr. 2014, 12:11
bon aller avec les yeux mieux ouvert se sera mieux.
j'ai confondu exec et execute ...
donc ce que tu fait est presque correct.
au niveau code pas grand chose à redire par contre ta requête SQL n'est pas bonne .
les marqueurs nommés doivent commencer par ':' (
cf doc de bindValue) or toi tu dois demander une ligne où email = 1
j'ai repris ton code pour qu'il soit plus fonctionnel.
J'ai supposé que l'existance des variables étaient vérifiée avant (genre d'où vient $s_Login, vu sont une variable de session qui n'est pas prise dans $_SESSION ?)
<?php
$db = new PDO("");
$query = 'SELECT email FROM source_clients WHERE email=:email';
$select = $db->prepare($query);
$select->bindValue(':email', md5($s_Login));
$ret = $select->execute();
if ($ret !== false) {
$row = $select->fetch();
if ($row !== false) {
if ($row['pass'] == sha1($_POST['s_Pass'])) {
$_SESSION['mailsutilisateur'] = $_POST['s_Login'];
// attention redondance avec la lige du dessus c'est la même chose sous forme de tableau c'est tout.
$_SESSION['S_membre'] = $row;
$NewMembreID = md5(uniqid(rand(), true));
// Attention ce if est inutile car
// 1 : tu ne selectionne pas le userID dans la requête
// 2 : si tu es la c'est qu'il y a un résultat donc cette doit exister et ne pas être vide (vu son nom c'est la PK non ?)
// 3 : tu utilise $_SESSION['S_membre']['clt_id'] qui ne peux pas exister puisse qu'il n'est pas selectionné dans la requête et que tu écrse S_membre 3 ligne plus haut ;)
if (!empty($row['userID'])) {
$sql = "UPDATE source_clients" .
"SET userid= '" . $NewMembreID . "' " .
"WHERE clt_id = '" . $_SESSION['S_membre']['clt_id'];
$db->exec($sql);
// TODO ajouter la gestion d'erreur : try / catch + test du retour de la méthode exec
}
$cookietime = time() + (86400 * $temp_vie_cookie);
setcookie("MembreID", $NewMembreID, $cookietime);
header("Location: index.php");
} else {
echo " error de mdp ";
}
} else {
echo " pas de résultat donc utilisateur inconnu";
}
} else {
echo 'Erreur SQL : ';
$err = $db->errorInfo();
echo $err[2];
}
$select->closeCursor();
voila comme ça c'est mieux est plus clair
@+
bon aller avec les yeux mieux ouvert se sera mieux.
j'ai confondu exec et execute ... :oops:
donc ce que tu fait est presque correct.
au niveau code pas grand chose à redire par contre ta requête SQL n'est pas bonne .
les marqueurs nommés doivent commencer par ':' ([url=http://fr2.php.net/manual/fr/pdostatement.bindvalue.php]cf doc de bindValue[/url]) or toi tu dois demander une ligne où email = 1 :)
j'ai repris ton code pour qu'il soit plus fonctionnel.
J'ai supposé que l'existance des variables étaient vérifiée avant (genre d'où vient $s_Login, vu sont une variable de session qui n'est pas prise dans $_SESSION ?)
[php]<?php
$db = new PDO("");
$query = 'SELECT email FROM source_clients WHERE email=:email';
$select = $db->prepare($query);
$select->bindValue(':email', md5($s_Login));
$ret = $select->execute();
if ($ret !== false) {
$row = $select->fetch();
if ($row !== false) {
if ($row['pass'] == sha1($_POST['s_Pass'])) {
$_SESSION['mailsutilisateur'] = $_POST['s_Login'];
// attention redondance avec la lige du dessus c'est la même chose sous forme de tableau c'est tout.
$_SESSION['S_membre'] = $row;
$NewMembreID = md5(uniqid(rand(), true));
// Attention ce if est inutile car
// 1 : tu ne selectionne pas le userID dans la requête
// 2 : si tu es la c'est qu'il y a un résultat donc cette doit exister et ne pas être vide (vu son nom c'est la PK non ?)
// 3 : tu utilise $_SESSION['S_membre']['clt_id'] qui ne peux pas exister puisse qu'il n'est pas selectionné dans la requête et que tu écrse S_membre 3 ligne plus haut ;)
if (!empty($row['userID'])) {
$sql = "UPDATE source_clients" .
"SET userid= '" . $NewMembreID . "' " .
"WHERE clt_id = '" . $_SESSION['S_membre']['clt_id'];
$db->exec($sql);
// TODO ajouter la gestion d'erreur : try / catch + test du retour de la méthode exec
}
$cookietime = time() + (86400 * $temp_vie_cookie);
setcookie("MembreID", $NewMembreID, $cookietime);
header("Location: index.php");
} else {
echo " error de mdp ";
}
} else {
echo " pas de résultat donc utilisateur inconnu";
}
} else {
echo 'Erreur SQL : ';
$err = $db->errorInfo();
echo $err[2];
}
$select->closeCursor();[/php]
voila comme ça c'est mieux est plus clair :)
@+