Page 1 sur 1

aide mysql_fetch_array

Posté : 05 oct. 2007, 23:38
par Evoy
Bonjour j'aimerais savoir quest qui cloche ac mon script, car meme si le nom existe pas sur la table i va dire qui existe.! Merci d'avance
<?php
include 'config.php';
$name = $_POST['prenom'];
$char= $_POST['choix'];

$result= mysql_query("SELECT `nom` FROM `rpg` WHERE `nom` LIKE' $name';");

if (mysql_fetch_array($result) = $name)

{
echo "votre nom est deja utiliser!";
}

else 
{
switch ($char) 
{

case "Archer": 
mysql_query("INSERT INTO rpg VALUES('', '$name', '$char', '10', '35', '10', '20')");
break;

case "Barbare": 
mysql_query("INSERT INTO rpg VALUES('', '$name', '$char', '25', '10', '5', '25')"); 
break;

case "Mage": 
mysql_query("INSERT INTO rpg VALUES('', '$name', '$char', '10', '5', '35', '13')");
break;
}
}
?>

Posté : 05 oct. 2007, 23:48
par momox
La function mysql_fetch_array comme son nom l'indique renvoie un tableau ;)
Autre chose, il faut proteger tes entrées utilisées dans des requetes SQL car tu ne peux en controller le contenu, a cet effet je te conseille d'utiliser mysql_real_escape_string :)
@++

Posté : 06 oct. 2007, 00:59
par Evoy
Merci pour ta reponse je vais lire tout de suite comment utiliser mysql_real_escape_string mais , si il renvoi un tableau alors quest que jpourrais utiliser pour que mon script marche :( ??? avec exemple si possible

Merci davance

Posté : 06 oct. 2007, 04:44
par Patriboom
Pour exploiter le tableau mysql_fetch_array, tu fais ainsi:

$TableauResult = mysql_fetcharray($result);
if ($TableauResult->nom == $name)  {
les choses à faire si la condition est remplie
}


Donc, deux corrections: la comparaison se fait par signes d'égalité doubles ( == ) et l'utilisation du tableau, en réclamant chaque élément par son extension. Tout est dans la fonction IF ci-haut.

Posté : 06 oct. 2007, 10:36
par momox
Attention, si tu veux faire $TableauResult->nom c'est plutôt mysql_fetch_object ;)
Pour l'utilisation de mysql_real_escape_string, c'est de la facon suivante:
$string = mysql_real_escape_string($_POST['string']);
Voila ;)
Sinon, avez mysql_fetch_array, c'est de la facon suivante:
$result = mysql_fetch_array($query); // retourne la premiere ligne de resultats de la requete
if($result['filed'] != $var) {
//on effectue le traitement si l'enregistrement n'est pas présent
}
else {
//on affiche l'erreur
}
Dans la condition if, j'ai fait une inégalité, car si mysql_real_escape_string renvoie une erreur, ton enregistrement ne sera pas effectué tandis qu'avec ta méthode si la fonction renvoyait une erreur ton script effectuait l'enregistrement, ce qui cause un problème ;)
Sinon, il y a l'autre méthode, via mysql_num_rows qui te renvoie le nombre de lignes retournées par la requete, qui me parait plus adaptée a ton cas ;)
Jette un oeil sur la doc php ;)
@+

Posté : 06 oct. 2007, 13:16
par Evoy
Alors jai fais comme vous m'avez dit, helas sa me retourne toujours que le pseudo existe peu importe ce que jecrit!!
<?php
include 'config.php';
$name = $_POST['prenom'];
$char= $_POST['choix'];



$result= mysql_query("SELECT `nom` FROM `rpg` WHERE `nom` LIKE' $name';");

$TableauResult = mysql_fetch_array($result); 
if ($TableauResult->nom = $name)  { 

echo "votre nom est deja utiliser!";
}

else 
{
switch ($char) 
{

case "Archer": 
mysql_query("INSERT INTO rpg VALUES('', '$name', '$char', '10', '35', '10', '20')");
break;

case "Barbare": 
mysql_query("INSERT INTO rpg VALUES('', '$name', '$char', '25', '10', '5', '25')"); 
break;

case "Mage": 
mysql_query("INSERT INTO rpg VALUES('', '$name', '$char', '10', '5', '35', '13')");
break;
}
}
?>

Posté : 06 oct. 2007, 13:18
par Tracker
Faut arrêter d'écrire ça
if ($TableauResult->nom = $name) 
La comparaison en php c'est l'opérateur == ou (=== pour l'indentité)
:wink:

Et puis tu as d'autres problèmes:
mysql_fetch_array() te retourne un tableau ou false si rien n'a été lu.
Donc
$TableauResult->nom devrait plutot se transformer en $TableauResult['nom'], mais vu que $TableauResult peut être égale à false, $TableauResult['nom'] ne veut rien dire.

remplace le test par:
...
$result= mysql_query("SELECT `nom` FROM `rpg` WHERE `nom` LIKE '".mysql_escape_string($name)."'");

if (mysql_num_rows($result) != 0) 
{ 
   echo "votre nom est deja utiliser!";
} 
...
a+

Posté : 06 oct. 2007, 16:02
par Patriboom
Attention, si tu veux faire $TableauResult->nom c'est plutôt mysql_fetch_object ;)
Pour l'utilisation de mysql_real_escape_string, c'est de la facon suivante:
$string = mysql_real_escape_string($_POST['string']);
Oups!! S'cusez :oops: