Erreur mysql_fetch_object

Résolu/Fermé
reminho69 Messages postés 17 Date d'inscription mercredi 11 mai 2011 Statut Membre Dernière intervention 11 mai 2011 - 11 mai 2011 à 08:46
reminho69 Messages postés 17 Date d'inscription mercredi 11 mai 2011 Statut Membre Dernière intervention 11 mai 2011 - 11 mai 2011 à 17:31
Bonjour,
J'ai un code pour exporter le résultat d'une requête dans un fichier en .csv mais j'ai une erreur : mysql_fetch_object() : supplied is not a valid mysql result ressource in...

Et le problème vient de ma ligne :

while($row = mysql_fetch_object($req))

et voici la partie du code qui permet l'exportation :

//exportation
if (isset($_POST['exporter']))
{
// Titre des colonnes de votre fichier .CSV ou .XLS
$fichier = "Attestation n°; Référence Q2C; Nom opération; Ville; Code postal; Département; Nombre de téléchargement; Date d'ajout; Nom Adhérent";
$fichier .= "\n";

// Requête SQL
$req = mysql_query($requete);

// Enregistrement des résultats ligne par ligne
while($row = mysql_fetch_object($req))
{
$fichier .= "".$row->id_attestation.";".$row->ref_Q2C.";".$row->nom_operation.";".$row->ville.";".$row->code_postal.";".$row->departement.";".$row->nbre_telechargement.";".$row->dateajout.";".$row->le_demandeur."\n";
}

// Déclaration du type de contenu
header("Content-type: application/vnd.ms-excel");
header("Content-disposition: attachment; filename=requete.csv");
print $fichier;
exit;
}

$requete comporte bien ma requête sql et celle ci fonctionne je l'ai testé.

Help me please

29 réponses

reminho69 Messages postés 17 Date d'inscription mercredi 11 mai 2011 Statut Membre Dernière intervention 11 mai 2011
11 mai 2011 à 15:10
les sessions je les utilises ailleurs dans le site, pour les comptes utilisateurs etc

Quand on clic sur valider ça affiche le résultat de la requête dans un tableau en dessous. Et oui il est dans la même page.
0
Les variables de session ne s'envolent pas comme ça...
Pour piéger ce qui se passe, peux-tu ajouter vers le début de ton script (mais après le démarrage des sessions...)

if (isset($_POST['exporter'])) {
echo '<pre>';
print_r ($_SESSION);
echo '</pre>';
}
Ça permettra de savoir si la variable est bien passée.
0
reminho69 Messages postés 17 Date d'inscription mercredi 11 mai 2011 Statut Membre Dernière intervention 11 mai 2011
11 mai 2011 à 16:31
j'ai trouvé une solution avec la méthode get et j'effectue le traitement sur une autre page.

Tout fonctionne en local et en ligne j'ai l'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 '\'Nord\'' at line 1"

;(
0
Tu as abandonné la méthode précédente, c'est donc que tu acceptes qu'il se passe dans ton script des choses que tu ne comprends pas. C'est une très bonne méthode pour avoir des ennuis.
Ceci étant dit (je comprends que tu as envie d'avancer)), cette fois, c'est une erreur SQL
Affiche la requête, tu verras bien où est l'erreur.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
reminho69 Messages postés 17 Date d'inscription mercredi 11 mai 2011 Statut Membre Dernière intervention 11 mai 2011
11 mai 2011 à 17:02
le problème vient de la requête

SELECT id_attestation, ref_Q2C, nom_operation, dateajout, nbre_telechargement, ville, code_postal, departement, le_demandeur FROM videos, jos_comprofiler, jos_users WHERE jos_users.id=jos_comprofiler.id AND jos_users.username=videos.name_createur AND ville=\'Boulogne Sur Mer\'

il me met des \ donc ça bug, je sais pas d'où cela sors

code de l'url pour l'envoie :
<?php
<a href=\"exporter.php?requete=".$_SESSION['requete']."\">Exporter la requête</a><br /><br />"
?>
0
C'est une question de configuration de ton PHP, tu as "magic_quotes" actif c'est à dire qu'il ajoute automatiquement des \ devant les apostrophes dans les GET (entre autres...)
Il faut faire strip_slashes pour retirer ces slashes quand tu récupères la requête par GET.

Mais si tu ne maîtrises pas ce genre de choses, tu risques d'avoir des surprises si tu as par exemple un nom de ville avec une apostrophe..

D'autre part, passer une requête en clair dans une URL, c'est inciter au piratage de ton site. Très tentant de taper soi-même des requêtes dans l'URL pour introduire des données que tu ne contrôles pas, pour effacer des tables ou pour les lister ...
0
reminho69 Messages postés 17 Date d'inscription mercredi 11 mai 2011 Statut Membre Dernière intervention 11 mai 2011
11 mai 2011 à 17:26
Je vais le faire en poste et tester ta méthode, je l'ai déja fait ca me dit quelque chose
0
Le faire par POST au lieu de GET ne changera pas grand chose à la confidentialité. La seule différence, c'est que ça ne saute pas aux yeux, mais quand on a remarqué la requête, c'est aussi facile à pièger.
Le moyen le plus raisonnablement fiable reste celui des sessions. Ou alors, code tes requêtes (avec un codage convenable, ça t'évitera les injections de slashes, d'ailleurs)
0
reminho69 Messages postés 17 Date d'inscription mercredi 11 mai 2011 Statut Membre Dernière intervention 11 mai 2011
11 mai 2011 à 17:31
Merci ça marche !

J'ai rajouté :
$requete=stripslashes($_POST['requete_cache']);


J'aurais dû y pensé avant, je l'ai déja utilisé en plus

Merci pour ton aide !

A l'occasion je je peux t'aider, n'hésite pas
0