PHP/ Warning: mysql_fetch_assoc():...

Résolu/Fermé
the_jb Messages postés 651 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 9 mai 2016 - Modifié par the_jb le 7/06/2012 à 12:02
the_jb Messages postés 651 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 9 mai 2016 - 7 juin 2012 à 16:15
Bonjour, Je cherche depuis toute la matiné ce qu'il cloche sur ma page php mais je trouve pas. j'ai vérifier les paramètres d'entrés dans la fonction, toute sortes de choses.. Ce qui est bizarre c'est que avec une requete similaire et des entrées similaires ça fonctionne...
Les premiers tableaux comme Heures , fournisseurs fonctionnent très bien, seulement arrivé au 2ieme CASE "byaffaire" c'est la que ça plante.


Donc le fameux message d'erreur:
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:\wamp\www\XXX\fonctions.php on line 777

La page php dans lequel ce message apparrait :

<?php
include_once("./../droits/test_existe_session.php"); // fichier qui test si on s'est connecté ou non
include_once("./../droits/test_session_util.php"); // fichier chargé de vérifier si l'internaute est un agent de la mairie
?>
<?php
require_once("./../connection.php");
require_once("./../fonctions.php");
$id_bat=$_POST['id_batiment'];
$dateinf=$_POST['dateinf'];
$datesup=$_POST['datesup'];

