Fonctions en PHP

Résolu/Fermé
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 - 19 févr. 2007 à 02:14
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 - 22 févr. 2007 à 18:21
Bonsoir à tous !
Je suis en train de réaliser un "catalogue" en php et je voudrais limiter l'affichage à10/15 enregistrements par par pages avec des liens pour afficher les autres. Voir sur http://txiki.free.fr
Pour cela j'utilise le fichier séparé "fonctions.php" dont voici le code:
<?
// =================================================================================
// fonction qui affiche boutons Précédent  Suivant
// =================================================================================
function displayNextPreviousButtons($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édente'>.\n";
        echo  "<input type='hidden' value=".$limitePrecedente." name='limite'>.\n";
        echo  "</form>.\n";
        echo  "</td>.\n";
}
if($limiteSuivante < $total) {
        echo  "<td valign='top'>.\n";
        echo  "<form action=".$page." method='post'>.\n";
        echo  "<input type='submit' value='suivante'>.\n";
        echo  "<input type='hidden' value=".$limiteSuivante." name='limite'>.\n";
        echo  "</form>.\n";
        echo  "</td>.\n";
            
}
echo  "</tr></table>.\n";
}

// =========================================================================================
// fonction qui affiche les liens vers les pages
//==========================================================================================
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";
}
// =================================================================================
//récupération de $limite
// =================================================================================
    if(isset($_POST['limite']))

        $limite=$_POST['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;
}
?>

Comme vous pouvez le constater sur le (site de test) ces liens ne fonctionnent pas. Ils nous ramène toujours en haut de la première page c'est à dire au premier enregistrement.
Ensuite j'aurais un autre Pb (la récupération des champs en cliquant sur le lien Editer de chaque enregistrement) mais on verra plus tard.
Commençons déjà par faire fonctionner ces satanés liens et boutons Suivant et Précédent (qui s'affiche à partir de la seconde page).
Si vous voulez, je peux aussi vous mettre le code de liste.php

Merci d'avance pour votre aide.
J'ai zappé quelque chose mais je ne vois pas où (a force.....)

8 réponses

txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 517
19 févr. 2007 à 15:25
Alors ? personne pour cette question ?
Tant pis !
bonne journée quand même !
0
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
19 févr. 2007 à 16:47
Bonjour,

Peux-tu nous donner le bout de code qui contient la requête SQL ?
Sinon, je ne vois pas où tu récupères le $limite qui vient de $_GET (des liens, donc)

Xavier
0
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 517
20 févr. 2007 à 07:45
Salut Reivax962,
ésolé pour ce retard mais hier soir j'étais très fatigué et me suis couché très tôt.
Je te passerai le code ce soir donc mais la $_GET me fait "tilt" (je crois que j'ai utilisé $_POST)...

A ce soir donc et merci pour ta réponse !
0
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 517
20 févr. 2007 à 17:38
Salut Reivax962 ,

Merci pour ta réponse. Voici la portion de code que tu me demande:

//==========================================================================    
// requête SQL qui compte le nombre total d'enregistrements dans la table.
//==========================================================================
$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 nom,editeur,comment FROM test ORDER BY id ASC limit '.$limite.','.$nombre;

$result = mysql_query($select)  or die ('Erreur : '.mysql_error() );


J'espère que tu y trouvera une boulette (c'est ma spécialité hi hi hi hi !!!)

Merci encore pour ta coopération ! ;-)
Le bonheur est la seule chose que l'on peut donner sans l'avoir.
0
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011 > txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024
20 févr. 2007 à 17:42
Bonjour !

J'ai un doute sur
//===================================================
// 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;
}
Tu pourrais essayer de mettre
echo $limite;
avant et après ton if{}, pour voir s'il ne les remet pas tout le temps à 0 ?
0
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 517 > txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024
20 févr. 2007 à 18:10
Merci pour ta réponse très rapide,

Hélas ! ça ne change rien. Même combat sauf qu'en plus j'ai deux 00 qui s'affichent juste avant le tableau (et ces cotes et points que j'avais déjà mais je ne vois d'où ils viennent ???)
Je t'ai mis en italique gras les 2 zéros.

00. '. '. '. '. '. '. '. '. '. '.
J'ai aussi des points juste avant la ligne de n° de pages (peut-etre un indice ? ? ?

En tous cas je te remercie infiniment pour ton aide.

