colonnes dynamiques

Avatar du membre
ViPHP
ViPHP | 3008 Messages

04 juin 2009, 11:11

Tu peux t'y fier, le tuto n'est en aucun cas en cause loin de là. L'erreur vient de ton côté. Je viens de reprendre le tuto qu'on t'a donné, tout marche à merveille.

Tu me demandes si la fonction verifLimite existe. C'est quand même toi qui a le code sous les yeux. Selon l'erreur indiquée, elle n'existe pas. As-tu vérifié dans ton code qu'elle est bien présente ?

Eléphant du PHP | 440 Messages

04 juin 2009, 11:17

Après avoir tout lu, et à peu près compris !, sur ce tuto http://www.phpdebutant.org/article84.php,
je me suis basé sur le dernier code que j'ai compris comme être un récapitulatif de tout ce qui est avant.
Sans doute, je me suis trompé, parce que je ne vois pas ce que j'ai pu oublier.
Débutant complet en php/mysql. Merci pour votre aide.

Avatar du membre
ViPHP
ViPHP | 3008 Messages

04 juin 2009, 11:23

Eh non il ne s'agit pas d'un récapitulatif. Une nouvelle bonne relecture est nécessaire je crois bien.
parce que je ne vois pas ce que j'ai pu oublier.
Heu...une petite fonction non ?

Eléphant du PHP | 440 Messages

04 juin 2009, 19:10

j'ai repris tout le code. Ca commence plutôt bien, puisque ma page s'affiche .. presque comme je veux.
<?php
//=========================================
// initialisation des variables 
//=========================================
// on va afficher 4 résultats par page.
$nombre = 4;  
// si limite n'existe pas on l'initialise à zéro
if (!$limite) $limite = 0; 
// on cherche le nom de la page.    
$path_parts = pathinfo($_SERVER['PHP_SELF']);
$page = $path_parts["basename"];

//=========================================    
// requête SQL qui compte le nombre total 
// d'enregistrements dans la table.
//=========================================
$select = 'SELECT * FROM baskets WHERE validation=1 ORDER BY id ASC LIMIT '.$limite.','.$nombre;
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
$total = mysql_num_rows($result);
//=========================================    
// si on a récupéré un resultat on l'affiche.
//=========================================
if($total) {
    // début du tableau
    echo '<table>'."\n";
        echo '<tr>';
        echo '<td></td>';
        echo '<td></td>';
        echo '</tr>'."\n";
    while($row = mysql_fetch_array($result)) {
        echo '<tr>';
        echo '<td align="center"><span class="style1"><strong>'.$row['nom'].'</strong></span></td>';
        echo '<td align="center"><span class="style1">'.$row['presentation'].'</span></td>';
        echo '<td align="center"><span class="style1"><a href="http://'.$row['photo'].'" target="_blank"><img src="http://'.$row['photo'].'" width="220" border="0"/></a></span></td>';
        echo '<td align="center"><span class="style1">'.$row['suite'].'</span></td>';
        echo '<td align="center"><span class="style1">'.$row['prix'].'</span></td>';
        echo '<td align="center"><span class="style1">'.$row['paypal'].'</span></td>';
        echo '</tr>'."\n";
    }
    echo '</table>'."\n";
}
else echo 'Pas d\'enregistrements dans cette table...';
mysql_free_result($result);

$limitesuivante = $limite + $nombre;
$limiteprecedente = $limite - $nombre;
if($limite != 0) {
    echo '<a href="'.$page.'?limite='.$limiteprecedente.'">Page précédente</a>';
}
if($limitesuivante < $total) {
    echo '<a href="'.$page.'?limite='.$limitesuivante.'">Page Suivante</a>';
}
//récupération de $limite
    if(isset($_GET['limite'])) 
        $limite=$_GET['limite'];    else   $limite=0;

function verifLimite($limite,$total,$nombre) {
    // je verifie si limite est un nombre.
    if(is_numeric($limite)) {
        
// si $limite est entre 0 et $total, $limite est ok
        // sinon $limite n'est pas valide.
        if(($limite >=0) && ($limite <= $total) && (($limite%$nombre)==0)) {
            // j'assigne 1 à $valide si $limite est entre 0 et $max
            $valide = 1;
        }    
        else {
            // sinon j'assigne 0 à $valide
            $valide = 0;
        }
    }
    else {
            // si $limite n'est pas numérique j'assigne 0 à $valide
            $valide = 0;
    }
// je renvois $valide
return $valide;
}
function affichePages($nb,$page,$total) {
        $nbpages=ceil($total/$nb);
        $numeroPages = 1;
        $compteurPages = 1;
        $limite  = 0;
        echo '<table border = "0" ><tr>'."\n";
        while($numeroPages <= $nbpages) {
        echo '<td ><a href = "'.$page.'?limite='.$limite.'">'.$numeroPages.'</a></td>'."\n";
        $limite = $limite + $nb;
        $numeroPages = $numeroPages + 1;
        $compteurPages = $compteurPages + 1;
            if($compteurPages == 10) {
            $compteurPages = 1;
            echo '<br>'."\n";
            }
        }
        echo '</tr></table>'."\n";
}
?>
Les résultats s'affichent en ligne au lieu d'être en colonne. C'est sûrement tout bête, mais comme il y a cette variable $row, je suis perdu.

Par contre, la fin du code pour passer en page suivante, n'affiche rien. Et je n'y comprends rien !
Débutant complet en php/mysql. Merci pour votre aide.

Avatar du membre
ViPHP
ViPHP | 3008 Messages

04 juin 2009, 21:02

Je me répète :
Ce code t'affiche les résultats sur 2 colonnes. J'ai mis un LIMIT pour que ça n'affiche que 4 comme tu veux. Tu devras donc faire un affichage page par page pour voir le reste (une petite recherche sur google).
Tu as comme mis de côté le code qui affiche sur 2 colonnes. Tu dois combiner les 2.

Maintenant pourquoi l'affichage des liens pour passer aux pages suivantes et précédentes ne marchent pas ?

Tu crées des fonctions mais tu ne les appelles nulle part.

Dans le code du tuto, tu vois que l'appel des fonctions se fait dès le début du code avec un require et qu'elle sont utilisées tout au long du code.

ViPHP
AB
ViPHP | 5818 Messages

05 juin 2009, 00:35

Et puis, ce n'est qu'un détail qui ne change rien à la fonctionnalité du code mais je trouve que c'est souvent plus clair de déclarer des fonctions avant de les utiliser.

Eléphant du PHP | 440 Messages

06 juin 2009, 08:59

Finalement, j'ai tout repris en testant au fur et à mesure et presque tout fonctionne, sauf l'affichage en colonnes. J'ai un affichage en ligne. Je tourne en rond sans comprendre.

Qu'est-ce qui cloche là dedans ?
    echo '<table>'."\n";
    // lecture et affichage des résultats sur 2 colonnes, 1 résultat par ligne.    
    while($row = mysql_fetch_array($result)) {
        echo '<tr>';
        echo '<td align="center"><span class="style1"><strong>'.$row['nom'].'</strong></span></td>';
        echo '<td align="center"><span class="style1">'.$row['presentation'].'</span></td>';
        echo '<td align="center"><span class="style1"><a href="http://'.$row['photo'].'" target="_blank"><img src="http://'.$row['photo'].'" width="220" border="0"/></a></span></td>';
        echo '<td align="center"><span class="style1">'.$row['suite'].'</span></td>';
        echo '<td align="center"><span class="style1">'.$row['prix'].'</span></td>';
        echo '<td align="center"><span class="style1">'.$row['paypal'].'</span></td>';
        echo '</tr>'."\n";
    }
    echo '</table>'."\n";
Débutant complet en php/mysql. Merci pour votre aide.

Avatar du membre
ViPHP
ViPHP | 3008 Messages

06 juin 2009, 23:47

Dis mois, tu as encore souvenir de ce bout de code donné en première page ?
<?php
$req = "SELECT * FROM ta_table LIMIT 0,4";
   
  //--- Résultat ---//
  $res = mysql_query($req);
  //met les données dans un tableau
  while($data = mysql_fetch_assoc($res))
  {
  $tablo[]=$data;
  }
  //détermine le nombre de colonnes
  $nbcol=2;

  echo '<table>';
  $nb=count($tablo);
  for($i=0;$i<$nb;$i++){
   
  //les valeurs à afficher
  $valeur1=$tablo[$i]['champ1'];
  $valeur2=$tablo[$i]['champ2'];

  if($i%$nbcol==0)
  echo '<tr>';
  echo '<td>',$valeur1,'<br/>',$valeur2,'</td>';

  if($i%$nbcol==($nbcol-1))
  echo '</tr>';

  }
  echo '</table>';

