MySQLi, fonctions et sessions

Fermé
UnEtu - 21 juil. 2014 à 10:09
 UnEtu - 21 juil. 2014 à 10:16
Bonjour,

J'utilisais avant la bibliothèque MySQL de php sans problèmes, mais j'ai du mal aujourd'hui avec MySQLi dans ce bout de code.


function checklogin($username, $password) {
global $ip;
global $dbg;
global $error;

$pw = sha1($password);

$statement = $dbg->prepare('SELECT * FROM user where (username = ?)');
$statement->bind_param('s', $username);
$statement->execute();

$result = $statement->get_result();
$nbrows = mysqli_num_rows($result);

if ($nbrows ==0) {
$error = "Utilisateur non existant";
}

else {
foreach ($result as $row) {
if ($row["password"] == $pw) {


echo ("test : " . $row["username"] ."<br/>");

$_SESSION["username"] = $row["username"];


if (isset($_SESSION["username"])) {
echo("test réussi");
}


//$_SESSION["ID"] = $row["ID"];
//$_SESSION["userType"] = $row["userType"];

}

else {
$error = "Mot de passe ou nom d'utilisateur incorrect";
}
}
}
}

Dans cette fonction, on a bien le echo("test...) qui fonctionne, et après le isset($_SESSION) on a bien test réussi.

Pourtant, dès que je sors de la fonction je ne récupère plus le $_session

J'utilisais ce code avant, qui lui fonctionne sans problème


try {
$db = new PDO("mysql:host=localhost;dbname=erp","root", "");
$statement = $db->prepare("SELECT * FROM user WHERE username = :valeur");
$statement->bindParam("valeur", $_POST["username"]);
$statement->execute();
if ($statement->RowCount() == 0) {
echo("Le nom d'utilisateur ou le mot de passe est erroné");
}
else {
$result = $statement->fetchAll(PDO::FETCH_CLASS);

//$pw a été initié avant
$pw = sha1($pw);
if($result[0]->password == $pw) :
$_SESSION["username"] = $_POST["username"];
header("Location: main.php");
else :
echo("Le nom d'utilisateur ou le mot de passe est erroné");
endif;
}
}

catch(PDOException $e) {
echo($e->getMessage());
}


J'ai essayé sur mon premier code un global $_SESSION, au cas ou la session était reset après la fin de la fonction, mais sans succès, et la du coup je ne comprends pas...

Quelqu'un aurait-il une idée s'il vous plaît?

Cordialement, un étudiant

1 réponse

(le post 5 minutes plus tard...)

Mon premier code étant une fonction plutôt qu'un code directement exécuté sur une page, j'ai rajouté un session_start(); dans la fonction et ça "marche".

Cependant, j'avais déjà fait un session_start(); avant (et nécessaire, donc je ne peut pas l'enlever), donc ça me renvoie un warning.
Y a-t'il une méthode plus propre, ou je dois faire comme ça et trap ce warning?

Cordialement,
un étudiant
0