$text=""; //on fera un echo final afin de remplacer les caractères spéciaux en une seule fois (cf fin du code
switch ($_POST['by'])//valeurs de la variable $_POST['by']
{ case "byrien": //si elle vaut byrien

///////////////////////////si on a sélectionné "Tout"////////////////////////////////
if ($_POST['by']==0)
{ /**************** Les heures ******************/
if ($_POST['heure']=="true")
{
$text.="<h3>HEURES</h3>";
$text.="<table border='1'><tr><th>Période</th><th>ID taux</th><th>Libellé</th><th>Nombre d'heures</th></tr>";
$grandtotal=0;

$heures=getInfosAttribuerAffPeriodeBatiment($id_bat,$dateinf,$datesup);
if (count($heures)!=0)
{
$text.="<tr><td rowspan='".(count($heures)+1)."'>Du ".convertirDateFr($dateinf)."<br/> au ".convertirDateFr($datesup)."</td>";
$text.="<td>".$heures[0]['id_taux']."</td><td>".$heures[0]['libelle_taux']."</td><td>".$heures[0]['nb_heures']."</td></tr>";
$total=$heures[0]['nb_heures'];
for ($j=1;$j<count($heures);$j++)
{
$text.="<tr><td>".$heures[$j]['id_taux']."</td><td>".$heures[$j]['libelle_taux']."</td><td>".$heures[$j]['nb_heures']."</td></tr>";
$total+=$heures[$j]['nb_heures'];
}
$text.="<td colspan='2' bgcolor='yellow'>TOTAL</td><td bgcolor='yellow'>".$total."</td>";
$grandtotal+=$total;
}
$text.="<tr bgcolor='red'><td colspan='3'>TOTAL</td><td>".$grandtotal."</td></tr>";
$text.="</table>";
}

/**************** Les fournisseurs ******************/
if ($_POST['fournisseur']=="true")
{
$text.="<h3>FOURNISSEURS</h3>";
$text.="<table border='1'><tr><th>Période</th><th>Nom</th><th>Cout</th></tr>";
$grandtotal=0;

$info_frs=getInfosSeFournirPeriode($id_bat,$dateinf,$datesup);
if (count($info_frs)!=0)
{
$text.= "<tr><td rowspan='".(count($info_frs)+1)."'>Du ".convertirDateFr($dateinf)."<br/> au ".convertirDateFr($datesup)."</td><td>".$info_frs[0]['nom_frs']."</td><td>".$info_frs[0]['cout']."</td></tr>";
$total=$info_frs[0]['cout'];
for ($j=1;$j<count($info_frs);$j++)
{
$text.="<tr><td>".$info_frs[$j]['nom_frs']."</td><td>".$info_frs[$j]['cout']."</td></tr>";
$total+=$info_frs[$j]['cout'];
}
$text.="<tr bgcolor='yellow'><td>TOTAL</td><td> ".$total."</td></tr>";
$grandtotal+=$total;
}
$text.="<tr bgcolor='red'><td colspan='2'>TOTAL</td><td>".$grandtotal."</td></tr>";
$text.="</table>";
}

/**************** Les prestataires ******************/
if ($_POST['prestataire']=="true")
{
$text.="<h3>PRESTATAIRES</h3>";
$text.="<table border='1'><tr><th>Période</th><th>Nom</th><th>Cout</th></tr>";
$grandtotal=0;

$info_prest=getInfosSoustraiterPeriode($id_bat,$dateinf,$datesup);
if (count($info_prest)!=0)
{
$text.= "<tr><td rowspan='".(count($info_prest)+1)."'>Du ".convertirDateFr($dateinf)."<br/> au ".convertirDateFr($datesup)."</td><td>".$info_prest[0]['nom_prest']."</td><td>".$info_prest[0]['cout']."</td></tr>";
$total=$info_prest[0]['cout'];
for ($j=1;$j<count($info_prest);$j++)
{
$text.="<tr><td>".$info_prest[$j]['nom_prest']."</td><td>".$info_prest[$j]['cout']."</td></tr>";
$total+=$info_prest[$j]['cout'];
}
$text.="<tr bgcolor='yellow'><td>TOTAL</td><td> ".$total."</td></tr>";
$grandtotal+=$total;
}
$text.="<tr bgcolor='red'><td colspan='2'>TOTAL</td><td>".$grandtotal."</td></tr>";
$text.="</table>";
}
/**************** Le Matériel ******************/
if ($_POST['materiel']=="true")
{
$text.="<h3>MATERIELS</h3>";
$text.="<table border='1'><tr><th>Période</th><th>Nom</th><th>Cout</th></tr>";
$grandtotal=0;

$info_materiel=getInfosUtiliserPeriode($id_bat,$dateinf,$datesup);
if (count($info_materiel)!=0)
{
$text.= "<tr><td rowspan='".(count($info_materiel)+1)."'>Du ".convertirDateFr($dateinf)."<br/> au ".convertirDateFr($datesup)."</td><td>".$info_materiel[0]['nom_materiel']."</td><td>".$info_materiel[0]['cout']."</td></tr>";
$total=$info_materiel[0]['cout'];
for ($j=1;$j<count($info_materiel);$j++)
{
$text.="<tr><td>".$info_materiel[$j]['nom_materiel']."</td><td>".$info_materiel[$j]['cout']."</td></tr>";
$total+=$info_materiel[$j]['cout'];
}
$text.="<tr bgcolor='yellow'><td>TOTAL</td><td> ".$total."</td></tr>";
$grandtotal+=$total;
}

$text.="<tr bgcolor='red'><td colspan='2'>TOTAL</td><td>".$grandtotal."</td></tr>";
$text.="</table> ";
}
/**************** Les interventions *****************/
if ($_POST['intervention']=="true")
{
$text.="<h3>INTERVENTIONS</h3>";
$text.="<table border='1'><tr><th>Equipe</th>";

$text.="<td>Du ".convertirDateFr($dateinf)."<br/> au ".convertirDateFr($datesup)."</td>";

$text.="</tr><tr>";

$nbInterventions=getNbInterventions("",$id_bat,$dateinf,$datesup);
$text.="<th>".$nbInterventions['intitule_equipe']."</th><td></td>";

$text.="<tr bgcolor='red'><td colspan='2'>TOTAL</td><td>".$grandtotal."</td></tr>";
$text.="</table>";
}
break;

}
///////////////////////////si on a sélectionné "Par affaire"////////////////////////////////
case "byaffaire":
if ($_POST['heure']=="true")
{
$text.="<h3>AFFAIRES</h3>";
$text.="<table border='1'><tr><th>Période</th><th>Id_aff</th><th>Descriptif</th><th>Nombre d'heures</th></tr>";
$grandtotal=0;

$heures=getNbHeureParaffaireParbatiment($id_bat,$dateinf,$datesup);
if (count($heures)!=0)
{
$text.="<tr><td rowspan='".(count($heures)+1)."'>Du ".convertirDateFr($dateinf)."<br/> au ".convertirDateFr($datesup)."</td>";
$text.="<td>".$heures[0]['id_aff']."</td><td>".$heures[0]['desc']."</td><td>".$heures[0]['nb_heures']."</td></tr>";
$total=$heures[0]['nb_heures'];
for ($j=1;$j<count($heures);$j++)
{
$text.="<tr><td>".$heures[$j]['id_aff']."</td><td>".$heures[$j]['desc']."</td><td>".$heures[$j]['nb_heures']."</td></tr>";
$total+=$heures[$j]['nb_heures'];
}
$text.="<td colspan='2' bgcolor='yellow'>TOTAL</td><td bgcolor='yellow'>".$total."</td>";
$grandtotal+=$total;
}
$text.="<tr bgcolor='red'><td colspan='3'>TOTAL</td><td>".$grandtotal."</td></tr>";
$text.="</table>";
}
break;
}


