Page 1 sur 1

PHP MYSQL -> Recuperation requete

Posté : 05 août 2010, 13:45
par gaetan1329
Bonjour,
Sur ce http://www.video2brain.com/fr/products.htm les DVD sont sur 3 colonne.Je pense que chaque case du tableau correspond à 1 ligne de la base de donnée.
Comment refaire cette mise en forme. :D

PS:Dans ma base j'ai 3 colonne id,titre,prix

Merci

Re: PHP MYSQL -> Recuperation requete

Posté : 05 août 2010, 14:18
par jojolapine
Bonjour,
Pour faire une mise en page comme celle-ci, tu peux te servir de l'opérateur modulo (% : http://php.net/manual/fr/language.opera ... hmetic.php ).
Tu fait ta requête normalement (comme si tu voulais afficher simplement des lignes).

Et ensuite à l'affichage tu faits ceci:
<?php

// requête, etc...

// initialisation du compteur
$compteur = 0;

// affichage
while(...){


    // Affichage d'une ligne
 


    // mise en forme
    // ici on fera une mise en page à trois colonnes, mais c'est la même chose pour plus
    if($compteur % 3 == 0){

        echo $compteur.'<br />';
    }
    else {

        echo $compteur.' | ';
    }

    // on incrémente le compteur
    $compteur++;
}
Ensuite il suffit juste de jouer sur l'initialisation du compteur et la condition comprenant le modulo.
J'ai fait une mise en page très basique (simplement un saut de ligne)
Il faut adapter bien sûr à la mise en page etc...

Voilà ;)

Re: PHP MYSQL -> Recuperation requete

Posté : 05 août 2010, 14:29
par gaetan1329
Merci beaucoup.
COmment le code peut faire 3 colonnes sans balises genre table ?? #-o

Parce que moi j'aurai espéré pourvoir faire ma mise en page en css et après je remplace juste par une variable.Mais la le css se forme dans le php ?

Re: PHP MYSQL -> Recuperation requete

Posté : 05 août 2010, 14:31
par jojolapine
La mise en page, c'est toi qui vois...
Je t'ai mis juste le principe!
A la place du <br />, tu peux très bien fermer une balise <tr>, ou encore donner une classe spécifique ( ".last-item" par exemple)....
Tout est possible après, mais c'est à toi de bosser un peu ;)

Re: PHP MYSQL -> Recuperation requete

Posté : 05 août 2010, 14:36
par gaetan1329
Bien sur je comprend mais je n'ai pas compris le code.Et par conséquent je ne vois pas comment lui donner du style... Pouvez vous détailler avec un autre exemple ou avec plus de commentaires ? Merci :D

Re: PHP MYSQL -> Recuperation requete

Posté : 05 août 2010, 14:53
par gaetan1329
Si j'ai bien compris c'est ca
<?php
try
{
	
	$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '');
}
catch(Exception $e)
{
	
        die('Erreur : '.$e->getMessage());
}

// Si tout va bien, on peut continuer


$reponse = $bdd->query('SELECT * FROM catalogue');


$compteur = 0;
while ($donnees = $reponse->fetch())
{
if($compteur % 3 == 0){

        echo 'colonne1';
    }
    else {

        echo 'colonne2';
    }

    // on incrémente le compteur
    $compteur++;
}



?>

Mais ca rend ca comme résultat dans le navigateur : colone1colone2colone2

Pourquoi colonne 2 s'affiche 2 fois

Re: PHP MYSQL -> Recuperation requete

Posté : 05 août 2010, 15:03
par jojolapine
Alors voici un exemple complet qui fonctionne:
<?php


// on considèrera que ceci sort de ta base de donnée
$donnees = array(
  array('id'=>1,'contenu'=>'Un'),
  array('id'=>2,'contenu'=>'Deux'),
  array('id'=>3,'contenu'=>'Trois'),
  array('id'=>4,'contenu'=>'Quatre'),
  array('id'=>5,'contenu'=>'Cinq'),
  array('id'=>6,'contenu'=>'Six'),
  array('id'=>7,'contenu'=>'Sept'),
  array('id'=>8,'contenu'=>'Huit'),
  array('id'=>9,'contenu'=>'Neuf'),
  array('id'=>10,'contenu'=>'Dix')
);


// Affichage de l'entête du tableau
?>

<table>
  <tbody>

<?php
// initialisation du compteur
$compteur = 0;

$nb_colonne = 5;

// affichage
// (remplacer le foreach par un while($line = mysql_fetch_*...) pour des données
// provenant réellement d'une bdd)
foreach($donnees as $line){

  // Si le modulo est égal à 0, c'est que l'on commence une ligne
  if(($compteur % $nb_colonne) == 0){
    echo '<tr>'.PHP_EOL;
  }

  echo '<td>'.PHP_EOL.
          '<h1>'.$line['id'].'</h1>'.PHP_EOL.
          '<p>'.$line['contenu'].'</p>'.PHP_EOL.
        '</td>';


  // Si le modulo est égal à $nb_colonne-1, c'est que l'on finit une ligne
  if(($compteur % $nb_colonne) == ($nb_colonne -1)){
    echo '</tr>'.PHP_EOL;
  }

  // on incrémente le compteur
  $compteur++;
}

?>

  </tbody>
</table>
Tu peux faire varier $nb_colonne et tu verras ça fonctionne toujours!

Re: PHP MYSQL -> Recuperation requete

Posté : 05 août 2010, 15:19
par gaetan1329
merci j'ai tout compris sauf ca "// (remplacer le foreach par un while($line = mysql_fetch_*...) pour des données
// provenant réellement d'une bdd)"

Re: PHP MYSQL -> Recuperation requete

Posté : 05 août 2010, 15:22
par jojolapine
Ben ça tu l'as fait tout seul dans ton exemple précédent ;)
c'est juste que je ne connais pas ton niveau ;)
Il arrive que des débutant copient-collent bêtement des codes d'exemple comme celui-ci, sans penser à changer la boucle par exemple!
Mais tu n'es pas de ceux là ;)

Re: PHP MYSQL -> Recuperation requete

Posté : 05 août 2010, 15:30
par gaetan1329
merci merci :D :D :D :D :D


Ça marche !!!!! I love you !

PS: Une petite dernière question :
<?
if (...) { ?>

 truc html

<? { ?>



Je voudrais savoir comment fonctionne ce code :D Et après je pose plus que questions promis :D

Re: PHP MYSQL -> Recuperation requete

Posté : 05 août 2010, 15:39
par jojolapine
Hop hop hop, on se calme!!! Ma mie ne supportera pas de rivaux :)

Sinon ben le code que tu montres ne marchera pas :)
Tu ne fermes pas l'accolade du if...
De plus je te conseille vivement de ne pas utiliser les short_open_tags (<? au lieu de <?php).

ça donne ça du coup:
<?php
if (...) { ?>

 truc html

<?php
}
Mais peut-être n'ais-je pas compris la question? Qu'entends-tu par "comment fonctionne..." ?

Re: PHP MYSQL -> Recuperation requete

Posté : 05 août 2010, 15:56
par gaetan1329
Je me disais " Si les argument sont valide alors ca execute {} sinon ca passse"

Sinon merci bcp =D>

Re: PHP MYSQL -> Recuperation requete

Posté : 05 août 2010, 15:57
par jojolapine
ben voui comme un bête if :)
<?php

if(true){
 echo 'true';
}
équivaut à ça:
<?php

if(true){
?>
true

<?php
}