Page 1 sur 1

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

Posté : 31 mars 2011, 20:38
par docdamien93
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")

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

Posté : 31 mars 2011, 23:30
par moogli
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)

@+

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

Posté : 01 avr. 2011, 23:43
par Aureusms
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 ?

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

Posté : 05 avr. 2011, 21:45
par docdamien93
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

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

Posté : 05 avr. 2011, 22:59
par Aureusms
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},...

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

Posté : 18 avr. 2011, 12:15
par docdamien93
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

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

Posté : 18 avr. 2011, 18:03
par Aureusms
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';
}

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

Posté : 18 avr. 2011, 18:47
par popy
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.

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

Posté : 18 avr. 2011, 18:52
par Aureusms
Excat! Cependant, tu dois d'abord tester si $_GET['ID'] existe sinon je pense que tu auras une erreur.

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

Posté : 20 avr. 2011, 15:42
par docdamien93
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 ;)

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

Posté : 20 avr. 2011, 16:45
par popy
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

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

Posté : 21 avr. 2011, 08:08
par Aureusms
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);)

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

Posté : 21 avr. 2011, 13:13
par popy
Je fait du typo3, qui fait (par defaut en mode dev) error_reporting(E_ALL & ~E_NOTICE);

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

Posté : 23 avr. 2011, 16:50
par Aureusms
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...