$text=htmlentities($text); //pour convertir les accents etc.
$text=eregi_replace("<", "<", $text); // pour remettre les balises (les '<' et '>' qui ont été transformées en '<' et '>')
$text=eregi_replace(">", ">", $text);
echo $text;
?>

La fonction qui pose apparemment problème :

function getNbHeureParaffaireParbatiment($id_batiment,$dateinf,$datesup)
{
$sql=" SELECT af.id_aff, af.desc , sum(at.nb_heures) as nb_heures
FROM affaire af, attribuer at,batiment bat
WHERE af.id_aff = at.id_aff
AND af.id_batiment = bat.id_batiment
AND af.id_batiment=".$id_bat."
AND af.deb_trav BETWEEN '".$dateinf."' AND '".$datesup."'
GROUP BY af.id_aff";
$rsql=mysql_query($sql);
while($ligne=mysql_fetch_assoc($rsql))
{
$tab[]=$ligne;

}
return $tab;
}


Avez vous une idée ? merci
A voir également:

11 réponses

Utilisateur anonyme
7 juin 2012 à 15:38
Tu n'as pas affiché la requête dans le 'or die' comme je te le demandais
Tu aurais tout de suite vu l'erreur, il te manque sûrement le id_batiment.
Regarde ta fonction getNbHeureParaffaireParbatiment, tu appelles le paramère $id_batiment mais tu fabriques ta requête avec $id_bat
1
Utilisateur anonyme
7 juin 2012 à 13:29
Bonjour

Il y a sûrement un problème dans la requête, il faut faire afficherla requête et le message d'erreur de mysql :

$rsql=mysql_query($sql) or die ($sql.'<br />'.mysql_error()); 
0
the_jb Messages postés 651 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 9 mai 2016 58
7 juin 2012 à 13:57
Ok j'essai ça je vous en donne des nouvelles
0
the_jb Messages postés 651 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 9 mai 2016 58
Modifié par the_jb le 7/06/2012 à 14:01
message d'erreur de mysql :
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 'AND af.deb_trav BETWEEN '' AND '' GROUP BY af.id_aff' at line 6

Il ne récupère pas mes dates ?
0

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

Posez votre question
Utilisateur anonyme
7 juin 2012 à 14:03
Tu vois bien...
À toi de remonter la piste en mettant quelques 'echo' là d'où la date vient.
0
the_jb Messages postés 651 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 9 mai 2016 58
Modifié par the_jb le 7/06/2012 à 14:07
Pourquoi j'arrive très bien à les récupérer avec les requêtes précédentes et pas avec celle ci ?

