Warning incomprehensible lors de l'exécution d'une requette [Résolu]

Signaler
Messages postés
30
Date d'inscription
jeudi 24 septembre 2009
Statut
Membre
Dernière intervention
15 janvier 2010
-
Messages postés
30
Date d'inscription
jeudi 24 septembre 2009
Statut
Membre
Dernière intervention
15 janvier 2010
-
Bonjour cher amis, ca marche les affaires...
j'ai une question a vous poser:
ma fonction et comme suit:

public function verifier_utilisateur()
{
require_once('config1.php');
$mysqli= new mysqli(db_host,db_user,db_password,db_database);
if ( isset($_POST['login_utilisateur']) && isset($_POST['passwd_utilisateur']))
{
[color=red]$req= "select count(*) from utilisateur as nbre where (login_utilisateur='$this->login_utilisateur' and passwd_utilisateur='$this->passwd_utilisateur')";
$mysqli->query($req);
//le probléme je crois est ici

$resultat=mysqli_fetch_array('$req');

if ($resultat['nbre']!=0)
{
echo " <center> Utilisateur Connecté </center>";
include "Acceuil.html";
}
else
{
$message ="<center>Login ou mot de passe incorrect!...</center>";
echo "<center>$message</center>";
include "inscription.html";
}
}
else
{
$message1= "Veuillez taper les paramètres d'authentification";
echo"
<center> $message1 <center>";
}

} /color


voila le message d'erreure:

Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, string given in C:\Program Files\EasyPHP5.3.0\www\analyseur_syntaxique\class_utilisateur.php on line 67

ma requette marche car je l'ai executé à pars ca donne le bon resultat mais je crois que le probléme est l'utilisation
de $resultat =mysqli_fetch_aray($req)
Veuillez m'expliquer le probléme.
Merci d'avance.
Karim

2 réponses

Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
17
Salut,

Pour que tout fonctionne bien, il faut :
- éviter d'utiliser des propriétés d'objets dans une chaîne de caractères, ou alors avec la bonne syntaxe :
$req= "select count(*) from utilisateur as nbre where (login_utilisateur='{$this->login_utilisateur}' and passwd_utilisateur='{$this->passwd_utilisateur}')"; 


- récupérer le résultat de la requête... mysqli::query() renvoie une ressource résultat, que tu pourras manipuler :
$result = $mysqli->query($req);


- utiliser mysqli::fetch_arry() sur le résultat obtenu, et pas sur une chaine :
$resultat = mysqli_fetch_array($result);


Pour que ton code soit plus propre et plus sécurisé, il faut aussi que tu vérifies les erreurs qui peuvent se produire (notamment lors de l'exécution de la requête). Il faut aussi protéger les données que tu insères dans ta requête pour éviter tout risque d'injection SQL, avec mysqli::real_escape_string()

Enfin, un coup tu utilises la version objet de mysqli, un coup tu utilises la version procédurale. Mets-toi d'accord avec toi-même sur ce que tu utilises, histoire que ce soit plus clair ;)

--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
Messages postés
30
Date d'inscription
jeudi 24 septembre 2009
Statut
Membre
Dernière intervention
15 janvier 2010

Sava c bon Neige j'ai utilisé la classe mysql au lieu de mysqli et c'a marché.
Merci t'es toujours là lorsque je pose la question 1000 Merci.
Karim .
Bonne journée