[RESOLU] Slider complexe

Eléphanteau du PHP | 41 Messages

10 févr. 2015, 13:12

Bonjour,

je suis entrain de revoir un petit slider à partir de données dans la BDD. Et j'arrive pas à faire le plus bête à savoir encadrer dans un <li></li> deux résultats différents. L'un dont la marque est égale à 2 et l'autre dont la marque est différente de 2. Je dois pas être loin mais je tourne un peu beaucoup en rond. Ces deux résultats sont encadrés par des div. Voila ce que j'ai essayé de faire sans succès...

$autos_rauto = "";	
$autos_rauto_occasion = "";	
$autos_rauto_occasion_t = "";	
$i=0;

$autos_rauto .= "<li>";
		
if($id_marque != "2"){
		$autos_rauto_occasion .= "<div>.$img1_occasion.";
		$autos_rauto_occasion .= "<h2>.$titre_modele.</h2>";
		$autos_rauto_occasion .= "</div>";
	}	

if($id_marque = "2"){
		$autos_rauto_occasion_toyota .= "<div>.$img1_occasion.";
		$autos_rauto_occasion_toyota .= "<h2>.$titre_modele.</h2>";
		$autos_rauto_occasion_toyota .= "</div>";
	}
		
	$autos_rauto .= "</li>";
	$i++;

	}

	$plugin_sauto = "<div><h1>Nos occasions</h1><ul'>".$autos_rauto."</ul></div>";
	$plugin_sauto = "<div class='slider2_btn_prev' onclick='plugin_sauto_prev2();'></div>".$autos_rauto."<div class='slider2_btn_next' onclick='plugin_sauto_next2();'></div>";
	
	$plugin_sauto .= "<div class='slider2_accueil'>
	<div class='slider2_accueil_top'>".$autos_rauto_occasion."</div>
	<div class='slider2_accueil_bottom'></div>
	</div>";
Il ne doit pas manquer grand chose, je passe à côté c'est sûr mais je ne vois pas du tout d'où vient mon erreur :( Merci pour ceux qui auront l'oeil !

Eléphanteau du PHP | 41 Messages

10 févr. 2015, 13:14

J'avais zappé que j'avais un compte ici :) Petite note supp.

L'accolade après i++ est celle d'un while et $plugin_sauto est bien déclaré !

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

10 févr. 2015, 14:42

Hello !

Petite erreur d’inattention : " = " est un opérateur d'affectation. L'opérateur de comparaison est " == "

Lorsque tu fais
if($id_marque = "2"){
.. tu affectes la chaine de caractère 2 à la variable $id_marque au lieu de comparer les deux valeurs (à noter que comme c'est un chiffre, ça devrait fonctionner également sans les guillemets autour tout en rendant ton code plus lisible ;))
if($id_marque != 2){
                $autos_rauto_occasion .= "<div>.$img1_occasion.";
                $autos_rauto_occasion .= "<h2>.$titre_modele.</h2>";
                $autos_rauto_occasion .= "</div>";
        }       
if($id_marque == 2){
                $autos_rauto_occasion_toyota .= "<div>.$img1_occasion.";
                $autos_rauto_occasion_toyota .= "<h2>.$titre_modele.</h2>";
                $autos_rauto_occasion_toyota .= "</div>";
        }
Dans ton cas, tu peux aussi utiliser l'opérateur else :
if($id_marque != 2){
                $autos_rauto_occasion .= "<div>.$img1_occasion.";
                $autos_rauto_occasion .= "<h2>.$titre_modele.</h2>";
                $autos_rauto_occasion .= "</div>";
        }       
else {
                $autos_rauto_occasion_toyota .= "<div>.$img1_occasion.";
                $autos_rauto_occasion_toyota .= "<h2>.$titre_modele.</h2>";
                $autos_rauto_occasion_toyota .= "</div>";
        }
Et pour le fun :
$html = '<div>';
$html.= $img1_occasion;
$html.= '<h2>' . $titre_modele . '</h2>';
$html.= '</div>';

if ($id_marque != 2)
   $autos_rauto_occasion .= $html;      
else
   $autos_rauto_occasion_toyota .= $html;
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

10 févr. 2015, 15:03

J'avais zappé que j'avais un compte ici :)
Pas de problème, je t'ai réattribué ton post ;)
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 41 Messages

10 févr. 2015, 16:27

Ah oui pour la syntaxe c'est mieux :) En revanche, je suis toujours dans le brouillard pour afficher mes contenus dans ce style :
<ul>
    <li>
         <div>infos marque 2</div>
         <div>infos autres marques</div>
     <li>
<ul>
J'ai aucun soucis pour afficher un par un dans un <li>, mais pas les deux <div> dans une liste. Une idée pour scinder ?

Eléphanteau du PHP | 41 Messages

10 févr. 2015, 22:36

J'apporte un peu d'eau au moulin :)
	if($i==0){
			$autos_rauto_occasion .= "<li id='vignettes_sauto_".$id_occasion."' style='z-index:2;display:block;' rel='".$id_occasion[0].$id_occasion[1]."'>";
	}else{
			$autos_rauto_occasion .= "<li id='vignettes_sauto_".$id_occasion."' style='z-index:-999999;display:none;' rel='".$id_occasion[0].$id_occasion[1]."'>"; 
		}
	
if($id_marque != 2){
		$autos_rauto_occasion .= "<div class='autre_marque'>";
		$autos_rauto_occasion .= "$img1_occasion";
		$autos_rauto_occasion .= "<h3>".$titre_modele."</h3>";
		$autos_rauto_occasion .= "</div>";
	}	

