affichage intempestif du nb d'enregistrement

wik
Eléphanteau du PHP | 29 Messages

15 août 2009, 18:15

Bonjour,

Ca fait 2 jours que je m'arrache la tête sur un pb d'affichage...
Je veux afficher des news avec une mise en page différente selon les cas.
J'ai un fichier de requête, faisant appel à un autre pour un autre type de mise en page.

L'affichage fonctionne, si ce n'est que s'ajoute le chiffre "1" (correspondant au nb d'enregistrement, je présume) à la fin de l'affichage des données désirées.

Merci de votre aide.

Voici le code de la page "news.php"
 // recup des DISKS
	 $requete1 = mysql_query ("SELECT d.disk_id, d.disk_titre, d.disk_titre2, d.news_txt, d.disk_format, d.disk_img, d.disk_bando, d.disk_ituneslien, l.label, m2.menu2_titre FROM disk d LEFT JOIN artiste_infos ai ON (d.disk_id = ai.disk_id) LEFT JOIN menu2 m2 ON (m2.menu2_id = ai.menu2_id) LEFT JOIN label l on (d.label_id = l.label_id) WHERE ai.artiste_id = '".$artist_id."' AND d.news = '1' ORDER BY m2.menu2_order, d.date") or die('Erreur : ' . mysql_error());
	 while ($resultat1 = mysql_fetch_array($requete1)){
	 
	 // recup des TRACKS
	 $requete2 = mysql_query ("SELECT t.track_titre, t.track_mp3 FROM disk d, track t, disk_track dt WHERE d.disk_id = '".$resultat1[disk_id]."' and d.disk_id = dt.disk_id and t.track_id = dt.track_id ORDER BY dt.ordre")or die('Erreur : ' . mysql_error());
	 while ($resultat2 = mysql_fetch_array($requete2)){
	 
	 // conditions d'affichage des TRACKS
	 if ($resultat2[track_mp3] == '' ) {
	$track = '<span class="txt9noir">'.$resultat2[track_titre].'</span>';
	} else {
	$track = '<span class="txt9noir">'.$resultat2[track_titre] .' <a href="extraitson/'.$resultat2[track_mp3].'" target="_blank"><img src="visuels/iconeSON.GIF" width="11" height="12" align="absmiddle" border="0"></a></span>';
		}
	
	 // conditions d'affichage d'infos DISK
	 if ($resultat1[disk_titre2] == '') {
	 $titre = '<span class="txt10gras">'.strtoupper($resultat1[disk_titre]).'</span>';
	 } else {
	 $titre = '<span class="txt10gras">'.strtoupper($resultat1[disk_titre]). ' ' . $resultat1[disk_titre2]. '</span>';
	 }
	  	 
	 // affichage du disk selon DISK - REMIX - COMPIL (avec image ou non)
	 if ($resultat1[menu2_titre] == 'compilations') {
	 $disk = '<td colspan="2" width="505"><span class="txt9noirGras">new compilation: '.$track.' on '.$titre.'</span>';
	 } elseif ($resultat1[menu2_titre] == 'remixes') {
     $disk = '<td colspan="2" width="505"><span class="txt9noirGras">new remix for '.strtoupper($resultat1[disk_titre2]).': '.$track.' on "'. $resultat1[disk_titre].'"</span>';
	 } else {
	 $disk = include ("tracks");
	 }
	 		
	 	 echo "$disk</td></tr><tr><td colspan='2' width='505' class='txt7noir'>&nbsp;</td></tr>";
	 	  }
  }

	  echo '</table></td></tr>';
	
	} else {
	 echo '';
 }
 }
Et celui de "tracks.php" appelé
<?php

$requete2 = mysql_query ("SELECT t.track_titre, t.track_mp3 FROM disk d, track t, disk_track dt WHERE d.disk_id = '".$resultat1[disk_id]."' and d.disk_id = dt.disk_id and t.track_id = dt.track_id ORDER BY dt.ordre")or die('Erreur : ' . mysql_error());

	// AFFICHAGE de la pochette (pas de bandeau)		
	if ($resultat1[disk_bando] == '' ) {
	
	$n = mysql_num_rows($requete2); // compte le nb d'enregistrements
	if ($n > '0') { //j'ai au moins un titre!!
	$compteur = 0; 
	$valeur = $n/2;
	$valeur = ceil($valeur); // arrondi 

	echo '<td width="110" align="left" valign="top"><img src="visuels/poch/'.$resultat1[disk_img].'"></td>
           <td width="395" align="left" valign="top">'.$titre.'<br><br><table width="350"><tr valign="top"><td width="170" class="txt8noir">';
		   
	while ($resultat2 = mysql_fetch_array($requete2)) {
		
		if ($compteur == $valeur){
		echo "</td><td width='10' class='txt7noir'></td><td width='170' class='txt8noir'>"; // tu changes de colonne 
		$compteur = 0; // tu remet le compteur a zéro 
		} 

		if ($resultat2[track_mp3] == '' ) {
		$track = $resultat2[track_titre];
		} else {
		$track = $resultat2[track_titre] .' <a href="extraitson/'.$resultat2[track_mp3].'" target="_blank"><img src="visuels/iconeSON.GIF" width="11" height="12" align="absmiddle" border="0"></a>';
		}
		
		echo "$track<br>";
		$compteur++; // ajoute 1 au compteur a chaque passage
	}
	}
echo "</td></tr></table>";

}else {
	// affichage du BANDEAU
	echo '<img src="visuels/bandeaux/'.$resultat1[disk_bando].'" align="absmiddle" width="440" border="0"><br>';
	
	while ($resultat2 = mysql_fetch_array($requete2)) {					   
if ($resultat2[track_mp3] == '' ) {
	$track = $resultat2[track_titre];
	} else {
	$track = $resultat2[track_titre] .' <a href="extraitson/'.$resultat2[track_mp3].'" target="_blank"><img src="visuels/iconeSON.GIF" width="11" height="12" align="absmiddle" border="0"></a>';
		}
		echo "$track  ";
}
}
?>

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

15 août 2009, 22:10

Je pense que ton problème vient d'ici :
$disk = include ("tracks");
la fonction include() inclus le script spécifié à l'endroit où l'appel est fait, comme si tu l'y avais mit directement... elle retourne le succès de l'inclusion et pas le résultat d'un quelconque traitement...

L'inclusion étant réussie, la fonction retourne 1, stocké dans ta variable $disk et sans doute affichée...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

wik
Eléphanteau du PHP | 29 Messages

16 août 2009, 11:36

Merci pour ta réponse... Mais comment je fais pour contourner ça ?
J'ai vu qu'il y avait la commande "return()" mais qui s'applique sur des variables et pas sur "echo" (hors dans ma page "tracks.php", j'utilise les "echo"...
J'ai déjà fait des include () dans un "echo" et ça marchait... Le hic c'est que ça ne s'applique pas dans ce cas, là.
Bref Je suis complètement larguée !

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

16 août 2009, 19:08

Que doit contenir ta variable $disk lorsque tu es dans le else ?
est-ce qu'un simple
include ("tracks"); // au lieu de $disk = include ("tracks");
ne suffirait pas ?
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...