?> 

Eléphant du PHP | 440 Messages

07 juin 2009, 10:34

j'ai fait évoluer mon code ainsi
<?php
//=========================================
// includes du fichier fonctions
//=========================================
require 'fonctions.php';

$nombre = 4;  // on va afficher 4 résultats par page.
if (!isset($limite)) $limite = 0; // si on arrive sur la page pour la première fois 
               // on met limite à 0.
    
$path_parts = pathinfo($_SERVER['PHP_SELF']);
$page = $path_parts['basename'];

// requête SQL qui compte le nombre total d'enregistrements dans la table et qui
//récupère tous les enregistrements
$select = 'SELECT count(id) FROM baskets';
$result = mysql_query($select,$link)  or die ('Erreur : '.mysql_error() );
$row = mysql_fetch_row($result);
$total = $row[0];
//=========================================
// vérifier la validité de notre variable 
// $limite;
//=========================================
$verifLimite= verifLimite($limite,$total,$nombre);
// si la limite passée n'est pas valide on la remet à zéro
if(!$verifLimite)  {
    $limite = 0;
}
//=========================================
// requête SQL qui ne prend que le nombre 
// d'enregistrement necessaire à l'affichage.
//=========================================
$select = 'select * FROM baskets WHERE validation=1 ORDER BY id ASC limit '.$limite.','.$nombre;
$result = mysql_query($select,$link)  or die ('Erreur : '.mysql_error() );

$limitesuivante = $limite + $nombre;
$limiteprecedente = $limite - $nombre;
// si on a récupéré un résultat on l'affiche.
if($total) {
    // début du tableau
    echo '<table>'."\n";
		echo '<tr>';
		echo '</tr>'."\n";
    // lecture et affichage des résultats sur 2 colonnes, 1 résultat par ligne.    
    while($row = mysql_fetch_array($result)) {
        echo '<tr>';
        echo '<td align="center"><span class="style1"><strong>'.$row['nom'].'</strong><br/>'.$row['presentation'].'<br/><a href="http://'.$row['photo'].'" target="_blank"><img src="http://'.$row['photo'].'" width="220" border="0"/></a><br/>'.$row['suite'].'<br/>'.$row['prix'].'<br/>'.$row['paypal'].'</span></td>';
        echo '</tr>'."\n";
    }
    echo '</table>'."\n";
    // fin du tableau.
}
else echo '<span class="style1">'.'Désolé, rien en ce moment !'.'</span>';

// on libère le résultat
mysql_free_result($result);
//récupération de $limite
    if(isset($_GET['limite'])) 
        $limite=$_GET['limite'];    else   $limite=0;

function verifLimite($limite,$total,$nombre) {
    // je verifie si limite est un nombre.
    if(is_numeric($limite)) {
        
// si $limite est entre 0 et $total, $limite est ok
        // sinon $limite n'est pas valide.
        if(($limite >=0) && ($limite <= $total) && (($limite%$nombre)==0)) {
            // j'assigne 1 à $valide si $limite est entre 0 et $max
            $valide = 1;
        }    
        else {
            // sinon j'assigne 0 à $valide
            $valide = 0;
        }
    }
    else {
            // si $limite n'est pas numérique j'assigne 0 à $valide
            $valide = 0;
    }
// je renvois $valide
return $valide;
}

if($limite != 0) {
    echo '<a href="'.$page.'?limite='.$limiteprecedente.'">Page précédente</a>';
}
if($limitesuivante < $total) {
    echo '<a href="'.$page.'?limite='.$limitesuivante.'"> | Page Suivante</a>';
}

?>
($link est défini avant pour la connection).
L'affichage se fait sur 1 colonne au lieu de 2. Evidemment, ce n'est dit nul part que j'en veux 2 ! Mais je le dis comment ?
Débutant complet en php/mysql. Merci pour votre aide.

ViPHP
AB
ViPHP | 5818 Messages

07 juin 2009, 22:00

Si tu n'arrive pas à mettre en place le code de charabia tu peux regarder ce tuto http://www.phpfrance.com/forums/voir_sujet-241626.php

