Problème d'affichage du résultat de ma requête

Eléphant du PHP | 70 Messages

23 avr. 2012, 16:44

Bonjour,

Je suis face à un étrange problème lors de l'affichage du résultat de ma requête. Je vous explique en quelques lignes mon soucis.
Lorsque j'utilise ma requête via phpMyadmin celle-ci fonctionne bien j'ai bien les résultats qu'il faut. Par contre, sur ma page php la requête fonctionne mais quand je dois avoir 3 résultats elle m'affiche seulement 2... si je dois avoir 6 résultats elle affiche 5... il manque systématiquement 1 résultat à chaque fois.

J'ai aucun message d'erreur. Je pense que le problème vient de ma condition dans ma page ou de la mise en forme de ma boucle.

Voici mon code php
<?php
//connexion à la base de données
	require_once '_inc/_connexion.php';
	
	$sql_marque = "
			SELECT id_annonce, marques.id, marques.marque, modeles.modele, km_annonce, prix_annonce, date_annonce, titre_proprio, fichier_pv, id_type_annonce, type_motorisation
			FROM annonce

			JOIN marques ON marques.id = id_marque_annonce
			JOIN modeles ON modeles.id = id_modele
			JOIN photo_vehicule ON id_vehicule_pv = id_annonce
			JOIN motorisation ON motorisation_annonce = id_motorisation
			JOIN nb_proprio ON id_proprio = proprietaire_annonce
			WHERE 1=1";
	
	
	// Logo marque
	if (isset($_GET['marque'])) $sql_marque .= " AND id_marque_annonce = '".$_GET['marque']."'"; // recherche par marque ( logo de gauche )
	
	// recherche depuis le menu
	if (isset($_GET['type_annonce'])) $sql_marque .= " AND id_type_annonce = '".$_GET['type_annonce']."'"; // recherche depuis le menu ( occasion ou neuf )
	
	// Type et Marque 
	if (isset($_POST['sujet']) AND $_POST['sujet'] != 0) $sql_marque .= " AND id_marque_annonce = '".$_POST['sujet']."'"; // recherche par marque
	if (isset($_POST['type']) AND $_POST['type'] != 0) $sql_marque .= " AND id_type_annonce = '".$_POST['type']."'"; // recherche par type d'annonce
	
	// année
	if (isset($_POST['de']) AND $_POST['de'] != 0) $sql_marque .= " AND date_annonce >= '".$_POST['de']."-01-01'"; 
	if (isset($_POST['a']) AND $_POST['a'] != 0) $sql_marque .= " AND date_annonce <= '".$_POST['a']."-12-31'"; 	
	
	// km
	if (isset($_POST['de_km']) AND $_POST['de_km'] != 0) $sql_marque .= " AND km_annonce >= '".$_POST['de_km']."'"; 
	if (isset($_POST['a_km']) AND $_POST['a_km'] != 0) $sql_marque .= " AND km_annonce <= '".$_POST['a_km']."'"; 	
			
	// motorisation
	if (isset($_POST['motorisation']) AND $_POST['motorisation'] != 0) $sql_marque .= " AND motorisation_annonce = '".$_POST['motorisation']."'";

	$sql_marque .= "GROUP BY id_annonce";
	$listing_marque = mysql_query($sql_marque)or die(mysql_error($sql_marque));
	$row_marque = mysql_fetch_array($listing_marque);
			

?>

dans ma page
<?php 
			if ($row_marque[0] == 0) 
				{
				echo '<div id="alerte_recherche"><p class="alerte">Pas de résultat</p></div>';
				}
			else
				{
			while ($row_marque = mysql_fetch_array($listing_marque)) 
					{
				echo '<div id="affichage_fiche">';
				echo '<div id="apercu_fiche_vehicule">';
				echo '<div id="maniature_photo"><a id="fancybox" href="./photos/fullsize/'. $row_marque["fichier_pv"] .'" title="'. $row_marque["marque"] .' - '. $row_marque["modele"] .'"><img class="apercu" src="./photos/min/'. $row_marque["fichier_pv"] .'" /></a></div>';
					echo'<div id="details_vehicule">';
					echo '<p class="marque_vehicule"><a class="marque_vehicule" href="vehicule_fiche.php?id='. $row_marque["id_annonce"] .'">'. $row_marque["marque"] .' '. $row_marque["modele"] .'</a></p>';
						if ($row_marque["km_annonce"] == 0)
							{
							echo '<p class="km_vehicule">Vehicule Neuf</p>';
							}
						else
							{
							echo '<p class="km_vehicule">'. $row_marque["km_annonce"] .' kms</p>';
							}
						echo '<p class="prix_vehicule">'. $row_marque["prix_annonce"] .' €</p>';
						echo '<p class="nb_proprio">'.$row_marque['titre_proprio'].'</p>';
					echo '</div>';
				echo '</div>';
				echo '</div>';
					}
				}
			?>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

23 avr. 2012, 18:21

Salut,

Ton code fonctionne correctement.

Pour faire ce que tu veux vire le 1 mysql_fetch_array (celui qui est en dehors du while ) c 'est lui qui 'grille' un tuple à l'affichage.
Ou utilisé un do while plutôt qu'un while
Et vire cette hérésie de where 1=1 utilise une condition pour savoir s'il faut ou non l'ajouter.

Ajout des mysql_real_escale_string purique sécuriser ton script.


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 70 Messages

23 avr. 2012, 19:58

Merci pour ta réponse !

Si je retire le premier mysql_fetch_array je vais avoir un problème pour ma première condition qui vérifie la présence d'un enregistrement dans ma table.

ViPHP
xTG
ViPHP | 7331 Messages

23 avr. 2012, 20:12

Utilises mysql_num_rows() pour effectuer cette vérification. ;)

Eléphant du PHP | 70 Messages

24 avr. 2012, 08:15

je viens de faire la modification avec un mysql_fetch_row dans ma condition. Cependant le résultat le change pas j'ai encore le même soucis.
<?php
//connexion à la base de données
	require_once '_inc/_connexion.php';
	
	$sql_marque = "
			SELECT id_annonce, marques.id, marques.marque, modeles.modele, km_annonce, prix_annonce, date_annonce, titre_proprio, fichier_pv, id_type_annonce, type_motorisation
			FROM annonce

			JOIN marques ON marques.id = id_marque_annonce
			JOIN modeles ON modeles.id = id_modele
			JOIN photo_vehicule ON id_vehicule_pv = id_annonce
			JOIN motorisation ON motorisation_annonce = id_motorisation
			JOIN nb_proprio ON id_proprio = proprietaire_annonce
			WHERE 1=1";
	
	
	// Logo marque
	if (isset($_GET['marque'])) $sql_marque .= " AND id_marque_annonce = '".$_GET['marque']."'"; // recherche par marque ( logo de gauche )
	
	// recherche depuis le menu
	if (isset($_GET['type_annonce'])) $sql_marque .= " AND id_type_annonce = '".$_GET['type_annonce']."'"; // recherche depuis le menu ( occasion ou neuf )
	
	// Type et Marque 
	if (isset($_POST['sujet']) AND $_POST['sujet'] != 0) $sql_marque .= " AND id_marque_annonce = '".$_POST['sujet']."'"; // recherche par marque
	if (isset($_POST['type']) AND $_POST['type'] != 0) $sql_marque .= " AND id_type_annonce = '".$_POST['type']."'"; // recherche par type d'annonce
	
	// année
	if (isset($_POST['de']) AND $_POST['de'] != 0) $sql_marque .= " AND date_annonce >= '".$_POST['de']."-01-01'"; 
	if (isset($_POST['a']) AND $_POST['a'] != 0) $sql_marque .= " AND date_annonce <= '".$_POST['a']."-12-31'"; 	
	
	// km
	if (isset($_POST['de_km']) AND $_POST['de_km'] != 0) $sql_marque .= " AND km_annonce >= '".$_POST['de_km']."'"; 
	if (isset($_POST['a_km']) AND $_POST['a_km'] != 0) $sql_marque .= " AND km_annonce <= '".$_POST['a_km']."'"; 	
			
	// motorisation
	if (isset($_POST['motorisation']) AND $_POST['motorisation'] != 0) $sql_marque .= " AND motorisation_annonce = '".$_POST['motorisation']."'";

	$sql_marque .= "GROUP BY id_annonce";
	$listing_marque = mysql_query($sql_marque)or die(mysql_error($sql_marque));
dans le body de ma page
<?php 
			if (mysql_fetch_row($listing_marque) AND $listing_marque >= 1) // ligne qui pose problème !!
				{
				while ($row_marque = mysql_fetch_array($listing_marque)) // ligne qui pose problème !!
					{
				echo '<div id="affichage_fiche">';
				echo '<div id="apercu_fiche_vehicule">';
				echo '<div id="maniature_photo"><a id="fancybox" href="./photos/fullsize/'. $row_marque["fichier_pv"] .'" title="'. $row_marque["marque"] .' - '. $row_marque["modele"] .'"><img class="apercu" src="./photos/min/'. $row_marque["fichier_pv"] .'" /></a></div>';
					echo'<div id="details_vehicule">';
					echo '<p class="marque_vehicule"><a class="marque_vehicule" href="vehicule_fiche.php?id='. $row_marque["id_annonce"] .'">'. $row_marque["marque"] .' '. $row_marque["modele"] .'</a></p>';
						if ($row_marque["km_annonce"] == 0)
							{
							echo '<p class="km_vehicule">Vehicule Neuf</p>';
							}
						else
							{
							echo '<p class="km_vehicule">'. $row_marque["km_annonce"] .' kms</p>';
							}
						echo '<p class="prix_vehicule">'. $row_marque["prix_annonce"] .' €</p>';
						echo '<p class="nb_proprio">'.$row_marque['titre_proprio'].'</p>';
					echo '</div>';
				echo '</div>';
				echo '</div>';
					}
				}
			else
				{
				echo '<div id="alerte_recherche"><p class="alerte">Malheureusement, nous ne pouvons pas satisfaire votre demande. Aucun véhicule en stock pour votre recherche</p></div>';
				}
				
			?>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

24 avr. 2012, 09:13

je viens de faire la modification avec un mysql_fetch_row dans ma condition. Cependant le résultat le change pas j'ai encore le même soucis.
A tu bien lu la réponse de xTG ?
Utilises mysql_num_rows() pour effectuer cette vérification. ;)
@+
Il en faut peu pour être heureux ......

ViPHP
xTG
ViPHP | 7331 Messages

24 avr. 2012, 10:14

Je dirai même plus :
Utilises mysql_num_rows() pour effectuer cette vérification. ;)
:langue:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

24 avr. 2012, 12:13

pfffff :mrgreen:
Il en faut peu pour être heureux ......

Eléphant du PHP | 70 Messages

24 avr. 2012, 13:04

oups c'est moi qui déconne effectivement.. vous avez raison ! C'était la solution. Merci beaucoup