PHP MYSQL -> Recuperation requete

Eléphanteau du PHP | 12 Messages

05 août 2010, 13:45

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

ViPHP
ViPHP | 3607 Messages

05 août 2010, 14:18

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à ;)

Eléphanteau du PHP | 12 Messages

05 août 2010, 14:29

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 ?

ViPHP
ViPHP | 3607 Messages

05 août 2010, 14:31

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 ;)

Eléphanteau du PHP | 12 Messages

05 août 2010, 14:36

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

Eléphanteau du PHP | 12 Messages

05 août 2010, 14:53

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

ViPHP
ViPHP | 3607 Messages

05 août 2010, 15:03

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!

Eléphanteau du PHP | 12 Messages

05 août 2010, 15:19

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)"

ViPHP
ViPHP | 3607 Messages

05 août 2010, 15:22

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à ;)

Eléphanteau du PHP | 12 Messages

05 août 2010, 15:30

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

ViPHP
ViPHP | 3607 Messages

05 août 2010, 15:39

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..." ?

Eléphanteau du PHP | 12 Messages

05 août 2010, 15:56

Je me disais " Si les argument sont valide alors ca execute {} sinon ca passse"

Sinon merci bcp =D>

ViPHP
ViPHP | 3607 Messages

05 août 2010, 15:57

ben voui comme un bête if :)
<?php

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

if(true){
?>
true

<?php
}