Eléphant du PHP | 440 Messages

08 juin 2009, 08:00

Merci pour ce tuto qui me permet enfin de conclure !

Voici le nouveau code :
<?php
//=========================================
// includes du fichier fonctions
//=========================================
require 'fonctions.php';

$nombre = 4;  // on va afficher 4 résultats par page.
if (!isset($limite)) $limite = 0; // si on arrive sur la page pour la première fois 
               // on met limite à 0.
    
$path_parts = pathinfo($_SERVER['PHP_SELF']);
$page = $path_parts['basename'];

// requête SQL qui compte le nombre total d'enregistrements dans la table et qui
//récupère tous les enregistrements
$select = 'SELECT count(id) FROM test';
$result = mysql_query($select,$link)  or die ('Erreur : '.mysql_error() );
$row = mysql_fetch_row($result);
$total = $row[0]; 
//=========================================
// vérifier la validité de notre variable 
// $limite;
//=========================================
$verifLimite= verifLimite($limite,$total,$nombre);
// si la limite passée n'est pas valide on la remet à zéro
if(!$verifLimite)  {
    $limite = 0;
}
//=========================================
// requête SQL qui ne prend que le nombre 
// d'enregistrement necessaire à l'affichage.
//=========================================
$select = 'select * FROM test WHERE validation=1 ORDER BY id DESC limit '.$limite.','.$nombre;
$result = mysql_query($select,$link)  or die ('Erreur : '.mysql_error() );
$nbCols = 2; // nombre de colonnes du tableau  
$cpt = 0;
$rs = mysql_query($select); 
$limitesuivante = $limite + $nombre;
$limiteprecedente = $limite - $nombre;
// si on a récupéré un résultat on l'affiche.
    // début du tableau
    echo '<table>';
		echo '<tr>';
		echo '</tr>';
    // lecture et affichage des résultats sur 2 colonnes, 1 résultat par ligne.    
	while ($row=mysql_fetch_assoc($rs)) { // parcours des résultats  

    // début d'une ligne  
    if ($cpt%$nbCols==0)
        echo '<tr>';
        echo '<td align="center"><span class="style1"><strong>'.$row['nom'].'</strong><br/>'.$row['presentation'].'<br/><a href="http://'.$row['photo'].'" target="_blank"><img src="http://'.$row['photo'].'" width="220" border="0"/></a><br/>'.$row['suite'].'<br/>'.$row['prix'].'<br/>'.$row['paypal'].'</span></td>';
		if ($cpt%$nbCols==($nbCols-1))
        echo '</tr>';
		$cpt++; // on incrémente le compteur pour savoir où on en est 
}  

// Au cas où ... 
if ($cpt!=0 && $cpt%$nbCols!=0) { // S'il n'y a pas eu assez de cellules dans la boucle pour finir la ligne ... 
    echo '<td colspan="'.($nbCols - ($cpt%$nbCols) ).'">&nbsp;</td>'; // ... on complète avec une cellule vide de la bonne taille... 
    echo '</tr>'; // ... et on ferme la ligne 
} 

    echo '</table>';
    // fin du tableau.

// on libère le résultat
mysql_free_result($result);
//récupération de $limite
    if(isset($_GET['limite'])) 
        $limite=$_GET['limite'];    else   $limite=0;

function verifLimite($limite,$total,$nombre) {
    // je verifie si limite est un nombre.
    if(is_numeric($limite)) {
        
// si $limite est entre 0 et $total, $limite est ok
        // sinon $limite n'est pas valide.
        if(($limite >=0) && ($limite <= $total) && (($limite%$nombre)==0)) {
            // j'assigne 1 à $valide si $limite est entre 0 et $max
            $valide = 1;
        }    
        else {
            // sinon j'assigne 0 à $valide
            $valide = 0;
        }
    }
    else {
            // si $limite n'est pas numérique j'assigne 0 à $valide
            $valide = 0;
    }
// je renvois $valide
return $valide;
}

if($limite != 0) {
    echo '<a href="'.$page.'?limite='.$limiteprecedente.'">Page précédente</a>';
}
if($limitesuivante < $total) {
    echo '<a href="'.$page.'?limite='.$limitesuivante.'"> | Page Suivante</a>';
}

?>
Débutant complet en php/mysql. Merci pour votre aide.