problèmes de base de donnée / $_GET

docdamien93
Invité n'ayant pas de compte PHPfrance

31 mars 2011, 20:38

Bonsoir,

je code actuellement la nouvelle version de mon site (http://games.ciaonetwork.com/dev/) et je fais face à un problème qui commence lentement à m'énerver :?

Dans mon script, je vais chercher les informations correspondant à chaque jeu en faisant cette requête:
SELECT * FROM jeu, categories WHERE jeu.jeu_ID = '{$_GET['ID']}' AND jeu.jeu_categorie = categories.cat_nom_court
Cette requête me retourne les informations de chaque jeu mais pas pour tous les enregistrements. En effet, cette page est fonctionelle: http://games.ciaonetwork.com/dev/X_Raye-33 alors que celle-ci ne l'est pas: http://games.ciaonetwork.com/dev/La_rev ... e_Chien-90
J'ai pourtant vérifié que les enregistrements existaient bien... Bref, je suis au bout de mon peu de latin :)

Si vous avez des pistes de résolution, je suis preneur !!!!

Merci bcp,
Damien

(PS: le mode sans erreur étant activé sur mon hébergeur, voici ce que je vois en me connectant en local: "Notice: Undefined index: jeu_nom in C:\Program Files\wamp\www\ciaogamesv2\jeu.php on line 142")

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

31 mars 2011, 23:30

salut,

quel est la ligne 142 ?

Tu ne devrais pas employer une valeur que tu ne maitrise pas directement dans la requête => mysql_real_escape_string

affiche la requête avant de l'utiliser tu y verra peut être un problème ! (essais la dans phpmyadmin ou une console sql)

@+
Il en faut peu pour être heureux ......

ViPHP
ViPHP | 1996 Messages

01 avr. 2011, 23:43

Waouh c'est dangereux de mettre '{$_GET['ID']}' directement dans la requête.
Fais un test de préexistence avant.

'{$_GET['ID']}' veut dire que tu as un ?id=qqchose dans l'url mais je ne le vois pas. Fais tu une réécriture d'url ?
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

docdamien93
Invité n'ayant pas de compte PHPfrance

05 avr. 2011, 21:45

Bonsoir,

Voici la ligne 142:

Code : Tout sélectionner

Voir les <a href="categorie-<?php echo $row_jeu['cat_nom_court']; ?>" title="<?php echo $row_jeu['cat_nom_complet']; ?>">autres jeux de la même catégorie</a>
Elle ne fait qu'afficher un bout de ma requête que voici en intégralité:
mysql_select_db($database_cg_v2, $cg_v2);
$query_jeu = "SELECT * FROM jeu, categories WHERE jeu.jeu_ID = '{$_GET['ID']}' AND jeu.jeu_categorie = categories.cat_nom_court";
$jeu = mysql_query($query_jeu, $cg_v2) or die(mysql_error());
$row_jeu = mysql_fetch_assoc($jeu);
$totalRows_jeu = mysql_num_rows($jeu);
Effectivement, je fais une réécriture d'URL, voici mon .htaccess:

Code : Tout sélectionner

RewriteEngine on RewriteRule ^(.*)-([0-9]+)$ jeu.php?ID=$2 [L]
Voila ;)

Damien

ViPHP
ViPHP | 1996 Messages

05 avr. 2011, 22:59

Essaye cela :
mysql_select_db($database_cg_v2, $cg_v2);
$id = (!empty($_GET['ID'])) ? mysql_escape_string ($_GET['ID']) : FALSE;
if ($id)
{
$query_jeu = "SELECT * FROM jeu, categories WHERE jeu.jeu_ID = '{".$id."}' AND jeu.jeu_categorie = categories.cat_nom_court";
$jeu = mysql_query($query_jeu, $cg_v2) or die(mysql_error());
$row_jeu = mysql_fetch_assoc($jeu);
$totalRows_jeu = mysql_num_rows($jeu);
}
else
{
echo 'pas ID';
}
En supposant que dans ta table des ID soient inscrits de la sorte : {1}, {2},...
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

docdamien93
Invité n'ayant pas de compte PHPfrance

18 avr. 2011, 12:15

Bonjour,

