Un probleme mysql+php retour de requete vide
Résolu
burnedsyn
Messages postés
170
Date d'inscription
Statut
Membre
Dernière intervention
-
burnedsyn Messages postés 170 Date d'inscription Statut Membre Dernière intervention -
burnedsyn Messages postés 170 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Voila j'ai comme configuration de travail ceci :
un machine portable avec win xp pro et wamp 5 installé dessus.
j'ai une base de donnée dans laquelle j'ai plusieurs tables de news (une par langue activée dans la config du site).
le nommage des tables est news$lang (code fr en de etc)
structure générale des tables news
a l'interieur de ces tables j'ai plusieurs records.
tout est ok a l'affichage et a l'ajout des news de bases
je vous explique le mieux possible car cette erreur je ne la comprend vraiment pas.
lorsque que l'on ajoute une news cela se fais a la base en français, et lors de la création de la news les autres tables sont aussi mises a jours avec le drapeau tranlated a zéro.
dans le module de gestion des news lorsque qu'il detectes des news non traduites il le dis et mets un lien avec le paramètre de la langue selectionnée :
http://217.136.35.18/ackros/controladmin/index.php?tp=addnews&lang=en
A partir de ce lien rien ne vas plus
un bete select * from newsen renvois un set vide...
je vous mets le code complet ci après.
ET pourtant ce code d'affichage ci après fonctionne parfaitement...
Voila si quelqu'un a une idée ce serait le bienvenu merci de votre lecture et pardonnez la longueur de ce post
Tim
Voila j'ai comme configuration de travail ceci :
un machine portable avec win xp pro et wamp 5 installé dessus.
j'ai une base de donnée dans laquelle j'ai plusieurs tables de news (une par langue activée dans la config du site).
le nommage des tables est news$lang (code fr en de etc)
structure générale des tables news
CREATE TABLE `newsen` ( `id` int(11) NOT NULL auto_increment, `titre` varchar(50) collate utf8_bin NOT NULL, `textenews` longtext collate utf8_bin NOT NULL, `auteur` int(11) NOT NULL, `date` date NOT NULL, `status` tinyint(1) NOT NULL, `translated` tinyint(1) NOT NULL, PRIMARY KEY (`id`), KEY `titre` (`titre`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin ;
a l'interieur de ces tables j'ai plusieurs records.
tout est ok a l'affichage et a l'ajout des news de bases
je vous explique le mieux possible car cette erreur je ne la comprend vraiment pas.
lorsque que l'on ajoute une news cela se fais a la base en français, et lors de la création de la news les autres tables sont aussi mises a jours avec le drapeau tranlated a zéro.
dans le module de gestion des news lorsque qu'il detectes des news non traduites il le dis et mets un lien avec le paramètre de la langue selectionnée :
http://217.136.35.18/ackros/controladmin/index.php?tp=addnews&lang=en
A partir de ce lien rien ne vas plus
un bete select * from newsen renvois un set vide...
je vous mets le code complet ci après.
<?php if(isset($_GET['lang'])) { //$news=array(); $lang=$_GET['lang']; $query="SELECT * FROM newsen"; //$query="select * from newsen"; $resi= mysql_query($query)or die ('erreur :'.mysql_error()); $nb=0; while($t=mysql_fetch_object($resi)); { var_dump($t); $news[$nb]['id']=$t->id; $news[$nb]['titre']=$t->titre; $news[$nb]['textenews']=$t->textenews; $nb++; echo("<br>"); var_dump($news); } for($a=0;$a<$nb;$a++) { print_r($news); $baseid=$news[$a]['id']; $query="SELECT * from newsfr where id=$baseid"; echo("<br>$query<br>"); $subres=mysql_query($query)or die ('erreur :'.mysql_error()); $tmp=mysql_fetch_object($subres); $news[$a]['basetitre']=$tmp->titre; $news[$a]['basestextenews']=$tmp->textenews; echo <<< EOT <input type="checkbox" name="artid[]" value="$baseid" /> EOT; } exit(); } if(isset($_POST['add'])) { $auteur=$_SESSION['id']; $titre=$_POST['Titre']; $textenews=$_POST['textenews']; $status=1; $translated=1; $query="insert into newsfr value('','$titre','$textenews','$auteur',NOW(),'$status','$translated')"; mysql_query($query) or die (mysql_error()); $sub="select * from sitelang"; $subres=mysql_query($sub) or die(mysql_error()); $a=0; while($row=mysql_fetch_row($subres)) { $lang[$a]=$row[1]; $a++; } $translated=0; for ($b=0;$b<count($lang);$b++) { $lg=$lang[$b]; if($lg!='fr') { $query="insert into news".$lg." value('','$titre','$textenews','$auteur',NOW(),'$status','$translated')"; mysql_query($query) or die (mysql_error()); } } echo <<< EOM news enregistré. <meta http-equiv="refresh" content="02;url=./index.php?tp=addnews"> EOM; exit(); } ?> <hr> <span class="note1">Ajout de news</span><br> L'ajout se fait en français puis les news sont<br> placées dans les tables des différentes langues<br> à fin de traduction.<br> <form name="addnews" action="" method="POST" enctype="application/x-www-form-urlencoded"> Titre : <input type="text" name="Titre" value="" size="50" maxlength="50" min="" max="" accept=""/><br> textenews :<textarea name="textenews" cols="50" rows="10" wrap="SOFT"></textarea> <br> <input type="submit" name="add"/><input type="reset"/> </form> <hr> <span class="note1">Gestion rubrique news</span><br> <?php $sub="select * from sitelang"; $subres=mysql_query($sub) or die(mysql_error()); $a=0; while($row=mysql_fetch_row($subres)) { $lang[$a]=$row[1]; $a++; } $translated=0; for($c=0;$c<$a;$c++) { $tmplang=$lang[$c]; $query="select count(id) from news".$tmplang." where translated='".$tranlated."'"; $tmpres=mysql_query($query) or die(mysql_error()); $obj=mysql_fetch_array($tmpres); if($obj[0]!=0) { echo ("<span class=\"note1\">".$obj[0]." news en attente de traduction langue code : $tmplang </span>"); echo <<< EOT <br> <a href="?tp=addnews&lang=$tmplang">Afficher & traduire</a> EOT; } } ?>
ET pourtant ce code d'affichage ci après fonctionne parfaitement...
<?php $table="news".$_SiteLang; $query="SELECT * FROM $table WHERE status='1'"; $res=mysql_query($query)or die(mysql_error()); while($t=mysql_fetch_object($res)) { if($t->translated!=1) { $color="nottranslated"; } else { $color="translated"; } ?> <span> <table width="400px"> <tr> <td colspan='2' class="newstitle"><?php echo htmlentities($t->titre) ;?></td> </tr> <tr><td colspan='2' class="<?php echo $color;?>" > <?php echo $t->textenews; ?> </td> </tr> <tr> <td><?php echo$t->date; ?></td> <td><?php $query="SELECT * from zcontrole where id=".$t->auteur; $sub=mysql_query($query)or die(mysql_error()); $user=mysql_fetch_object($sub); echo $user->Aname; ?> </td> </tr> </table> </span> <?php } ?>
Voila si quelqu'un a une idée ce serait le bienvenu merci de votre lecture et pardonnez la longueur de ce post
Tim
A voir également:
- Mysql a retourné un résultat vide
- Ecran retourne - Guide
- Supprimer page word vide - Guide
- Resultat foot - Télécharger - Vie quotidienne
- Caractere vide - Guide
- Coeur vide ✓ - Forum Réseaux sociaux
9 réponses
Salut,
pourquoi as tu mis:
collate utf8_bin
essayes en mettant latin_bin1
sinon fais des echos pour voir ce que tu as réellement, si la valeur recherchée existe bien dans le champ
pourquoi as tu mis:
collate utf8_bin
essayes en mettant latin_bin1
sinon fais des echos pour voir ce que tu as réellement, si la valeur recherchée existe bien dans le champ
en fais j'ai repris le code de phpmyadmin directement pour montrer l'exemple de la table... je sais pas pourquoi ce drapeau est activé.
pour les echos j'en ai fais plein avant d'écrire sur ce poste car au départ j'ai eu toujours au meme endroit du code et nulle part ailleur une fausse erreur de syntax un bug de mysql qui en fait renvois une erreur de syntaxe lorsque que l'un des champ a un mot reserver non echappé comme nom.
bref y avait des echo de tous et a tous les moment la query etait bonne je la fais dans phpmyadmin et elle marche (enfin c'est une bete query select * from table...) et elle retourne un set vide null
c'est plus complexe que cela n'en a l'air
pour les echos j'en ai fais plein avant d'écrire sur ce poste car au départ j'ai eu toujours au meme endroit du code et nulle part ailleur une fausse erreur de syntax un bug de mysql qui en fait renvois une erreur de syntaxe lorsque que l'un des champ a un mot reserver non echappé comme nom.
bref y avait des echo de tous et a tous les moment la query etait bonne je la fais dans phpmyadmin et elle marche (enfin c'est une bete query select * from table...) et elle retourne un set vide null
c'est plus complexe que cela n'en a l'air
voici ce qui s'affiche en ajoutant des echo var dump et print r aux endroit ou c'est nécessaire
SELECT * FROM newsen <<< la query fautive
le premier et seul set de donnée en retour avec des valeur null
bool(false) et un dump de news un tableau Array
array(1) { [0]=> array(3) { ["id"]=> NULL ["titre"]=> NULL ["textenews"]=> NULL } } Array ( [0] => Array ( [id] => [titre] => [textenews] => ) )
SELECT * from newsfr where id=
erreur :You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line
Encore une fois cela n'interviens que dans la condition que $GET['lang'] soit reçu le reste du code fonctionne a merveille
SELECT * FROM newsen <<< la query fautive
le premier et seul set de donnée en retour avec des valeur null
bool(false) et un dump de news un tableau Array
array(1) { [0]=> array(3) { ["id"]=> NULL ["titre"]=> NULL ["textenews"]=> NULL } } Array ( [0] => Array ( [id] => [titre] => [textenews] => ) )
SELECT * from newsfr where id=
erreur :You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line
Encore une fois cela n'interviens que dans la condition que $GET['lang'] soit reçu le reste du code fonctionne a merveille
Salut,
as tu mis:
$query="SELECT * from newsfr where id=$_GET['lang']"
essayes:
et avec des majuscules c'est plus facile à lire, donc a debugger
as tu mis:
$query="SELECT * from newsfr where id=$_GET['lang']"
essayes:
$query="SELECT *FROM newsfr WHERE id='".$_GET['lang']."'"
et avec des majuscules c'est plus facile à lire, donc a debugger
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
non et cela ne serait d'aucune aide...
la query etant $query="SELECT * FROM newsen";
je ne vois pas pourquoi ajouter une condition a cela vu que ca lante sur ce select qui tant que la table contient des données devrait retourner un resultat non nul!!!
lis mieux tu verras que la query fautive n'est pas la deuxième celle de newsfr mais bien le retour vide de la première select *from newsen
enfin je veux dire y a rien qui te choque dans ce que j'écris ?
tim
la query etant $query="SELECT * FROM newsen";
je ne vois pas pourquoi ajouter une condition a cela vu que ca lante sur ce select qui tant que la table contient des données devrait retourner un resultat non nul!!!
lis mieux tu verras que la query fautive n'est pas la deuxième celle de newsfr mais bien le retour vide de la première select *from newsen
enfin je veux dire y a rien qui te choque dans ce que j'écris ?
tim
Bonsoir,
une suggestion peut être toute bête:
Puisque tu fais un var_dump($t)
ne faudrait-il pas que tu fasses juste après un reset($t);
pour remettre le pointeur de l'array à zéro ??
une suggestion peut être toute bête:
Puisque tu fais un var_dump($t)
ne faudrait-il pas que tu fasses juste après un reset($t);
pour remettre le pointeur de l'array à zéro ??
non car le var duvar dump est la uniquement pour montrer l'etat de $t en plus ne deplace pas le pointeur interne.
ne trouvant pas de solution j'ai externaliser le process (dans un autre fichier) et la ca marche pourquoi ou qu'est ce je ne sais pas
bref ce thread n'est plus necessaire
tim
ne trouvant pas de solution j'ai externaliser le process (dans un autre fichier) et la ca marche pourquoi ou qu'est ce je ne sais pas
bref ce thread n'est plus necessaire
tim