Le bonheur est la seule chose que l'on peut donner sans l'avoir.
0
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
20 févr. 2007 à 18:14
Euh, la fonction "echo" permet justement d'afficher un truc ;)
Donc là, ça te dit que $limite vaut déjà 0 à l'endroit où tu as mis le echo $limite...
0
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 517
20 févr. 2007 à 18:36
Oui ça je sais mais ça veut dire quoi dans ce cas ?
On est forcément à zéro puisque c'est la première page !

Mon Pb est que les liens au dessous des 10 premiers (pour la navigation) ne donnent rien.
Quoique l'on clique, ça agit comme une # (dièse) tu sais comme pour remonter en haut de page lorsque tu a des pages "listing" par exemple....

Tu veux que je te copie les codes enn entier (la liste et la page qui contient le formulaire qui est censé récupérer les valeurs du Editer qui a été cliqué). La liste de 420 enregistrements et limitée à 10 l'affichage
<?
//=========================================
// includes du fichier fonctions
//=========================================
require 'fonctions.php';

//=========================================
// information pour la connection à le DB
//=========================================
$host = 'localhost';
$user = 'root';
$pass = '';
$db = 'test';

//=========================================
// initialisation des variables 
//=========================================
$nombre = 10;  // on va afficher 10 résultats par page.
$limite = 0;
if (!$limite);  // si limite n'existe pas on l'initialise à zéro

$path_parts = pathinfo($_SERVER['PHP_SELF']);  // on cherche le nom de la page.

$page = $path_parts["basename"];

//======================
// connection à la DB
//======================
$link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() ); // connection à la base
mysql_select_db($db) or die ('Impossible de se connecter à la base'); // sélection de la table

//==========================================================================    
// requête SQL qui compte le nombre total d'enregistrements dans la table.
//==========================================================================
$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
echo $limite;
if(!$verifLimite)  {
    $limite = 0;
}
echo $limite;

//======================================================================================
// requête SQL qui ne prend que le nombre d'enregistrement necessaire à l'affichage.
//======================================================================================

$select = 'select nom,editeur,comment FROM test ORDER BY id ASC limit '.$limite.','.$nombre;

$result = mysql_query($select)  or die ('Erreur : '.mysql_error() );


//=============================================    
// si on a récupéré un resultat on l'affiche.
//=============================================

if($total) {
  echo "<table width='70%' bgcolor='#FFFFFF' border='1' cellspacing='0' cellpadding='4' align='center'>\n";
// première ligne on affiche les titres Accès et Logiciels dans 2 colonnes
        echo "<tr text-align='center' padding='3px' class='blanc'>";
        echo "<td bgcolor='#669999'><h2> Action </h2></td>";
        echo "<td bgcolor='#669999'><h2> Logiciels </h2></td>";
        echo "</tr>.\n";
// lecture et affichage des résultats sur 2 colonnes, 1 résultat par lot de 3 lignes.    
    while($row = mysql_fetch_array($result)) {
  echo "<tr>";
  echo "<td rowspan='2'  bgcolor='#FF9900' align='center' width='10%'>"; // largeur de la première colonne (fusion de 3 lignes)
  echo "<p><a href='editer.php?id=['id']'> Editer </a></p>"; // <P> pour 1 saut plus important entre les 2 liens
  echo "<p><a href='delete.php?id=['id']'> supprimer </a></p>";
  echo "</td>";
  echo "<td bgcolor='#F0F0F0'><strong> Nom du logiciel: </strong>".$row['nom']."</td>"; // affiche le nom du logiciel (1ere cellule)
  echo "</td>";
  echo "</tr>'.\n";
  echo "<tr>";
  echo "<td bgcolor='#F0F0F0'><strong> Editeur du logiciel: </strong>".$row['editeur']."</td>"; // affiche l'éditeur du logiciel (la 2eme cellule)
  echo "</td>";
  echo "</tr>\n";
 }
  echo "</table>\n";
    // fin du tableau.
}
else echo "Pas d\'enregistrements dans cette table";

// on libère le résultat
mysql_free_result($result);

//========================================================================    
// si le nombre d'enregistrement à afficher est plus grand que $nombre 
//========================================================================
if($total > $nombre) {

    affichePages($nombre,$page,$total);  // affichage des liens vers les pages

    displayNextPreviousButtons($limite,$total,$nombre,$page);  // affichage des boutons
}
mysql_close();
?>

la page cencée récupérer les infos du lien Editer dans la liste des logiciels:
<?
// On se connecte et on choisi la base de données

mysql_pconnect("localhost","root","") or die ("Impossible de se connecter à MySQL");
mysql_select_db("test") or die("Impossible de sélectionner la base de données");

 if  (!isset($submited)) {
    // On va chercher la fiche complète pour le lien cliqué.
$link = '$link';
    $query_string = "SELECT nom, editeur, comment FROM test WHERE id";
    $query = mysql_query($query_string);
}
?>
    <h1> Fiche Détaillée du logiciel </h1>
    
    <h3 class="vert"><strong> Vous pouvez  modifier une ou des informations ci-dessous </strong></h3>
    <p> </p>
    <center><form METHOD="POST" ACTION="editer-verif.php">
      <p><input TYPE="hidden" name="id" value="<? echo mysql_query($query='id') ?>"></p>
      <p> Nom du logiciel: <input TYPE="text" name="nom" value="<? echo mysql_query($query='nom') ?>" SIZE="50"></p>
      <p> Editeur: <input TYPE="text" name="editeur" VALUE="<? echo mysql_query($query='editeur') ?>" SIZE="50"></p>
      <p>Votre commentaire: <input TYPE="text" name="comment" VALUE="<? echo mysql_query($query='comment') ?>" SIZE="50"></p>
      <p><center><input TYPE="submit" VALUE="mettre à jour"><br><br>
      </center>
      </p>
  </form></center>

0
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
20 févr. 2007 à 18:40
$limite = 0;
if (!$limite); // si limite n'existe pas on l'initialise à zéro

...


Tu remets toujours $limite à 0 en début de page, sans jamais lui donner la valeur passée en paramètre !
0
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 517
20 févr. 2007 à 18:43
???
Traduction ?
Tu sais je débute vraiment Alors.....
;-))

Mais tu es en direct ? c'est super cool ça !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 517
20 févr. 2007 à 18:54
Et au fait !
Comment je dois faire pour récupérer les variables dans la fiche (sous forme de formulaire en fait)
0
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 517
22 févr. 2007 à 11:14
Salut Reivax962,
J'ai montré le script des fonctions a un pote mais qui ne connait pas trop le php. Il me dit que le Pb vient sans doute de $page (voir le premier post en haut de le cette page). Je te le recopie ici:
// ========================================
// fonction qui affiche les liens vers les pages
//========================================
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";
}


Je ne vois pas du tout où est l'erreur (???)

Merci encore pour ton coup de main..............

Le bonheur est la seule chose que l'on peut donner sans l'avoir.
0
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
22 févr. 2007 à 11:31
Désolé de l'absence :)

Donc, j'explique ce que je disais.

Si tu lis ton script comme le ferait un ordinateur.
Essaie de noter la valeur de la variable $limite de bout en bout. N'y vois-tu pas un problème ? Elle est systématiquement placée à 0 en début de script... Donc tu n'auras jamais autre chose que la première page.

Je pense qu'il faudrait remplacer ce
//=========================================
// initialisation des variables 
//=========================================
$nombre = 10;  // on va afficher 10 résultats par page.
$limite = 0;
if (!$limite);  // si limite n'existe pas on l'initialise à zéro
par
//=========================================
// initialisation des variables 
//=========================================
$nombre = 10;  // on va afficher 10 résultats par page.

if (isset($_GET["limite"]))
    $limite = $_GET["limite"];
elseif (isset($_POST["limite"]))
    $limite = $_POST["limite"];
else
    $limite = 0;
Ce qui se traduit par : si la limite a été passée par un lien, on la prend en compte. Sinon, si elle a été passée par le bouton, on la prend en compte. Dans tous les autres cas, elle vaut 0.

Voilà, ça devrait être bon comme ça :)

Xavier
0
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 517
22 févr. 2007 à 18:21
Merciiiiii ! OH ! MERCI !
ça marche NIKEL.

Maintenant je continue, je dois afficher la fiche complèted'un article (logiciel).

Merci pour ta façon de 'lire" le code. Je tacherai de m'en souvenir ou plutot de bien le lire, l'interpreter....
J'en reviens a mon dicton: Quand la syntaxe va, tout va ! ;-)))

Quel BONHEUR ! tu ne peux pas t'imaginer.....
0
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 517
22 févr. 2007 à 14:08
Salut Reivax962,
Ah ! merci je comprends mieux maintenant. Tatraduction surtout m'aide a mieux comprendre le script.
Je le mettrai en commentaire.
A ce soir... ;-)))


Le bonheur est la seule chose que l'on peut donner sans l'avoir.
0