Page 1 sur 1

requete sql ok mais requete via php qui ne retourne rien....

Posté : 18 déc. 2008, 11:44
par boblenain
Bonjour,


je suis perplexe quand à ce qui m'arrive quand j'exécute ce code via php je ne reçoit même pas de message d'erreur et la même requête via sql me donne le bon résultat. Comment puis-je m'y prendre? Merci d'avance pour vos réponses.

ma requête :
function do_description($nom){

$description = "SELECT description
	  	 		FROM produit
	 	 		WHERE nom_produit='$nom' AND description IS NOT NULL";
		
$result_description = mysql_query($description)
      					or die ("Exécution de la requête description impossible");		

	while ($line = mysql_fetch_array($result_description, MYSQL_BOTH)){
		$description = $line['description'];

// Affichage du texte descriptif
		echo "$description<br>";
	}
}
?>

en considérant que pour le test avec sql j'ai remplacé $nom par une valeur choisie par mes soins...

Code : Tout sélectionner

# phpMyAdmin MySQL-Dump # version 2.4.0 # http://www.phpmyadmin.net/ (download page) # # Serveur: localhost # Généré le : Jeudi 18 Décembre 2008 à 10:44 # Version du serveur: 5.0.45 # Version de PHP: 5.2.5 # Base de données: `applimo` # -------------------------------------------------------- # # Structure de la table `produit` # CREATE TABLE produit ( numero int(50) NOT NULL auto_increment, produit_id varchar(100) NOT NULL default '', nom_produit varchar(100) NOT NULL default '', type_produit varchar(100) NOT NULL default '', gxtype text, nom_img varchar(100) NOT NULL default '', gamme enum('domestique','sdb','cable','tertiaire','accu','ecs','prog','collectivite') NOT NULL default 'domestique', sousgamme enum('radiateurs','rayonnants','convecteurs_dom','sèche-serviettes','convecteurs sèche-serviettes','convecteurs soufflants','infrarouges_sdb','câbles chauffants','régulations','infrarouges','k7rayonnantes','air chaud','eau chaude','convecteurs','accumulateurs','ecs','programmation','collectivite') NOT NULL default 'radiateurs', info text NOT NULL, description text NOT NULL, swf varchar(50) default NULL, caract text, caractstar varchar(250) default NULL, installation text, installstar varchar(250) default NULL, boitier_txt text, boitier_swf varchar(50) default NULL, boitier_thumb varchar(100) default NULL, boitier_photo varchar(100) default NULL, boitier_rexel varchar(100) default NULL, schema_rexel varchar(100) default NULL, lien_boitier varchar(50) NOT NULL default '', normalisation_txt varchar(200) NOT NULL default '', normalisation_titre1 varchar(50) default NULL, normalisation_label varchar(100) default NULL, normalisation_titre2 varchar(200) default NULL, normalisation_label2 varchar(100) default NULL, photo varchar(100) NOT NULL default '', photo_rexel varchar(100) NOT NULL default '', photo1 varchar(100) default NULL, photo1_thumb varchar(100) default NULL, photo2 varchar(100) default NULL, photo2_thumb varchar(100) default NULL, photo3 varchar(100) default NULL, photo3_thumb varchar(100) default NULL, prog_k7 varchar(50) NOT NULL default '', lien_k7 text NOT NULL, prog_prodel varchar(50) NOT NULL default '', lien_prodel varchar(50) NOT NULL default '', progtout varchar(50) NOT NULL default '', lien_progtout varchar(50) NOT NULL default '', prog_multiEco varchar(50) NOT NULL default '', lien_multiEco varchar(50) NOT NULL default '', tableau_etoile text, lien_tableau varchar(50) default NULL, download1 varchar(50) default NULL, download2 varchar(50) default NULL, download3 varchar(50) default NULL, download4 varchar(50) default NULL, windowtitle varchar(250) NOT NULL default '', PRIMARY KEY (numero) ) ENGINE=MyISAM AUTO_INCREMENT=56 DEFAULT CHARSET=latin1;
[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Posté : 18 déc. 2008, 12:11
par guilt92
Bonjour,

Es tu sur de la bonne valeur de $nom ?

Peux tu faire un echo $description et nous montrer le résultat (avant la ligne $result_description=...)

Posté : 18 déc. 2008, 12:30
par boblenain
Hello guilt,


en faisant ton "echo" je n'ai même pas un message à l'écran. je ne pense pas m'être trompé en écrivant
 $description = "SELECT description
	  	 		FROM produit
	 	 		WHERE nom_produit='$nom' AND description IS NOT NULL";
                
echo $description;
non?

Pour que tu vois mieux de quoi il retourne quand au site tu peux aller ici : http://www.applimo.fr/pages/ecs.php?nom=Cylia%20R

normalement il y a du texte à droite de la photo pour tous les produits mais là ça ne s'affiche pas.

Merci en tous cas pour ta réponse plus que rapide! :wink: [/php]

Posté : 18 déc. 2008, 12:35
par guilt92
Ok donc le problème vient donc dans un premier temps non pas de la requete mais juste de l'affichage dans cette zone, si le fait de faire un echo n'apparait pas...

Peux tu poster le code de la page où tu appelles cette fonction do_description (en gros la partie ou tu crées le tableau avec l'image et la description du produit...) ?

Posté : 18 déc. 2008, 12:44
par boblenain
et voici le code
<?php

	if (isset($_GET['nom'])){
		$nom = $_GET['nom'];
	}
	else {
			$nom = 'Gialix E.C.S.';
	}

	if (isset($_GET['thumb']))
		$thumb = $_GET['thumb'];
	else {	
			$thumb = '';
	}

	include 'header2.php';
	$gamme = 'ecs';
	include 'header_buttons.php';

?>
			<table width="850" border="0" cellspacing="0" cellpadding="0" bgcolor="#000000" valign="top">
				<tr>
					<td valign="top">
						<?
							include_once 'leftlinks_ecs.php';
						?>
					</td>
					<td width="685" bgcolor="#EFEFEF" border="0" cellspacing="0" cellpadding="0" align="left" valign="top">
						<table width="685" bgcolor="#EFEFEF" border="0" cellspacing="0" cellpadding="0" valign="top">
                      		<tr>
                       		    <td colspan="2" width="685" class="title" align="left" valign="top" cellspacing="0" cellpadding="0">
									<? do_titre($nom); ?>
                        		</td>
                      		</tr>
                      		<tr>
                      			<td valign="top" cellspacing="0" cellpadding="0">
									<? do_photo($nom, $thumb); ?>
									<? do_liens($nom); ?>
                      			</td>
                      			
                      			<td class="text" valign="top" cellspacing="0" cellpadding="0">
									<? do_gxtype($nom); ?>
                      				<? do_description($nom); ?>
									<? do_caract($nom); ?>
									<? do_install($nom); ?>
									<? do_normalisation($nom); ?>
								</td>
							</tr>
                      		<tr>
                      			<table width="685" colspan="2" align="left" valign="middle" border="0" cellspacing="0" cellpadding="0">
									<tr>
                     					<td class="printelement" valign="bottom" align="right">
                     						<a href="javascript:window.print()"><img src="../image/bouton/puce_print.gif" width="20" height="17" border="0" align="middle"/><br>imprimer</a>
                     					</td>
                     				</tr>
                     			</table>
                     		</tr>
						</table>
					</td>
				</tr>
			</table>
		</td>
	</tr>
</table>
<?php

	include_once 'footer.php';

?>

Posté : 18 déc. 2008, 12:51
par charabia
Si le nom de ton produit est "Cylia'R", en mettant ça dans la requête on aura :
SELECT description FROM produit WHERE nom_produit='Cylia'R'
Donc erreur

Posté : 18 déc. 2008, 12:57
par guilt92
Si on regarde le code source généré de ta page on s'apercoit qu'il s'arrete à

Code : Tout sélectionner

<td class="text" valign="top" cellspacing="0" cellpadding="0">
A tel point que le tableau n'est pas fini et qu'il n'y a pas le footer etc...

le probleme vient donc d'une des fonctions do_gxtype($nom) ou do_description($nom)

La fonction do_description ne me semble pas poser de problème et a un or die() donc au pire elle afficherait quelque chose, ce qui n'est pas le cas...

Que se passe-t-il si tu mets en commentaires l'appel à la fonction do_gxtype ? Et que fait cette fonction ?

Edit : Effectivement charabia a raison le problème peut venir de ' , mais c'est étrange qu'il n'y est pas de parse error non ? Tu as desactivé l'affichage des erreurs ?

Posté : 18 déc. 2008, 12:57
par charabia
Le mieux serait d'utiliser l'ID à la place du nom du produit, unique et comme il s'agit d'un entier, plus de souci de quotes et autre.

Posté : 18 déc. 2008, 13:06
par boblenain
merci!

voilà le résultat en supprimant la fonction gxtype
http://www.applimo.fr/pages/ecs.php?nom=Cylia%20R

on a bien un affichage du descriptif donc

la fonction gxtype a pour but de creer un surtitre avant la description

Posté : 18 déc. 2008, 13:09
par guilt92
Et on a surtout un code généré qui se termine correctement avec tous les </td></table> et compagnie...

Donc je pense que le problème vient de la fonction gxtype, peux tu en poster le code ? :)

Posté : 18 déc. 2008, 14:11
par boblenain
Avec du retard car pause déjeuner voici enfin la fonction gxtype!

<?///////////////////////////////////// description produit ///////////////////////////////////////////////
function do_gxtype($nom){

$gxtype = "SELECT gxtype
	  	 		FROM produit
	 	 		WHERE nom_produit='$nom'";
                
	
$result_gxtype = mysql_query($gxtype)
      					or die ("Exécution de la requête gxtype impossible");		

	while ($line = mysql_fetch_array($result_gxtype, MYSQL_BOTH)){
		$gxtype = $line['gxtype'];

// Affichage du texte gxtype
		echo "$gxtype<br>";
	}
}
?>

Posté : 18 déc. 2008, 15:41
par guilt92
Si la description apparait bien lorsque tu mets l appel a cette fonction en commentaires c'est que c'est de là que viens le probleme.
Je ne vois rien comme ca de choquant mais il y a forcement une erreur, teste la requete en base regarde ce qui peut ne pas marcher...

Sinon effectivement essaye de te baser sur les id plus que sur les noms parce que ça pourrait poser problème...

Posté : 18 déc. 2008, 15:53
par boblenain
désole car la fonction gxtype que j'ai posté est ma version corrigée et elle fonctionne! - une erreur de renommage dans mon php. Ce topic peut donc être fermé. Merci beaucoup pour votre aide précieuse.