Afich page par page + n colonne

Répondre
lolipops
le 07/01/2005 à 04:29
lolipops
coucou all,

j'ai reussi a faire fonctionner le script afichage page par page :page du script sur le site

mais j'aurais besoin d'une petite adaptation et je voudrais savoir si c'est realisable depuis ce script et surtout comment lool

pour le moment j'ai plusieurs variables de plusieurs tables imbriquées dans un petit tableau qui se repete bien 1 fois par ligne et selon le nombre limite par page.
La barre de navig est impec

je voudrais que mes resultats s'affiche sur 2 collonnes pour limiter le nombre de pages.
(donc 2 tableaux par ligne)

je voulais inserer le script qui sert pour un affichage des miniatures de la gallerie photo mais ca marche pas...
page du script sur le site


HELP lool merci
Pas douée mais acharnée
lolipops
le 07/01/2005 à 23:17
lolipops
Coucou,

Ha oui la globule j'avait vu mais je voyais pas trop comment le manipuler,

c'est par rapport à la requete, moi je prend tout ce qu'il y a dans 2 tables differentes et je vois pas comment "stocker" proprement ces variables dans les array pour les ressortir après sur les 2 colonnes.

voici mon code creer d'apres ton "comment faire" (genial !! pas d'autres mots)

<?php

// Nous appelons la requete et le script qui permet l'affichage page par page specifique a cette page.
include('./include/fonctions/ReqAffichPpP.php'); // modif du nb de ligne par page

// BARRE NAVIG HAUT nous appelons uniquement "l'objet"(modif nb de lien affiche), les fonctions sont en includeGeneral dans l'index
include('./include/fonctions/BarreNavigPpPObjet.php');


// on cherche le type de titre et legende attribué a notre fichier
$sql1 = 'SELECT Typetitleg FROM '.$nomtable.'';
// on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)
$req1 = mysql_query($sql1) or die('Erreur SQL !'.$sql1.''.mysql_error());
// on récupère le résultat sous forme d'un tableau
$data1 = mysql_fetch_array($req1);
// on nomme le resultat sous forme de variable
$typetitleg = $data1['Typetitleg'];
// on libère l'espace mémoire alloué pour cette requête
mysql_free_result ($req1);

// on recupere les tires et legendes de ce type dans la table de stockage
$sql2 = 'SELECT * FROM titrelegende WHERE Typetitleg = "'.$typetitleg.'"';
// on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)
$req2 = mysql_query($sql2) or die('Erreur SQL !'.$sql2.''.mysql_error());
// on récupère le résultat sous forme d'un tableau
$titleg = mysql_fetch_array($req2);
// on libère l'espace mémoire alloué pour cette requête
mysql_free_result ($req2);


// on selectionne les enregistrements à afficher selon les fonctions definies plus haut et dans ReqAffichPpP.php
// la data nomtable est defini dans link.inc comme les liens
$sq3 = 'SELECT * FROM '.$nomtable.' ORDER BY nom ASC LIMIT '.$_GET['rangFiche'].','.$nb_ligne_par_page;
// on exécute la requête
$req3 = mysql_query($sq3) or die('Erreur SQL !'.$sq3.''.mysql_error());

// SCAN DES TUPLES
while ($data = mysql_fetch_array($req3)) {


// AFFICHAGE RESULTATS
echo '<table width="500" border="1" bordercolor="#FFFFFF">';
echo '<tr>';
echo '<td width="165">';
echo '<img src="'.$data['image'].'" border="0" height="100" width="100">';
echo '</td><td width="165">';
echo stripslashes(htmlentities(trim($titleg['titleg2'])));
echo '</td><td width="165">';
echo stripslashes(htmlentities(trim($titleg['titleg3'])));
echo '</td></tr>';
echo '<tr><td width="165">';
echo '<a href="index.php?IDdest=2&IDcrea=22&IDdestprev=' , $_GET['IDdest'] , '&IDcreaprev=' , $_GET['IDcrea'] , '&rangFiche=' , $_GET['rangFiche'] , '&ID=' , $data['ID'] , '">' , stripslashes(htmlentities(trim($data['nom']))) , '</a>';
echo '</td><td width="165">';
echo stripslashes(htmlentities(trim($data['prenom'])));
echo '</td><td width="165">';
echo stripslashes(htmlentities(trim($data['age'])));
echo '</td></tr>';
echo '</table>';
}
// on libère l'espace mémoire
mysql_free_result ($req3);

// BARRE NAVIG BAS
include('./include/fonctions/BarreNavigPpPObjet.php');

// on ferme la connexion
mysql_close ();
?>


T'e penses koi c realisable depuis des tables mulitiples ?

Merci
Pas douée mais acharnée
LA GLOBULE
le 08/01/2005 à 00:09
LA GLOBULE
Oui, c'est réalisable.

Si j'ai bien compris ton script, tu fais ton script de page par page autour de la requete $sq3.
Mais peut importe que tu affiches "autre chose" (le resultat de $sql2) dans ton page par page, ca ne change rien.

Regarde cet exmple simple :

<?php
$nb_affichage_par_page = 10;
$nbcol = 2;

$sql = 'SELECT count(id) AS nb_total_elements FROM table';
$req = mysql_query($sql) or die('Erreur SQL !'.$sql.''.mysql_error());
$temp = mysql_fetch_array($req);

if ($temp['nb_total_elements'] == 0) {
echo 'Aucun résultat';
}
else {
if (!isset($_GET['debut'])) $_GET['debut'] = 0;
else {
if (!is_int($_GET['debut'])) $_GET['debut'] = 0;
}

$sql = 'SELECT truc, muche FROM table ORDER BY truc ASC LIMIT '.$_GET['debut'].','.$nb_affichage_par_page;
$req = mysql_query($sql) or die('Erreur SQL !'.$sql.''.mysql_error());
while($data = mysql_fetch_array($res)) {
$tablo[]=$data;
}

$nb_elements = count ($tablo);
echo '<table>';
for($i=0; $i<$nb_elements; $i++){
if($i%$nbcol==0)
echo '<tr>';
echo '<td>'.$tablo[$i]['truc'].'</td><td>'.$tablo[$i]['muche'].'</td>';

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

echo barre_navigation($temp['nb_total_elements'], $nb_affichage_par_page, $_GET['debut'], 10);
}
?>



Ca ne change rien que je rajoute une requete SQL sur une autre table et que j'affiche les résultats dans ma ligne :

<?php
echo '<td>'.$tablo[$i]['truc'].'</td><td>'.$tablo[$i]['muche'].'</td>';
?>


Au final, ca ne boulversera pas le page par page.

Je peux tres bien faire :

<?php
echo '<td>'.$tablo[$i]['truc'].' '.$toto.'</td><td>'.$tablo[$i]['muche'].'</td>';
?>


En admettant que $toto existe et qu'elle représente le résultat d'une requete.

Tu vois ce que je dire ? Ton $sql3 n'est liée à aucune autre requete.
lolipops
le 08/01/2005 à 01:18
lolipops
Ok je pense avoir compris comment m'y prendre je vais tester de suite et je te dis ce qu'il en ressort

Merci beaucoup !
Pas douée mais acharnée
lolipops
le 08/01/2005 à 02:39
lolipops
Bon ca a marche a moitié loool

l'affichage sur N colonne marche impec !

J'ai un probleme avec ma barre de navig,
elle s'affiche avec le bon nombre de lien et tout mais elle ne permet pas de naviguer (oups lol)

Quand je passe la souris, je vois bien dans la barre d'etat que j'ai &debut=10 puis &debut=20 mais ca veut pas y aller quand je clique ???

j'ai recree une page complete (simplifiée par rapport au futur contenu) sans include,
(seule la base est appelée par l'index)

le code :

<?php
$nb_affichage_par_page = 10;
$nbcol = 2;


// Requete pour determiner le LIMIT

$sql = 'SELECT count(id) AS nb_total_elements FROM contact';
$req = mysql_query($sql) or die('Erreur SQL !'.$sql.''.mysql_error());
$temp = mysql_fetch_array($req);

if ($temp['nb_total_elements'] == 0) {
echo 'Aucun résultat';
}
else {
if (!isset($_GET['debut'])) $_GET['debut'] = 0;
else {
if (!is_int($_GET['debut'])) $_GET['debut'] = 0;
}

$nb_total = $temp['nb_total_elements'];




// FONCTION BARRE NAVIG

function barre_navigation ($nb_total,
$nb_affichage_par_page,
$debut,
$nb_liens_BarreNavig) {

$barre = '';

// on recherche l'URL courante munie de ses paramètre auxquels on ajoute le paramètre 'debut' qui jouera le role du premier élément de notre LIMIT
if ($_SERVER['QUERY_STRING'] == "") {
$query = $_SERVER['PHP_SELF'].'?debut=';
}
else {
$tableau = explode ("debut=", $_SERVER['QUERY_STRING']);
$nb_element = count ($tableau);
if ($nb_element == 1) {
$query = $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'].'&debut=';
}
else {
if ($tableau[0] == "") {
$query = $_SERVER['PHP_SELF'].'?debut=';
}
else {
$query = $_SERVER['PHP_SELF'].'?'.$tableau[0].'debut=';
}
}
}

// on calcul le numéro de la page active
$page_active = floor(($debut/$nb_affichage_par_page)+1);
// on calcul le nombre de pages total que va prendre notre affichage
$nb_pages_total = ceil($nb_total/$nb_affichage_par_page);

// on calcul le premier numero de la barre qui va s'afficher, ainsi que le dernier ($cpt_deb et $cpt_fin)
// exemple : 2 3 4 5 6 7 8 9 10 11 << $cpt_deb = 2 et $cpt_fin = 11
if ($nb_liens_BarreNavig%2==0) {
$cpt_deb1 = $page_active - ($nb_liens_BarreNavig/2)+1;
$cpt_fin1 = $page_active + ($nb_liens_BarreNavig/2);
}
else {
$cpt_deb1 = $page_active - floor(($nb_liens_BarreNavig/2));
$cpt_fin1 = $page_active + floor(($nb_liens_BarreNavig/2));
}

if ($cpt_deb1 <= 1) {
$cpt_deb = 1;
$cpt_fin = $nb_liens_BarreNavig;
}
elseif ($cpt_deb1>1 && $cpt_fin1<$nb_pages_total) {
$cpt_deb = $cpt_deb1;
$cpt_fin = $cpt_fin1;
}
else {
$cpt_deb = ($nb_pages_total-$nb_liens_BarreNavig)+1;
$cpt_fin = $nb_pages_total;
}

if ($nb_pages_total <= $nb_liens_BarreNavig) {
$cpt_deb=1;
$cpt_fin=$nb_pages_total;
}

// si le premier numéro qui s'affiche est différent de 1, on affiche un lien vers la premiere page
if ($cpt_deb != 1) {
$cible = $query.(0);
$lien = '<A HREF="'.$cible.'">&lt;Début</A>&nbsp;&nbsp;';
}
else {
$lien='';
}
$barre .= $lien;

// on affiche tous les liens de notre barre, tout en vérifiant de ne pas mettre de lien pour la page active
for ($cpt = $cpt_deb; $cpt <= $cpt_fin; $cpt++) {
if ($cpt == $page_active) {
if ($cpt == $nb_pages_total) {
$barre .= $cpt;
}
else {
$barre .= $cpt.'&nbsp;-&nbsp;';
}
}
else {
if ($cpt == $cpt_fin) {
$barre .= "<A HREF='".$query.(($cpt-1)*$nb_affichage_par_page);
$barre .= "'>".$cpt."</A>";
}
else {

$barre .= "<A HREF='".$query.(($cpt-1)*$nb_affichage_par_page);
$barre .= "'>".$cpt."</A>&nbsp;-&nbsp;";
}
}
}

$fin = ($nb_total - ($nb_total % $nb_affichage_par_page));
if (($nb_total % $nb_affichage_par_page) == 0) {
$fin = $fin - $nb_affichage_par_page;
}

// si $cpt_fin ne vaut pas la dernière page de la barre de navigation, on affiche un lien vers la dernière page de navigation
if ($cpt_fin != $nb_pages_total) {
$cible = $query.$fin;
$lien = '&nbsp;&nbsp;<A HREF="'.$cible.'">Fin&gt;</A>';
}
else {
$lien='';
}
$barre .= $lien;

return $barre;
}

// REQUETE FINALE pour AFFICHAGE (test simplifié)

$sql = 'SELECT nom, prenom FROM contact ORDER BY nom ASC LIMIT '.$_GET['debut'].','.$nb_affichage_par_page;
$req = mysql_query($sql) or die('Erreur SQL !'.$sql.''.mysql_error());
while($data = mysql_fetch_array($req)) {
$tablo[]=$data;
}

$nb_elements = count ($tablo);
echo '<table>';
for($i=0; $i<$nb_elements; $i++){
if($i%$nbcol==0)
echo '<tr>';
echo '<td>'.$tablo[$i]['nom'].'</td><td>'.$tablo[$i]['prenom'].'</td>';

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

echo '<span class="gras">'.barre_navigation($nb_total, $nb_affichage_par_page, $_GET['debut'], 10).'</span>';
}
?>
Pas douée mais acharnée
lolipops
le 08/01/2005 à 02:44
lolipops
Pour info la globule, j'ai juste modifie dans la barre de navig (objet) la data $temp['nb_total_elements'] par $nb_total que j'ai declarer apres la 1ere requete.
C'est pour que ca colle avec la fonction de la barre qui contient cette data
Pas douée mais acharnée
lolipops
le 08/01/2005 à 02:47
lolipops
PS :
Quand je clique, je reste sur la meme selection de data dans ma base par contre le lien dans la barre de navid de IE contient bien &debut=20 danc je change de page sans changer de data ...

Tu me suis ? lool
Pas douée mais acharnée
lolipops
le 08/01/2005 à 03:02
lolipops
Bon j'ai vire une ligne qui n'est pas dans mon script original ni dans ton "comment faire" et que tu as mis dans ton exemple au niveau de la requete d'affichage :

if (!is_int($_GET['debut'])) $_GET['debut'] = 0;

ET CA MARCHE !!

Mais dis moi, est ce une securite necessaire ou ca craint rien sans ca ?

En Tous les cas j'ai bien aimé reperer les coquilles (peut etre pas fait expres ?), fini les copier coller lol
Comme ca c clair qu'on assimile un peu mieux ce que l'on fait tourner...

Merci encore la globule
Pas douée mais acharnée
AlScafi
le 08/01/2005 à 05:07
AlScafi
lu, disons que ce n'est pas forcément obligatoire au niveau de la sécurité, is_int vérifie juste si $_GET['debut'] est un nombre (pour eviter de gros bug d'affichage, si le visiteur s'amuse !)
Répondre
LoadingChargement en cours