IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Afficher données MySQL en fonction du nombre de sorties


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2009
    Messages : 129
    Par défaut Afficher données MySQL en fonction du nombre de sorties
    Bonjour,

    J’espère que je post au bon endroit ! (pour moi il s’agit plus d’un problème de PHP de de connexion à MySQL)

    Je me permets de me tourner vers vous car je ne trouve pas la solution à un problème.
    Je suis en train de faire un site avec une BDD MySql dans laquelle se trouvent 9 colonnes.
    Mon problème se trouve à l’affichage des informations.

    Le but est de faire 4 vignettes l’une à côté de l’autre avec les informations d’une ligne de la BDD.
    Si j’ai plus de 4 vignettes, je souhaiterais mettre les 4 suivantes dessous et ce, jusqu’à la fin de mon résultat.

    En HTML, avec du statique, je suis capable de le faire avec un float :left par contre quand je ne connais pas le nombre de ligne résultant de ma requête, c’est plus compliqué (ceux qui est le cas à chaque fois )
    En effet, quand j’ai 4 ou un multiple de 4, je mets un float :none sur la dernière vignette avec un truc comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if ($nb_vignette < 3)
    	{
    echo 'float:left';
    	$nb_vignette = $nb_vignette +1;
    	}
    	else
    	{
    	echo 'float:none';
    	$nb_vignette = 0;
    }
    Mais quand j’ai qu’une, deux ,trois résultat ou plus de 4, ce type de procédé ne fonctionne pas.
    Par exemple la 5eme vignette garde le float :left ce qui est logique mais je ne vois pas comment resoudre ca …
    J’ai essayé avec un switch($nb_vignette) case 1, case 2 etc mais c’est vite devenu une usine à gaz.

    Pouvez-vous me donner un petit coup de main ?
    PS : je ne suis pas un spécialiste de PHP comme vous pourrez le voir dans mon code

    Merci d’avance

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
     
    <?php
    //Requete sur les type_mat non vide
    $sql_type_mat_titre = 'SELECT DISTINCT `type_mat` FROM `occasion` WHERE `designation` <> "" ORDER BY `type_mat`';
    $result_type_mat_titre = mysql_query ($sql_type_mat_titre) or die ('Erreur SQL !'.$sql_type_mat_titre.'<br />'.mysql_error());
     
    // on affiche les titres par order alphabetique
    while($data_type_mat = mysql_fetch_array($result_type_mat_titre))
    	{
    	$type_mat_titre = $data_type_mat['type_mat'];
    	echo '
    		<div id="separateur2" style="font-size:10px;">
    			<a href="'.include 'adressesite.inc.php';
    	echo'
    			/occasions.php#page"></br>       Haut de page</a>
    		</div>
    		<div class="tdoccastitre" id="'.$type_mat_titre.'">'.$type_mat_titre.'
    		</div>';
    	//Pour chaque type_mat, on affiche la 1ere photo et les info des mat
    	$sql_mat = 'SELECT * FROM `occasion` WHERE `type_mat` = "'.$type_mat_titre.'"';
    	$result_mat = mysql_query ($sql_mat) or die ('Erreur SQL !'.$sql_mat.'<br />'.mysql_error());
    	$nb_vignette = 0;
    	while($data_mat = mysql_fetch_array($result_mat))
    		{
    		$n_serie = $data_mat['n_serie'];
    		$matricule = $data_mat['matricule'];
    		$etat_acquisition = $data_mat['etat_acquisition'];
    		$designation = $data_mat['designation'];
    		$annee_origine = $data_mat['annee_origine'];
    		$marque = $data_mat['marque'];
    		$type_mat = $data_mat['type_mat'];
    		$photo = $data_mat['photo'];
    		//Si la marque se trouve dans la designation -> on sup
    		if (preg_match("/$marque/", $designation))
    			{ 
    			//echo "trouvé</br>";
    			$designation = preg_replace ("/$marque/","", $designation);
    			}
    			else
    			{
    			//echo "non vu</br>";
    			}
    		//Si le type mat se trouve dans la designation -> on sup
    		if (preg_match("/$type_mat/", $designation))
    			{ 
    			//echo "trouvé</br>";
    			$designation = preg_replace ("/$type_mat/","", $designation);
    			}
    			else
    			{
    			//echo "non vu</br>";
    			}
     
     
    		//echo $n_serie.' '.$matricule.' '.$etat_acquisition.' '.$designation.' '.$annee_origine.' '.$marque.' '.$type_mat.' '.$photo.'</br>';
     
    		echo '
    			<div style="';
    		//test IF
    		if ($nb_vignette < 3)
    			{echo 'float:left';
    			$nb_vignette = $nb_vignette +1;
    			}
    			else
    			{
    			echo 'float:none';
    			$nb_vignette = 0;}
    		echo	'">';
     
     
    		echo '	<a href="'.include 'adressesite.inc.php';
    		echo '		
    				/'.$matricule.'.php"/><img class="tdoccasphoto" src="'.include 'adressesite.inc.php';
    		echo '
    				/'.$matricule.'.jpg" border="0" alt="'.$marque.' - '.$designation.'" title="'.$marque.' - '.$designation.'" width="150px" style="margin-bottom:10px"/>
    				</a>
    				</br>'.$marque.
    				'</br>'.$designation.
    				'</br>
    				<span class="tboccasinfo"><a href="'.include 'adressesite.inc.php';
    		echo	'/occasions/'.$matricule.'.php">Plus d infos</a></span>
    				
    			</div>';
    		}
    	}
     
     
    ?>

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Je ne comprends pas bien ton problème : si tu as deux vignettes, elles seront toutes les deux flottantes et donc l'une a côté de l'autre, si tu en as 14, tu auras bien ton "none" toutes les 4 vignettes.

    Au passage pour tester les multiples de 4 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($nb_vignette % 4  != 0) {
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2009
    Messages : 129
    Par défaut
    Salut.

    Merci pour le retour !

    si tu as deux vignettes, elles seront toutes les deux flottantes
    Alors oui mais non car dans le cas-là, j'ai les 2 div en flottante or il faut que la 2ème soit en none sinon la div suivante qui est une div de séparation ne sera pas au bon endroit.

    if ($nb_vignette % 4 != 0) {
    Oui j'avais testé ça mais le problème reste le même, je te donne un exemple :
    J'ai un retour de 5 lignes.
    Les 4ères pas de souci, la 4ème prend bien le float :none donc la 5ème va à la ligne.
    Par contre, la 5ème, vu que la variable $nb_vignette est à 0, va prendre le float :left.

    La div id= « separateur2 » va donc se retrouver plus haut etc
    J’ai ajouté une PJ pour que tu vois ce que ça donne.
    Images attachées Images attachées  

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Possible solution : déterminer le nombre total d'éléments et vérifier si on est en train d'afficher le dernier élément de la liste.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2009
    Messages : 129
    Par défaut
    Salut

    Encore une fois, developpez.net a frappé

    Possible solution : déterminer le nombre total d'éléments et vérifier si on est en train d'afficher le dernier élément de la liste.
    J'avais fait un truc comme ça vendredi mais j'avais pas eu le résultat alors que ça marche super bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    $nb_vignette = 1;
    $nb_ligne = mysql_num_rows($result_mat);
    if(($nb_vignette <=3) AND ($nb_ligne <>1))
    	{
    		echo 'style="float:left;" id="'.$nb_vignette.'_'.$nb_ligne.'">'; // left
    		$nb_vignette = $nb_vignette +1;
    		$nb_ligne = $nb_ligne -1;
    	}
    	else
    	{
    	echo 'style="float:none;" id="'.$nb_vignette.'_'.$nb_ligne.'">'; //none
    	$nb_vignette = 1;
    	$nb_ligne = $nb_ligne -1;
    	}
    GÉNIAL merci a vous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 26/10/2013, 13h32
  2. Afficher données MySql via JSP/SERVLET
    Par rockncaly dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 25/01/2013, 16h16
  3. Données MYSQL et fonction strtr()
    Par bupocirk dans le forum Débuter
    Réponses: 1
    Dernier message: 15/09/2009, 02h13
  4. [MySQL] Afficher données Mysql avec PHP
    Par Tablaturing dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 19/10/2007, 09h46
  5. Afficher des données dans un datagrid à partir d'une base de données MySQL
    Par General_Garrisson dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 13/07/2006, 15h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo