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

Bonjour

Ton message d'erreur signifie clairement que, contrairement à ce que tu dis, ta requête ne se passe pas si bien que ça.
remplace
$req = mysql_query($requete);
par
echo htmlentities($requete),'<br />';
$req = mysql_query($requete) or die (mysql_error(); 
et dis-nous ce qui se passe
0
reminho69 Messages postés 17 Date d'inscription mercredi 11 mai 2011 Statut Membre Dernière intervention 11 mai 2011
11 mai 2011 à 09:37
Bonjour,
merci de la réponse

Donc j'ai fait ce que vous m'avez dit et dans la page en elle même il ne se passe rien mais dans mon fichier l'erreur a disparu et elle est remplacée par une requête sql.

Mais ce qui est bizarre c'est que cette requête sors de je ne sais où.

Je m'explique :
J'ai mis un "echo $requete" avant le script et voici le résultat :
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 departement = 'Nord'

Or la requête retourné par votre code est celle-ci :

SELECT id_attestation, ref_Q2C, nom_operation, dateajout, nbre_telechargement, ville, code_postal, departement, le_demandeur FROM videos

Cette requête est celle par défaut qui charge toutes mes données dans le tableau.

Le problème doit venir des variables car $requete par défaut la requête pour afficher toutes les données et lorsque que l'on effectue une recherche par critère $requete reçoit la requête de cette recherche.
0
cette requête sors de je ne sais où. De ton programme ^^
Les modifications que je t'ai fait faire n'ont aucune raison d'avoir fait disparaître l'erreur, elles servaient juste à diagnostiquer. Tu as dû faire une modif quelque part, ou il y a une condition d'appel qui a changé.
Enlève le
 echo htmlentities($requete),'<br />';
et recommence pour voir.
0
reminho69 Messages postés 17 Date d'inscription mercredi 11 mai 2011 Statut Membre Dernière intervention 11 mai 2011
11 mai 2011 à 09:54
Ca m'affiche : "Query was empty"
0

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

Posez votre question
Très bizarre, ton histoire. Le coup d'avant, il y avait bien une requête (pas pas celle que tu attendais), maintenant il n'y en a plus ! Je continue à penser qu'à chaque fois, il y a des conditions qui changent.
Il faudrait voir ton code depuis le début pour comprendre d'où sort ta requete, et quelles conditions font que tu génères une requête ou une autre - ou aucune.
0
reminho69 Messages postés 17 Date d'inscription mercredi 11 mai 2011 Statut Membre Dernière intervention 11 mai 2011
11 mai 2011 à 10:32
Voici tous le code :

<?php
header('content-type: text/html; charset: utf-8');
require_once("config/bdd.php");
require_once("config/config.php");
require_once("config/session.php");


$sql = ("SELECT * FROM videos");
$rs = mysql_query( $sql , $conn_bdd );


if (isset($_POST['debut_jj']))
{
// type de document
if ($_POST['type_document'] == "Tous les documents")
$where = "";
if ($_POST['type_document'] == "Declaration de nouveau site")
$where = " AND id_attestation LIKE 'N%'";
if ($_POST['type_document'] == "Declaration de conformite")
$where = " AND id_attestation LIKE 'D%'";
if ($_POST['type_document'] == "Attestation de conformite")
$where = " AND id_attestation LIKE 'A%'";
if ($_POST['type_document'] == "Certificat de conformite")
$where = " AND id_attestation LIKE 'C%'";

// nom de l'editeur
if ($_POST['username'] == "Tous les membres")
{
$where .= "";
} else {

$where .= " AND name_createur = '".$_POST['username']."'";

}

// nom du groupement
if ($_POST['groupement'] == "Tous les groupements")
{
$where .= "";
} else {

$where .= " AND cb_groupe = '".$_POST['groupement']."'";
}

//recherche par ville
if ($_POST['ville'] == "Toutes les villes")
{
$where .= "";
} else {

$where .= " AND ville = '".$_POST['ville']."'";

}

//recherche par département
if ($_POST['departement'] == "Tous les départements")
{
$where .= "";
} else {

$where .= " AND departement = '".$_POST['departement']."'";

}

//recherche par département
if ($_POST['code_postal'] == "")
{
$where .= "";
} else {

$where .= " AND code_postal = '".$_POST['code_postal']."'";

}

// date entre laquelle le document a été édité
if (($_POST['debut_jj'] == "01") && ($_POST['debut_mm'] == "01") && ($_POST['debut_aa'] == "2010") && ($_POST['fin_aa'] == "2010"))
{
$where .= "";
} else {
$date_debut = $_POST['debut_aa']."-".$_POST['debut_mm']."-".$_POST['debut_jj'];
$date_fin = $_POST['fin_aa']."-".$_POST['fin_mm']."-".$_POST['fin_jj'];

$where .= " AND dateajout BETWEEN '".$date_debut."' AND '".$date_fin."'";
}

$search_sql = "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
".$where;


$rs_search = mysql_query( $search_sql , $conn_bdd );

$count = mysql_num_rows($rs_search);
}

else {

$search_sql = "SELECT id_attestation, ref_Q2C, nom_operation, dateajout, nbre_telechargement, ville, code_postal, departement, le_demandeur
FROM videos";
$rs_search = mysql_query( $search_sql , $conn_bdd );

$count = mysql_num_rows($rs_search);
}
$requete="";
if (isset($_POST['valider']))
{
$requete=$search_sql;
}
//exportation
$sql = "";

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
$envoie = mysql_query($requete);

// Enregistrement des résultats ligne par ligne
while($row = mysql_fetch_object($envoie))
{
$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"); // Remplacer .csv par .xls pour exporter en .XLS
print $fichier;
exit;
}
?>

Je sais pas si c'est assez claire aussi :s
0
reminho69 Messages postés 17 Date d'inscription mercredi 11 mai 2011 Statut Membre Dernière intervention 11 mai 2011
11 mai 2011 à 11:02
Quand je tape directement ma requête au niveau de $envoie = mysql_query($requete);

C'est à dire que je remplace $requete par une requête sql, tout fonctionne !

Donc c'est au niveau des variables mais j'avoue que je ne voit pas du tout où c'est

Pourtant quand je fais echo $requete;
Il m'affiche bien la requête voulu
0
Visiblement, si $_POST['valider'] n'est pas défini, c'est normal qu'on ait une requête vide. Tu utilises une ou l'autre variante de ta requête selon que $_POST['debut_jj'] est défini ou non
Donc ça dépend de comment le formulaire qui appelle cette page a été validé.

Ta façon de créer le $where est très bizarre aussi : à quoi servent tous ces $where .= ""; puisque cette instruction consiste à ne rien faire ?
0
Nos messages se sont croisés
Quand tu fais un echo $requete, tu le fais bien immédiatement avant l'appel à la requête ? Car quand je te l'avais demandé au début, tu étais étonné de voir la requête que ça donnait - et il n'y avait pas d'erreur.
0
reminho69 Messages postés 17 Date d'inscription mercredi 11 mai 2011 Statut Membre Dernière intervention 11 mai 2011
11 mai 2011 à 11:16
J'ai fais un echo $requete; au niveau de :
if (isset($_POST['valider']))
{
$requete=$search_sql;
echo $requete;
}

Et il m'affiche bien la requête en fonction de la recherche,
Si je copie colle cette requête à la place de ma requête, c'est à dire:
$query = "MA REQUETE COPIE";
$result = mysql_query($query);

au lieu de
$query = $requete;
$result = mysql_query($query);

Cela fonctionne !

Après pour ce qui est du bouton valider, l'utilisateur est obliger de clické deçu car lorsqu'il effectue une recherche par ville par exemple, il sélectionne la ville dans le menu déroulant et il clic sur valider pour afficher cette recherche dans un tableau.
(C'est a ce moment la que j'ai fait mon echo)
0
Ça en sert à rien de faire un echo $requete là, il faut absolument le faire immédiatement avant le query, là où je te l'avais montré au départ.
Et il faut toujours laisser le or die(mysql_error()) après le query, c'est lui quei te dit ce qui n'a pas plû à mysql

Es-tu sûr de la ligne qui ne marche pas ? ajoute bien des or die(mysql_error()) à tous tes mysql_query, par exemple ligne 93
$rs_search = mysql_query( $search_sql , $conn_bdd ) or die(mysql_error());
0
reminho69 Messages postés 17 Date d'inscription mercredi 11 mai 2011 Statut Membre Dernière intervention 11 mai 2011
11 mai 2011 à 11:43
J'ai mis des or die... partout

L'erreur que j'obtiens quand je clic sur le bouton exporter est la même que tout à l'heure :
Query was empty


Quand je met un echo juste avant le query, je ne peut rien voir car la boite de dialogue s'ouvre directement, donc soit c'est que la variable est vide soit je ne peux pas la voir car la boite de dialogue est là.
0
Quand tu cliques sur le bouton exporter , tu ne cliques pas sur le bouton valider.
Donc $requete est vide (puisque tu vides son contenu juste avant de tester if (isset($_POST['valider'])) et que tu n'entres pas dans ce if)
C'est bien ce que te dit mysql.
N'oublie pas que chaque fois que tu cliques sur un bouton, valider ou exporter, ton script s'exécute à nouveau à partir de zéro et a "oublié" ce que tu avais fait à l'appel précédent. Si tu veux garder une trace des variables d'un appel à l'autre, il faut utiliser les sessions.
0
reminho69 Messages postés 17 Date d'inscription mercredi 11 mai 2011 Statut Membre Dernière intervention 11 mai 2011
11 mai 2011 à 11:59
En faite quand je clic sur le bouton valider il prend bien ma requête en mémoire et ensuite quand je clic sur le bouton exporter il efface si j'ai bien compris?

Donc pour la variable de session, il faudrait que j'en créé une qui stock ma requête au moment où je clic sur valider, c'est ça?
0
oui c'est ça.
Si tu n'utilises pas les sessions, chaque appel au script (chaque fois que tu cliques sur un bouton) est un nouveau démarrage du script, qui n'a aucun rapport avec les exécutions précédentes.
En fait, il y a d'autres techniques que les sessions : les cookies, les données cachées dans les formulaires ou passées par URL... Mais les sessions sont les plus pratiques à mon point de vue.
0
reminho69 Messages postés 17 Date d'inscription mercredi 11 mai 2011 Statut Membre Dernière intervention 11 mai 2011
11 mai 2011 à 14:16
oui j'ai déja les session mis en place sur mon site,
Mais je ne voit pas trop comment faire.

J'ai essayé comme ça mais ca ne change rien :

$requete="";
if (isset($_POST['valider']))
{
$_SESSION['requete']=$search_sql;
}

Toujours pas de changement
0
reminho69 Messages postés 17 Date d'inscription mercredi 11 mai 2011 Statut Membre Dernière intervention 11 mai 2011
11 mai 2011 à 14:37
J'ai trouvé une solution avec une case à cocher au lieu d'un bouton exporter, cela fonctionne.

Mais si vous avez une solution à me proposer pour garder le bouton, je préférerai

Merci
0
Pour que les sessions fonctionnent, il faut mettre session_start() au début de chaque script

pour enregistrer la requête quand on clique sur 'valider', il faut bien faire comme tu l'as fait.
Il ne faut pas oublier de récupérer sa valeur quand on clique sur 'exporter' :
if (isset($_POST['exporter'])) {
  $requete=$_SESSION['requete'];
...
0
reminho69 Messages postés 17 Date d'inscription mercredi 11 mai 2011 Statut Membre Dernière intervention 11 mai 2011
11 mai 2011 à 14:50
Ca ne marche toujours pas, j'ai fait :

$requete="";
if (isset($_POST['valider']))
{
$_SESSION['requete']=$search_sql;
}

//exportation
if (isset($_POST['exporter']))
{
$requete=$_SESSION['requete'];
// 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

$envoie = mysql_query($requete) or die(mysql_error());

// Enregistrement des résultats ligne par ligne
while($row = mysql_fetch_object($envoie))
{
$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"); // Remplacer .csv par .xls pour exporter en .XLS
print $fichier;
exit;
}

J'ai bien déclaré ma variable de session, et il me dit toujours : query was empty
0
Le formulaire est-il bien dans ce script-ci ?
Si non, qu'est-ce qui renvoie au formulaire quand on clique sur valider ?
Je ne vois pas où tu utilises les variables de session ailleurs. Fais un essai avec une variable quelconque pour t'assurer qu'elles sont bien transmises
0