ta modification ne fait aucun effet. je comprends rien!! je ne vois pas "pas ID" donc il est bien accepté par la requête mais elle ne retourne quand même aucun résultat :|
Le problème serait-il lié à ma table MySQL? Dans le doute, je vous en poste un extrait.
CREATE TABLE IF NOT EXISTS `jeu` (
  `jeu_ID` mediumint(9) NOT NULL AUTO_INCREMENT,
  `jeu_nom` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  `jeu_but` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  `jeu_trucs` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  `jeu_categorie` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT 'course',
  `jeu_adresseabs` varchar(250) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  `jeu_views` int(11) NOT NULL DEFAULT '1',
  `jeu_star` varchar(1) COLLATE utf8_swedish_ci NOT NULL DEFAULT '0',
  `jeu_votes` int(11) NOT NULL DEFAULT '1',
  `jeu_redac` int(1) NOT NULL,
  UNIQUE KEY `jeu_ID` (`jeu_ID`),
  UNIQUE KEY `jeu_adresseabs` (`jeu_adresseabs`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_swedish_ci AUTO_INCREMENT=105 ;
et voici un extrait de données:
INSERT INTO `jeu` (`jeu_ID`, `jeu_nom`, `jeu_but`, `jeu_trucs`, `jeu_categorie`, `jeu_adresseabs`, `jeu_views`, `jeu_star`, `jeu_votes`, `jeu_redac`) VALUES
(100, 'Apprendre &agrave; Voler!', 'Apprends au pingouin &agrave; voler! Pour cela, achète lui un deltaplane, des réacteurs et autres ;)', 'Utilise les flèches de direction gauche et droite pour ajuster l''angle de vol', 'sport', '/swf/voler.swf', 1655, '1', 1, 0),
Merci pour votre aide par avance,
Damien

ViPHP
ViPHP | 1996 Messages

18 avr. 2011, 18:03

Je pense avoir trouver :

Tu cherches
jeu.jeu_ID = '{".$id."}'
Mais tu as : jeu.jeu_ID = 100

Essaye sans les {} en vérifiant que jeu_ID est bien un nombre!!! (utilise is_numeric($_GET['id']) ce qui donnerai :
mysql_select_db($database_cg_v2, $cg_v2);
$id = (!empty($_GET['ID']) && is_numeric($_GET['ID'])) ? mysql_escape_string ($_GET['ID']) : FALSE;
if ($id)
{
$query_jeu = "SELECT * FROM jeu, categories WHERE jeu.jeu_ID = '".$id."' AND jeu.jeu_categorie = categories.cat_nom_court";
$jeu = mysql_query($query_jeu, $cg_v2) or die(mysql_error());
$row_jeu = mysql_fetch_assoc($jeu);
$totalRows_jeu = mysql_num_rows($jeu);
}
else
{
echo 'pas ID';
}
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Eléphant du PHP | 275 Messages

18 avr. 2011, 18:47

perso, je commencerais par un $id = intval($_GET['id']);, pour m'assurer du type de ma variable.

Et du coup, pas besoin de quotes ou d'echappement particulier.

ViPHP
ViPHP | 1996 Messages

18 avr. 2011, 18:52

Excat! Cependant, tu dois d'abord tester si $_GET['ID'] existe sinon je pense que tu auras une erreur.
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

docdamien93
Invité n'ayant pas de compte PHPfrance

20 avr. 2011, 15:42

Bonjour,

Merci beaucoup pour votre aide, ça marche :)
Le problème venait apparemment effectivement des { }.

Damien

PS: si un modérateur pouvait mettre ce topic "résolu" svp ;)

Eléphant du PHP | 275 Messages

20 avr. 2011, 16:45

Excat! Cependant, tu dois d'abord tester si $_GET['ID'] existe sinon je pense que tu auras une erreur.
Une notice en effet. En général elles ne sont pas affichées, mais j'utilise quand meme des isset par souci de performances.

Ceci dit, vu le niveau de la question je ne me suis pas attardé sur ce genre de considérations

ViPHP
ViPHP | 1996 Messages

21 avr. 2011, 08:08

Excat! Cependant, tu dois d'abord tester si $_GET['ID'] existe sinon je pense que tu auras une erreur.
Une notice en effet. En général elles ne sont pas affichées, mais j'utilise quand meme des isset par souci de performances.

Ceci dit, vu le niveau de la question je ne me suis pas attardé sur ce genre de considérations
Pax faux! :wink:
Pour l'affichage (ou pas) des erreurs, utilises-tu error_reporting(0); ou similaire ? (error_reporting(E_ERROR | E_WARNING | E_PARSE);)
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Eléphant du PHP | 275 Messages

21 avr. 2011, 13:13

Je fait du typo3, qui fait (par defaut en mode dev) error_reporting(E_ALL & ~E_NOTICE);

ViPHP
ViPHP | 1996 Messages

23 avr. 2011, 16:50

Moi j'ai suivi les conseils d'un membre de phpFrance en utilisant plutôt error_reporting ($nombre); mais les resultats est souvent la même chose...
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr