PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 26-03-2010 22:56:40

dan4
Membre
Inscription : 10-01-2010
Messages : 128

Affichage page par page?

J'ai trouvé ce site comme tutorial.
http://www.lephpfacile.com/howto/6-comm … age-en-php

Me semble qu'il doit y avoir plus facile à faire.

A voir le tuto, ça semble très complexe.

Si je dois faire afficher 30 item par page, est-ce qu'il faut que je créé des pages .php pour afficher des 30 autres item?

C'est que je ferais une requete sql pour faire afficher 30 item à la fois.

Ou bien, c'est un jeu de variables qui ferais que les pages se créer comme plus virtuellement?


Salutations smile

Hors ligne

#2 26-03-2010 23:11:01

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Affichage page par page?

Essayes ce tutorial : http://phpdebutant.org/article84.php

Il ne faut pas 30pages, c'est la preuve que tu n'as pas compris le tutorial. Et les pages ne se créent pas non plus. ^^
Lis bien le tutorial ci-dessus, il y va vraiment étape par étape et pour ce que j'ai vu explique de A à Z chaque étape.

Hors ligne

#3 27-03-2010 04:26:24

dan4
Membre
Inscription : 10-01-2010
Messages : 128

Re : Affichage page par page?

xTG a écrit :

Essayes ce tutorial : http://phpdebutant.org/article84.php

Il ne faut pas 30pages, c'est la preuve que tu n'as pas compris le tutorial. Et les pages ne se créent pas non plus. ^^
Lis bien le tutorial ci-dessus, il y va vraiment étape par étape et pour ce que j'ai vu explique de A à Z chaque étape.

Entre-temps, j'ai découvert ce tutorial après une recherche sur Google l'ami de tout le monde dit-on.

Je l'essais, mais je comprends à moitié. Ce sont les petits bout de code que je comprends pas l'emplacement à mettre.  C'est de l'appliqué à mon code qui devrait poser problème. A ce que j'ai compris, ça marche avec $_GET.

Il n'est pas simple ce tuto je trouve.


Salutations smile

Hors ligne

#4 27-03-2010 06:22:55

dan4
Membre
Inscription : 10-01-2010
Messages : 128

Re : Affichage page par page?

J'ai réussi à l'appliquer directement à mon code. Et j'ai maintenant page précédente et suivante. Mais une erreur dans le tutorial sur le minuscule du "p" à limiteprecedente et l'autre aussi.

Les variables sont sensible à la case.

Saviez-vous quoi? C'est un plaisir de le dire tongue  heheheh Peut-etre corriger cela pour les autres.

Je vous avoue que ça n'a pas été facile.

Quelques devinette a été nécessaire de ce tuto.


Salutations smile

Hors ligne

#5 27-03-2010 07:41:27

dan4
Membre
Inscription : 10-01-2010
Messages : 128

Re : Affichage page par page?

Dommage que l'ont peut pas placer les termes "précédent" et "suivant" à côté des chiffres. J'ai essayé de le faire sans succès. J'ai mis du css dans la fonction et ça veut pas rien savoir.

J'aurais plus tendance à les enlever.


Salutations smile

Hors ligne

#6 27-03-2010 09:55:16

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Affichage page par page?

Pour ne pas afficher les boutons précédent et suivant il suffit de mettre en commentaire l'appel de la fonction displayNextPreviousButtons($limite,$total,$nombre,$page);
.

Hors ligne

#7 27-03-2010 15:14:57

dan4
Membre
Inscription : 10-01-2010
Messages : 128

Re : Affichage page par page?

Je veux pouvoir afficher à coté des numéro de page, previous à gauche et next à droite.


Salutations smile

Hors ligne

#8 27-03-2010 15:30:34

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Affichage page par page?

Il suffit de les séparer en deux fonctions comme suit :