if($id_marque == 2){
	
		$autos_rauto_occasion .= "<div class="la marque">";
		$autos_rauto_occasion .= "$img1_occasion";
		$autos_rauto_occasion .= "<h3>".$titre_modele."</h3>";
		$autos_rauto_occasion .= "</div>";

	}
		$autos_rauto_occasion .= "</li>";
	}

	$autos_rauto_occasion = "<ul class='autos_rauto2'>".$autos_rauto_occasion."</ul>";
	$autos_rauto_occasion = "<div class='slider2_btn_prev' onclick='rauto_prev2();'></div>".$autos_rauto_occasion."<div class='slider2_btn_next' onclick='rauto_next2();'></div>";
	
	$plugin_sauto .= "<div class='slider2_accueil'>
		<div class='slider2_accueil_top'>".$autos_rauto_occasion."</div>
	</div>";
Mais que c'est dur... Là plutôt qu'avoir un <li> englobant mes deux types de marque, j'ai un <li> par voiture. J'ai l'impression qu'utiliser if n'est pas la bonne solution, mais quoi d'autres ?

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

11 févr. 2015, 00:24

A priori, j'aurais tendance à dire que tes <li> et </li> devraient être en dehors de la boucle.
Sinon ils sont ajoutés à chaque itération, alors que ce que tu veux c'est boucler sur toutes tes marques dans la même balise li :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 41 Messages

11 févr. 2015, 11:40

Oui c'est un peu ça... à tâton ça commence à ressembler à quelque chose. Maintenant la difficulté est de faire comprendre que :

<li>
<div>marque 1 - 1er id</div>
<div>marque 2 - 1er id</div>
</li>

<li>
<div>marque 1 - 2e id</div>
<div>marque 2 - 2e id</div>
</li>

...

Pour l'instant tout est mélangé en vrac, forcément avec mon ORDER BY lezautos... J'ai envie de tenter de faire 2 tableaux distincts mysql_fetch_array, est-ce une bonne idée ?

Eléphanteau du PHP | 41 Messages

11 févr. 2015, 12:12

Yahhooo j'y suis presque !!! Juste encore une erreur :) Il me prend avec cette boucle :
<li>
<div>marque 1 - 2e id</div>
<div>marque 2 - 2e id</div>
<div>marque 2 - 3e id</div>
<div>marque 2 - 4e id</div>
<div>marque 2 - 5e id</div>
<div>marque 2 - 6e id</div>
<div>marque 2 - 7e id</div>
<div>marque 2 - 8e id</div>
<div>marque 2 - 9e id</div>
<div>marque 2 - 10e id</div>
<div>marque 2 - 11e id</div>
</li>
	
$lezautos = "";	
	$i=0;
	$requete = mysql_query("SELECT * FROM ".$entete_table."rauto WHERE active_occasion='1' AND id_marque!='2' ORDER BY date_occasion DESC LIMIT 0,10");
	
	while($ligne = mysql_fetch_array($requete)){

			$id_occasion = $ligne["id_occasion"];
			$id_marque = $ligne["id_marque"];

			$id_modele = $ligne["id_modele"];
			$requete2 = mysql_query("SELECT * FROM ".$entete_table."_plugin_rauto_modele WHERE id_modele='".$id_modele."'")or die(mysql_error());
			while($ligne2 = mysql_fetch_array($requete2)){
				$titre_modele = $ligne2["titre_modele"];
			}


	if($i==0){
			$lezautos .= "<li id='sauto_".$id_occasion."' style='z-index:2;display:block;' rel='".$id_occasion."'>";
	}else{
			$lezautos .= "<li id='sauto_".$id_occasion."' style='z-index:-999999;display:none;' rel='".$id_occasion."'>"; 
	}
	$i++;

		$lezautos .= "<div class='autre_marque'>";
		$lezautos .= "<h2>Autres marques</h2>";
		$lezautos .= "<h3>".$titre_modele."</h3>";
		$lezautos .= "</div>";

	$requete4 = mysql_query("SELECT * FROM ".$entete_table."rauto WHERE active_occasion='1' AND id_marque='2' ORDER BY date_occasion DESC LIMIT 0,10;");
	
	while($ligne3 = mysql_fetch_array($requete4)){

			$id_occasion2 = $ligne3["id_occasion"];
			$id_marque2 = $ligne3["id_marque"];

			$id_modele2 = $ligne3["id_modele"];
			$requete3 = mysql_query("SELECT * FROM ".$entete_table."_plugin_rauto_modele WHERE id_modele='".$id_modele2."'")or die(mysql_error());
			while($ligne4 = mysql_fetch_array($requete3)){
				$titre_modele2 = $ligne4["titre_modele"];
			}

		$lezautos .= "<div class='toyota'>";
		$lezautos .= "<h2>Marque 2</h2>";
		$lezautos .= "<h3>".$titre_modele2."</h3>";
		$lezautos .= "</div>";

}
	}	
			$lezautos .= "</li>";	
Il doit pas manquer grand chose à présent !

Eléphanteau du PHP | 41 Messages

11 févr. 2015, 18:21

Ayé ! Trouvé :) La p'tite astuce :

Avoir une autre expression $j=0.
Puis pour ma requête4 :
$j++;
$requete4 = mysql_query("SELECT * FROM ".$entete_table."rauto WHERE active_occasion='1' AND id_marque='2' ORDER BY date_occasion DESC LIMIT ".$j.",1");
Au lieu de :
$requete4 = mysql_query("SELECT * FROM ".$entete_table."rauto WHERE active_occasion='1' AND id_marque='2' ORDER BY date_occasion DESC LIMIT 0,10;");
Je marque en résolu !