Requete mysql et affichage du resultat

Résolu
pointguard Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   -  
pointguard Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
j'ai beau me casser la tête mais je ne comprends pas ce qui cloche dans cette requête largement pompée sur les exemples fournis par ce site.

Voici mon code (serveur Mysql hébergé chez FREE), le but est d'afficher sur une page php un message pour souhaiter l'anniversaire des gens entrés dans la bdd.
TOUT FONCTIONNE SAUF... que depuis que j'essaie d'introduire le message "Pas d'anniversaire aujourd'hui" (code entre les lignes de tirets), la 1ère personne dont c'est l'anniv dans la liste le jour donné disparait, je m'explique :
- s'il n'y a pas d'anniv tout marche et j'ai le msg "Pas d'anniversaire aujourd'hui"
- s'il y a 1 anniv je n'ai RIEN qui s'affiche
- s'il y a 2 (ou +) annivs, le nom du 2e, du 3e etc... dans la liste s'affichent mais pas le 1er...

Voilà c'est tordu ! Si vous avez la réponse je vous admire par avance ! :D

<?php

// Déclaration des paramètres de connexion
$host = "sql.free.fr";
$user = "xxx";
$bdd = "base_aniv";
$passwd ="xxx";

// Connexion au serveur
@mysql_connect($host, $user,$passwd) or die("erreur de connexion au serveur");
@mysql_select_db($bdd) or die("erreur de connexion a la base de donnees");

// Creation et envoi de la requete

$mois=date("m");
$jour=date("d");

$reponse=mysql_query("SELECT prenom,nom FROM base_anniv WHERE mois=$mois and jour=$jour");

$result=mysql_query($reponse);

// Recuperation des resultats
<!------------Début du code qui fait chier-------------->
if (!mysql_fetch_array($reponse))
{
echo "Pas d'anniversaire aujourd'hui\n";
}

else
{
<!------------presque fin du code-------------->
while( $rs= mysql_fetch_array($reponse) )
{
echo "".$rs['prenom']; echo " ".$rs['nom']; echo " ";
}
<!------------dernier morceau du code chiant----------->
}
<!------------fin------------->

// Deconnexion de la base de donnees

mysql_close();
?>

PS : Je ne suis pas bon en php donc OUI le code est crade ! Si vous avez mieux je suis preneur !
A voir également:

7 réponses

lecube Messages postés 304 Date d'inscription   Statut Membre Dernière intervention   54
 
Bonjour,

fetch_array te lit un resultat et passe au suivant ... Donc ton premier test "consomme" un resultat. Il faut mieux que tu utilses un tableau intermediaire. Genre
while( $rs= mysql_fetch_array($reponse) )
{
row[]=$rs;
}
et ensuite if ( count($row) == 0 )
{
echo "Pas d'anniversaire aujourd'hui\n";
}
else
{
for($i=1;$i<count($row);$i++)
{
echo "".$row[$i]['prenom']; echo " ".$row[$i]['nom']; echo " ";
}
}
...
Je ne l'ai pas testé ... mais ca devrait marcher ;-°
0
pointguard Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
 
Merci de ton aide mais...

Parse error: syntax error, unexpected on line 26

ce qui correspond à :

row[]=$rs;
0
lecube Messages postés 304 Date d'inscription   Statut Membre Dernière intervention   54
 
Oups, c'est pas beau ce que j'ai ecrit :
$row[]=$rs ou $row[]=$rs[]

J'ai un trou de memoire ...
0
pointguard Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
 
La 1ere soluce donne cette erreur :
Parse error: syntax error, unexpected '}' in anniv.php on line 27
La 2eme soluce donnait une "erreur fatale"

On reprend un bout de code pour bosser sur qq chose de "propre" :
// Recuperation des resultats
while( $rs= mysql_fetch_array($reponse) )
{
$row[]=$rs
}
if ( count($row) == 0 )
{ <!---------------------LIGNE 27-------------------------------->
echo "Pas d'anniversaire aujourd'hui\n";
}
else
{
for($i=1;$i<count($row);$i++)
{
echo "".$row[$i]['prenom']; echo " ".$row[$i]['nom']; echo " ";
}
}

// Deconnexion de la base de donnees

Merci encore du coup de main !
0

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

Posez votre question
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
$reponse=mysql_query("SELECT prenom,nom FROM base_anniv WHERE mois=$mois and jour=$jour");
//tu fais la requette avec une condition et ensuite tu refais la requette sur la reponse de la requette: erreur de principe

$result=mysql_query($reponse);



///il faut faire:

$query="SELECT prenom,nom FROM base_anniv WHERE mois=$mois AND jour=$jour"; //ça c'est le texte de la requette
$reponse=mysql_query($query); //la on execute la requette

//maintenant les résultats sont stockés en mémoire $reponse contient la référence de la ressource permettant de les exploiter
//on peut même clore dès maintenant la connexion à la base
mysql_close();

///Exploitation des résultats

//si pas d'anniversaire on aura zéro résultats
// mysql_num_rows(ressource) permet de savoir combien on en a trouvé stockés dans 'ressource'

if (mysql_num_rows($reponse) == 0){
	echo "Pas d'anniversaire aujourd'hui";
}else{ 
	//si on a des resultats alors on les affiche
	//pour cela par une boucle while on vient lire ligne par ligne ce qui est en mémoire par un fetch
	while( $rs= mysql_fetch_array($reponse) ){
		echo $rs['prenom']." ".$rs['nom']."<br /> "; // concatène la  chaine  et pour un saut de ligne c'est <br /> en html
	}
} 
0
lecube Messages postés 304 Date d'inscription   Statut Membre Dernière intervention   54
 
Bon, j'ai testé mon code cette fois ;-P

$row=array();

// Recuperation des resultats
while( $rs= mysql_fetch_array($reponse) )
{
$row[]=$rs;
}
if ( count($row) == 0 )
{
//<!---------------------LIGNE 28-------------------------------->
echo "Pas d'anniversaire aujourd'hui\n";
}
else
{
for($i=1;$i<count($row);$i++)
{
echo "".$row[$i]['prenom']; echo " ".$row[$i]['nom']; echo " ";
}
}

N'oublie pas de declarer row car quand il n'y a aucun anniversaire, tu risque d'avoir une erreur sur count($row).
Bien à toi.
0
pointguard Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
 
Merci bcp pour votre aide ça marche !
0