function displayPreviousButtons($limite,$total,$nb,$page) {
$limiteSuivante = $limite + $nb;
$limitePrecedente = $limite - $nb;
echo  '<table><tr>'."\n";
if($limite != 0) {
        echo  '<td valign="top">'."\n";
        echo  '<form action="'.$page.'" method="post">'."\n";
        echo  '<input type="submit" value="précédents">'."\n";
        echo  '<input type="hidden" value="'.$limitePrecedente.'" name="limite">'."\n";
        echo  '</form>'."\n";
        echo  '</td>'."\n";
}
echo  '</tr></table>'."\n";
}
function displayNextButtons($limite,$total,$nb,$page) {
$limiteSuivante = $limite + $nb;
$limitePrecedente = $limite - $nb;
echo  '<table><tr>'."\n";
if($limiteSuivante < $total) {
        echo  '<td valign="top">'."\n";
        echo  '<form action="'.$page.'" method="post">'."\n";
        echo  '<input type="submit" value="suivants">'."\n";
        echo  '<input type="hidden" value="'.$limiteSuivante.'" name="limite">'."\n";
        echo  '</form>'."\n";
        echo  '</td>'."\n";
           
}
echo  '</tr></table>'."\n";
}

Hors ligne

#9 27-03-2010 17:45:04

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 195

Re : Affichage page par page?

jamais d'echo dans une function roll

a+

Hors ligne

#10 27-03-2010 18:14:29

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Affichage page par page?

Je n'ai fait que reprendre le tutorial de phpdebutant Pierrot.
De nombreux débutants n'utilisent pas de pattern car ils ne savent pas ce que c'est et font du code brut.
Pour ma part j'ai aussi commencé ainsi.

Hors ligne

#11 27-03-2010 18:20:29

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 195

Re : Affichage page par page?

bah, tu as mal commencé wink big_smile

c'est pourtant simple :
a la place des echo, tu concatène une variable string ;

a++

Hors ligne

#12 27-03-2010 18:38:32

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Affichage page par page?

Je n'insinuais pas que c'était compliqué, juste que la raison pouvait ne pas se trouver quand on débute.
Après chacun sa méthode d'enseignement mais je pense que bon nombre de débutants abandonneraient ou ne ferraient que quémander des scripts tout fait si on commençait à leur parler de MVC, d'injection de dépendances ou autre... smile

Hors ligne

#13 28-03-2010 13:53:43

dan4
Membre
Inscription : 10-01-2010
Messages : 128

Re : Affichage page par page?

C'est bon d'avoir des modèles de script mais lorsqu'il faut adapter le bout de code à un autre code existant, là, c'est bon que l'on connaisse plus particulièrement les commandes. C'est pour cela que je me casse la tête à apprendre.  Je cherche très souvent des modèle juste pour comprendre comment est fait le script.

J'ai essayé le bout de code pour séparer les deux fonctions "precedent et suivant" et le bouton "suivant" n'a pas d'effet

la fonction :
displayNextButtons($limite,$total,$nb,$page)

$nb : variable indéfini
si je mets $nombre : pas de message mais le bouton n'a pas d'action.

C'est ok pour l'autre bouton si je mets aussi $nombre à la place de $nb.

codes de la page affichage.php :

<style>
<!--