Les dates sont déjà récupérées en haut de page.
0
Utilisateur anonyme
7 juin 2012 à 14:10
Tu as une valeur différente de ($_POST['by']), est-ce qu'elle vien bien du même formulaire à tous les coups ? les champs correspondants sont-ils bien remplis ?
0
the_jb Messages postés 651 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 9 mai 2016 58
7 juin 2012 à 14:18
Oui, du même formulaire car il s'affiche dans la div juste en dessous du formulaire.

$_POST['by'] correspond à mes 2 boutons radio (même id et même name) un avec la value "byrien" et l'autre "byaffaire" :

echo "<input type='radio' name='by' id='by' value='byrien' onclick='getStat();' checked/> tout    
<input type='radio' name='by' id='by' value='byaffaire' onclick='getStat();'/> par affaire    <br/><br/>";

Les champs sont remplis est s'execute automatiquement avec un onclick:'getstat()' qui renvoi à ma partie Javascript/AJAX qui permet d'envoyer les données vers la page statistique :

echo " <input type='checkbox' name='prestataire' id='prestataire' value='prestataire' onclick='getStat();'>Prestataire
<input type='checkbox' name='fournisseur' id='fournisseur' value='fournisseur' onclick='getStat();'>Fournisseur
<input type='checkbox' name='materiel' id='materiel' value='materiel' onclick='getStat();'>Matériel
<input type='checkbox' name='heure' id='heure' value='heure' onclick='getStat();'>Heures
<br/><br/>";


La partie javascript/AJAX :

function afficherStat(reponse)
{
document.getElementById('stat').innerHTML = reponse.responseText;
}

function getStat()
{ id_batiment=document.getElementById('id_batiment').value;
by=getSelectedRadioValue(document.f.by);
dateinf=document.getElementById('dateinf').value;
datesup=document.getElementById('datesup').value;
prestataire=document.getElementById('prestataire').checked;
fournisseur=document.getElementById('fournisseur').checked;
materiel=document.getElementById('materiel').checked;
heure=document.getElementById('heure').checked;
new Ajax_request('./soutien_stat_batiment.php',{method:'post',params:'id_batiment='+id_batiment+'&by='+by+'&dateinf='+dateinf+'&datesup='+datesup+'&prestataire='+prestataire+'&fournisseur='+fournisseur+'&materiel='+materiel+'&heure='+heure,onSuccess:afficherStat});
}
0
the_jb Messages postés 651 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 9 mai 2016 58
Modifié par the_jb le 7/06/2012 à 14:27
Le test que j'ai fait précédemment n'avais pas de date de précisé :

Voila ce qu'il me donne maintenant :

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 'AND af.deb_trav BETWEEN '2011-01-01' AND '2012-07-01' GROUP BY af.id_aff' at line 6


Donc il récupère bien les dates et dans le bon format en plus ..
Où est le problème ??? =(
0
the_jb Messages postés 651 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 9 mai 2016 58
Modifié par the_jb le 7/06/2012 à 14:47
la requete est bonne pourtant !
Je l'execute dans phpMyAdmin

SELECT af.id_aff, af.desc, sum( at.nb_heures ) AS nb_heures
FROM affaire af, attribuer at, batiment bat
WHERE af.id_aff = at.id_aff
AND af.id_batiment = bat.id_batiment
AND af.id_batiment =1
AND af.deb_trav
BETWEEN '2011-01-01'
AND '2011-07-07'
GROUP BY af.id_aff
LIMIT 0 , 30

résultat :

id_aff desc nb_heures
1 Rénover le Bâtiment SUD test2 0
4 Monter les tentes à l'Ecole 75

J'arrive pas à trouver où est le problème.
0
the_jb Messages postés 651 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 9 mai 2016 58
7 juin 2012 à 16:15
C'est bien ça, il ne récupérait pas l'id_batiment
0

Discussions similaires