table { margin-left:auto; margin-right:auto; }
th,td { border-width:1; border-color:rgb(102,102,255); border-style:dotted; text-align:center; white-space:no-wrap; }
th { background-color:#ffffdb; width:70px; }
p { font-size:x-small; font-family:Arial; font-stretch:narrower; font-weight:bold; line-height:0.9em; margin-bottom:3px; margin-top:3px; }
a:focus { outline:0 }
h5 { position:relative; top:13px; }

.thumbnail{
position: relative;
z-index: 0;
}

.thumbnail:hover{
background-color: transparent;
z-index: 50;
}

.thumbnail span{
position: absolute;
background-color: lightyellow;
padding: 5px;
left: -1000px;
border: 1px dashed gray;
visibility: hidden;
color: black;
text-decoration: none;
}

.thumbnail span img{
border-width: 0;
padding: 2px;
}

.thumbnail:hover span{
visibility: visible;
top: -50px;
left: 60px;
}

-->
</style>

<?php

require 'fonctions.php';

$nombre = 1;  //1 parce que j'ai pas bc d'enregistrement.
if (!isset($limite)) $limite = 0;
   
$path_parts = pathinfo($_SERVER['PHP_SELF']);
$page = $path_parts['basename'];

$db = mysql_connect('localhost', 'root', 'root') or die(mysql_error());
mysql_select_db('cristauxphil', $db) or die(mysql_error());

$select = mysql_query ("SELECT COUNT(*) FROM produits");
$row = mysql_fetch_row($select);

$total = $row[0];

$verifLimite = verifLimite($limite,$total,$nombre);

if(!$verifLimite) { $limite = 0; }

$req = mysql_query("SELECT * FROM produits ORDER BY noart ASC LIMIT $limite,$nombre",$db) or die(mysql_error());

if($total) {

echo '<h5 style="text-align:center">Présentement, il y\'a '.$row[0].' items disponibles en ligne.</h5>';

echo '<table>
<tr>
<th><h5>Photo</h5></th>
<th><h5>Catégorie</h5></th>
<th><h5>Numéro</h5></th>
<th><h5>Article</h5></th>
<th><h5>Taille</h5></th>
<th><h5>Stock</h5></th>
<th><h5>Prix</h5></th>
</tr>';

while($data = mysql_fetch_array($req))
{
  echo '<tr>'

  ?>
  <td><a class="thumbnail" href="#thumb"><img src="image/<?php echo $data['image']; ?>" width="20px" border="0"><span><img src="image/<?php echo $data['image']; ?>" /></span></a></td>
  <?php

  echo '<td><p>'. $data['nocat'] . '</p></td>';
  echo '<td><p>'. $data['noart'] . '</p></td>';
  echo '<td><p>' . $data['article'] . '</p></td>';
  echo '<td><p>' . $data['taille'] . '</p></td>';
  echo '<td><p>'. $data['stock'] . '</p></td>';
  echo '<td><p style="background:#ffffab; font-size:14px;">' . $data['prix'] . '</p></td>';
  echo '</tr>';
  echo '<tr>';
  echo '<td style="background-color:#ffffef; text-align:left; border-bottom: 3px inset #FF9900;" colspan="7"><p>Détails: ' . $data['details'] . '</p></td>';
  echo '</tr>';
}
  echo '</table>';

if($total > $nombre) {

  displayPreviousButtons($limite,$total,$nombre,$page);

  affichePages($nombre,$page,$total);

  displayNextButtons($limite,$total,$nombre,$page);


}
 
} else { echo 'Pas d\'enregistrements dans cette table...'; }

mysql_close();
?>

Fonctions.php :

<style>
<!--
.sans { border-width:0; text-align:center; font-size:1.5em; }
a:focus { outline:0; }
-->
</style>
<?php


function displayPreviousButtons($limite,$total,$nb,$page) {
  $limiteSuivante = $limite + $nb;
  $limitePrecedente = $limite - $nb;
  echo '<table><tr>'."\n";
  if($limite != 0) {
  echo '<td valign="top">'."\n";
  echo '<form action="'.$page.'" method="post">'."\n";
  echo '<input type="submit" value="précédents">'."\n";
  echo '<input type="hidden" value="'.$limitePrecedente.'" name="limite">'."\n";
  echo '</form>'."\n";
  echo '</td>'."\n";
  }
  echo '</tr></table>'."\n";
}

function displayNextButtons($limite,$total,$nb,$page) {
  $limiteSuivante = $limite + $nb;
  $limitePrecedente = $limite - $nb;
  echo '<table><tr>'."\n";
  if($limiteSuivante < $total) {
  echo '<td valign="top">'."\n";
  echo '<form action="'.$page.'" method="post">'."\n";
  echo '<input type="submit" value="suivants">'."\n";
  echo '<input type="hidden" value="'.$limiteSuivante.'" name="limite">'."\n";
  echo '</form>'."\n";
  echo '</td>'."\n";
  }
  echo '</tr></table>'."\n";
}


function affichePages($nb,$page,$total) {
  $nbpages=ceil($total/$nb);
  $numeroPages = 1;
  $compteurPages = 1;
  $limite = 0;
  echo '<table><tr>'."\n";
  while($numeroPages <= $nbpages) {
  echo '<td class="sans"><a href = "'.$page.'?limite='.$limite.'">'.$numeroPages.'</a></td>'."\n";
  $limite = $limite + $nb;
  $numeroPages = $numeroPages + 1;
  $compteurPages = $compteurPages + 1;
  if($compteurPages == 10) {
  $compteurPages = 1;
  }
  }
  echo '</tr></table>'."\n";
  }
  if(isset($_GET['limite']))
  $limite=$_GET['limite'];
  else $limite=0;

function verifLimite($limite,$total,$nombre) {
  if(is_numeric($limite)) {

  if(($limite >=0) && ($limite <= $total) && (($limite%$nombre)==0)) {
  $valide = 1;
  }
  else {
  $valide = 0;
  }
  }
  else {
  $valide = 0;
  }
  return $valide;
}

J'ai adapté le cour d'ici à mon script. Pour le moment, c'est juste le bouton SUIVANT qui n'a aucun effet et aussi l'emplacement à coté des chiffres.

Dernière modification par dan4 (28-03-2010 13:54:46)


Salutations smile

Hors ligne

#14 28-03-2010 21:51:57

dan4
Membre
Inscription : 10-01-2010
Messages : 128

Re : Affichage page par page?

Le page par page, j'ai laissé tombé la notion de "précédent et suivant", car je n'arrive vraiment pas à faire fonctionner cette fonction. Je vais peut-être y revenir.

Pour ce qui touche les Numéros de page, j'aimerais au moins pouvoir indiquer la page courante en mettant [] pour placer en évidence la page en cour. Mais, selon le script, je ne vois pas ou placer le code.

--

Merci xTG pour vos indications et aussi Pierrot.



dan4 a écrit :

C'est bon d'avoir des modèles de script mais lorsqu'il faut adapter le bout de code à un autre code existant, là, c'est bon que l'on connaisse plus particulièrement les commandes. C'est pour cela que je me casse la tête à apprendre.  Je cherche très souvent des modèle juste pour comprendre comment est fait le script.

J'ai essayé le bout de code pour séparer les deux fonctions "precedent et suivant" et le bouton "suivant" n'a pas d'effet

la fonction :
displayNextButtons($limite,$total,$nb,$page)

$nb : variable indéfini
si je mets $nombre : pas de message mais le bouton n'a pas d'action.

C'est ok pour l'autre bouton si je mets aussi $nombre à la place de $nb.

codes de la page affichage.php :

<style>
<!--

table { margin-left:auto; margin-right:auto; }
th,td { border-width:1; border-color:rgb(102,102,255); border-style:dotted; text-align:center; white-space:no-wrap; }
th { background-color:#ffffdb; width:70px; }
p { font-size:x-small; font-family:Arial; font-stretch:narrower; font-weight:bold; line-height:0.9em; margin-bottom:3px; margin-top:3px; }
a:focus { outline:0 }
h5 { position:relative; top:13px; }

.thumbnail{
position: relative;
z-index: 0;
}

.thumbnail:hover{
background-color: transparent;
z-index: 50;
}

.thumbnail span{
position: absolute;
background-color: lightyellow;
padding: 5px;
left: -1000px;
border: 1px dashed gray;
visibility: hidden;
color: black;
text-decoration: none;
}

.thumbnail span img{
border-width: 0;
padding: 2px;
}

.thumbnail:hover span{
visibility: visible;
top: -50px;
left: 60px;
}

-->
</style>

<?php

require 'fonctions.php';

$nombre = 1;  //1 parce que j'ai pas bc d'enregistrement.
if (!isset($limite)) $limite = 0;
   
$path_parts = pathinfo($_SERVER['PHP_SELF']);
$page = $path_parts['basename'];

$db = mysql_connect('localhost', 'root', 'root') or die(mysql_error());
mysql_select_db('cristauxphil', $db) or die(mysql_error());

$select = mysql_query ("SELECT COUNT(*) FROM produits");
$row = mysql_fetch_row($select);

$total = $row[0];

$verifLimite = verifLimite($limite,$total,$nombre);

if(!$verifLimite) { $limite = 0; }

$req = mysql_query("SELECT * FROM produits ORDER BY noart ASC LIMIT $limite,$nombre",$db) or die(mysql_error());

if($total) {

echo '<h5 style="text-align:center">Présentement, il y\'a '.$row[0].' items disponibles en ligne.</h5>';

echo '<table>
<tr>
<th><h5>Photo</h5></th>
<th><h5>Catégorie</h5></th>
<th><h5>Numéro</h5></th>
<th><h5>Article</h5></th>
<th><h5>Taille</h5></th>
<th><h5>Stock</h5></th>
<th><h5>Prix</h5></th>
</tr>';

while($data = mysql_fetch_array($req))
{
  echo '<tr>'

  ?>
  <td><a class="thumbnail" href="#thumb"><img src="image/<?php echo $data['image']; ?>" width="20px" border="0"><span><img src="image/<?php echo $data['image']; ?>" /></span></a></td>
  <?php

  echo '<td><p>'. $data['nocat'] . '</p></td>';
  echo '<td><p>'. $data['noart'] . '</p></td>';
  echo '<td><p>' . $data['article'] . '</p></td>';
  echo '<td><p>' . $data['taille'] . '</p></td>';
  echo '<td><p>'. $data['stock'] . '</p></td>';
  echo '<td><p style="background:#ffffab; font-size:14px;">' . $data['prix'] . '</p></td>';
  echo '</tr>';
  echo '<tr>';
  echo '<td style="background-color:#ffffef; text-align:left; border-bottom: 3px inset #FF9900;" colspan="7"><p>Détails: ' . $data['details'] . '</p></td>';
  echo '</tr>';
}
  echo '</table>';

if($total > $nombre) {

  displayPreviousButtons($limite,$total,$nombre,$page);

  affichePages($nombre,$page,$total);

  displayNextButtons($limite,$total,$nombre,$page);


}
 
} else { echo 'Pas d\'enregistrements dans cette table...'; }

mysql_close();
?>

Fonctions.php :

<style>
<!--
.sans { border-width:0; text-align:center; font-size:1.5em; }
a:focus { outline:0; }
-->
</style>
<?php


function displayPreviousButtons($limite,$total,$nb,$page) {
  $limiteSuivante = $limite + $nb;
  $limitePrecedente = $limite - $nb;
  echo '<table><tr>'."\n";
  if($limite != 0) {
  echo '<td valign="top">'."\n";
  echo '<form action="'.$page.'" method="post">'."\n";
  echo '<input type="submit" value="précédents">'."\n";
  echo '<input type="hidden" value="'.$limitePrecedente.'" name="limite">'."\n";
  echo '</form>'."\n";
  echo '</td>'."\n";
  }
  echo '</tr></table>'."\n";
}

function displayNextButtons($limite,$total,$nb,$page) {
  $limiteSuivante = $limite + $nb;
  $limitePrecedente = $limite - $nb;
  echo '<table><tr>'."\n";
  if($limiteSuivante < $total) {
  echo '<td valign="top">'."\n";
  echo '<form action="'.$page.'" method="post">'."\n";
  echo '<input type="submit" value="suivants">'."\n";
  echo '<input type="hidden" value="'.$limiteSuivante.'" name="limite">'."\n";
  echo '</form>'."\n";
  echo '</td>'."\n";
  }
  echo '</tr></table>'."\n";
}


function affichePages($nb,$page,$total) {
  $nbpages=ceil($total/$nb);
  $numeroPages = 1;
  $compteurPages = 1;
  $limite = 0;
  echo '<table><tr>'."\n";
  while($numeroPages <= $nbpages) {
  echo '<td class="sans"><a href = "'.$page.'?limite='.$limite.'">'.$numeroPages.'</a></td>'."\n";
  $limite = $limite + $nb;
  $numeroPages = $numeroPages + 1;
  $compteurPages = $compteurPages + 1;
  if($compteurPages == 10) {
  $compteurPages = 1;
  }
  }
  echo '</tr></table>'."\n";
  }
  if(isset($_GET['limite']))
  $limite=$_GET['limite'];
  else $limite=0;

function verifLimite($limite,$total,$nombre) {
  if(is_numeric($limite)) {

  if(($limite >=0) && ($limite <= $total) && (($limite%$nombre)==0)) {
  $valide = 1;
  }
  else {
  $valide = 0;
  }
  }
  else {
  $valide = 0;
  }
  return $valide;
}

J'ai adapté le cour d'ici à mon script. Pour le moment, c'est juste le bouton SUIVANT qui n'a aucun effet et aussi l'emplacement à coté des chiffres.


Salutations smile

Hors ligne

#15 29-03-2010 03:02:13

dan4
Membre
Inscription : 10-01-2010
Messages : 128

Re : Affichage page par page?

Salut à vous tous et toutes, bien, j'ai trouvé un super et excellent système de pagination expliqué. Je pense que ça vaut la peine d'y mettre une attention et de l'étudier.

http://seebz.net/34-pagination-2-comme- … mieux.html

Je l'adopte mais je vais aussi l'étudier..

En passant, je l'ai testé dans mon script et aucune erreur.


Salutations smile

Hors ligne

Pied de page des forums