PHP|Débutant :: Forums

Advertisement

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

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

#1 Re : Forum Général PHP » Re-direction vers une page et ré-actualisation de cette page » 08-12-2017 09:54:53

Salut Pierrot

la méthodologie ?
je début en programmation et en PHP depuis quelques semaines... je viens de valider le cours PHP d'Openclassroom et mon "appli" me sert juste de mise en pratique
peux-tu me dire ce qui ne va pas sur la méthodologie ?

#2 Re : Forum Général PHP » Re-direction vers une page et ré-actualisation de cette page » 08-12-2017 09:54:53

Bonjour tof73 et merci pour ta réponse
j'ai testé et malheureusement çà ne change rien
mon algo doit être à revoir...
bonne journée

#3 Forum Général PHP » Re-direction vers une page et ré-actualisation de cette page » 08-12-2017 09:54:53

LE CARROU
Réponses : 4

Bonjour,

mon titre n’est pas très clair mais je vais essayer d’expliquer mon problème qui est un problème d’algo je pense, mais j'arrive pas à en sortir

je lance un formulaire depuis une page data_recherche1.php vers une page data_recherche2.php; cela va créer une table gbd_dat_tmp1 que je compare à une autre table gbd_dat et en fonction de la comparaison, j’insère ou j’update ma table gbd_dat et à la fin je re-dirige vers data_recherche1.php à l’aide de header()

mon problème est que, si je click à nouveau pour lancer mon formulaire et mettre à jour mes données (après correction des données ou ajout de nouveau manquants par exemple), je n’ai pas le résultat attendu car visiblement le script de la page data_recherche1.php n’est pas ré-exécuté après la re-direction: en clair, il n’y a pas eu de nouvelle recherche de manquants

il faut que j’actualise ma page data_recherche1.php manuellement (Ctrl+R) avant de lancer mon formulaire pour que j’obtienne le résultat que je souhaite

j’ai lu la doc PHP sur header() mais n’y comprends pas plus que çà et j’ai tenté un META refresh mais çà ne fonctionne pas

faut-il revoir mon algo?
d’avance merci pour votre aide

data_recherche1.php

<?php
// On démarre la session AVANT d'écrire du code HTML
session_start();

?>

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <link rel="stylesheet" href="style.css" />
        <title>Mereva</title>
    </head>

    <body>
        <!-- En-tête -->
        <header>
            <?php include("entete.php"); ?>
        </header>

        <!-- Le corps -->
        <div id="corps">
                   
        <?php include("menus.php"); ?>

        <!--Tableau avec le contenu de la table GBD_DAT-->
        <div id='contenu'>
          <!--<div id="tableau">-->

        <!--Connexion à la base de données-->
        <?php include("connexion_base.php"); ?>

        <?php
        $sql = 'SELECT Max(ddc_dat) as DAT FROM `gbd_dat` WHERE exi in (1,2)';
        $query = ($sql);
              $query = $bdd->prepare($query);
              $query->execute();
              foreach($query as $row)
                  {
                      $date_der = $row['DAT']; //à calculer par la requête
                  }
                $query->CloseCursor();
        $sql = 'SELECT Count(id) as NBR1 FROM `gbd_dat` WHERE exi in (2)';
        $query = ($sql);
              $query = $bdd->prepare($query);
              $query->execute();
              foreach($query as $row)
                  {
                      $nb1 = $row['NBR1']; //à calculer par la requête
                  }
                $query->CloseCursor();
        $sql = 'SELECT Count(id) as NBR2 FROM `gbd_dat` WHERE exi in (1)';
        $query = ($sql);
              $query = $bdd->prepare($query);
              $query->execute();
              foreach($query as $row)
                  {
                      $nb2 = $row['NBR2']; //à calculer par la requête
                  }
          echo'<table>';
          echo'<tr>';
                echo'<td class="col1">Date de dernière édition</td>';
                ?>
                <td class="col2"><?php echo $date_der ?></td>
                <?php
            echo'</tr>';
            echo'<tr>';
              echo'<td class="col1">Nombre de demande de corrections</td>';
                echo'<td class="col2"></td>';
            echo'</tr>';
            echo'<tr>';
              echo'<td class="col3">Données (en cours)</td>';?>
                <td class="col2"><?php echo $nb1 ?></td>
            <?php
            echo'</tr>';
            echo'<tr>';
              echo'<td class="col3">Données (nouvelles)</td>';?>
                <td class="col2"><?php echo $nb2 ?></td>
            <?php
            echo'</tr>';
          echo'</table>';
        $query->CloseCursor();
                ?>


        <form id="update" name="update" action="data_recherche2.php" method="POST">
        <?php
        //incrémentation des requêtes manquant/aberrant
        $i = 0;
                   
        //act = permet d'activer une variable pour la recherche de manquants/aberrant dans la table ADM_DAT
        $sql =  'SELECT tbl, fic, var, que, lib, cri, des FROM ADM_DAT WHERE act=1 ORDER BY tbl';
        foreach($bdd->query($sql) as $row)
          {
            //var_dump($row);
            $table = $row['tbl'];
            $critere = $row['cri'];
            $fiche = $row['fic'];
            $variable = $row['var'];
            $question = $row['que'];
            $libelle = $row['lib'];
            $description = $row['des'];
                     
            //requete 2 : recherche de donnees manquantes dans les tables étude
            $sql = 'SELECT PAT, ' . $variable . ' FROM '  . $table . ' WHERE ' . $variable . ' ' . $critere . '';
            //var_dump($sql); //vérification de la requête SQL (détection d'erreur d'écriture)
            $query = ($sql);
            //On prépare la requête à son exécution. Les marqueurs seront identifiés*/
            $query = $bdd->prepare($query);
            $result = $query->execute();

            //envoie des donnees à insérer dans la table gbd_dat_tmp1, table intermédiaire de stockage des DDC*/
            while($element= $query -> fetch())
              {
                ?>
                <input type="hidden" name="lignes[<?php echo $i; ?>][0]" value="<?php echo $i+1 ;?>">          <!--numérotation des DDC-->
                <input type="hidden" name="lignes[<?php echo $i; ?>][1]" value="<?php echo $element[0] ;?>">   <!--numéro patient = 1er champs de la requête sql-->
                <input type="hidden" name="lignes[<?php echo $i; ?>][det]" value="<?php echo $element[1] ;?>"> <!--$variable = 2ème champs de la requête sql-->
                <input type="hidden" name="lignes[<?php echo $i; ?>][fic]" value="<?php echo $fiche ;?>">
                <input type="hidden" name="lignes[<?php echo $i; ?>][var]" value="<?php echo $variable ;?>">
                <input type="hidden" name="lignes[<?php echo $i; ?>][que]" value="<?php echo $question ;?>">
                <input type="hidden" name="lignes[<?php echo $i; ?>][lib]" value="<?php echo $libelle ;?>">
                <input type="hidden" name="lignes[<?php echo $i; ?>][des]" value="<?php echo $description ;?>">
                 
                <?php
                $i=$i+1;
              }
          }

          ?>

          <table>
              <td class="col1"></td>
              <td class="col3"><input class="modifier" type="submit" value="Mettre à jour"></td>
          </table>
          </form>
          <?php $query->CloseCursor();?>

    <!--fin du bloc contenu-->
    </div>

    <!--fin du bloc corps-->
    </div>

        <!-- Le pied de page -->
        <footer>
        <?php include("pied_de_page.php"); ?>
        </footer>

    <script>
    </script>
    </body>

</html>

data_recherche2.php


<?php
//connection au serveur
try
{
// On se connecte à MySQL
$bdd = new PDO('mysql:host=localhost;dbname=dms;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
}
catch(Exception $e)
{
// En cas d'erreur, on affiche un message et on arrête tout
die('Erreur : '.$e->getMessage());
}

//var_dump($_POST['lignes']);
//préparation de la requête
$requete = "INSERT INTO gbd_dat_tmp1 (pat, fic, var, que, lib, des, det) VALUES (:patient, :fiche, :variable, :question, :libelle, :description, :details)" ;

/* On prépare la requête à son exécution. Les marqueurs seront identifiés */
$result = $bdd->prepare($requete);

$result->bindParam('patient',$patient,PDO::PARAM_STR);
$result->bindParam('fiche',$fiche,PDO::PARAM_STR);
$result->bindParam('variable',$variable,PDO::PARAM_STR);
$result->bindParam('question',$question,PDO::PARAM_STR);
$result->bindParam('libelle',$libelle,PDO::PARAM_STR);
$result->bindParam('description',$description,PDO::PARAM_STR);
$result->bindParam('details',$details,PDO::PARAM_STR);

foreach($_POST['lignes'] as $key => $donneesLigne)
{
$patient=$donneesLigne[1];
$fiche=$donneesLigne['fic'];
$variable=$donneesLigne['var'];
$question=$donneesLigne['que'];
$libelle=$donneesLigne['lib'];
$description=$donneesLigne['des'];
$details=$donneesLigne['det'];


$result->execute();

}

  //MISE A JOUR DE LA TABLE GBD_DAT
    //requete 1 : requêtes toujours existantes    
    $bdd->exec('UPDATE gbd_dat SET exi=2 WHERE EXISTS (SELECT 1 FROM gbd_dat_tmp1 WHERE
      gbd_dat.pat=gbd_dat_tmp1.pat AND
      gbd_dat.fic=gbd_dat_tmp1.fic AND
      (gbd_dat.var=gbd_dat_tmp1.var OR IsNull(gbd_dat.var) OR IsNull(gbd_dat_tmp1.var)) AND
      (gbd_dat.lib=gbd_dat_tmp1.lib OR IsNull(gbd_dat.lib) OR IsNull(gbd_dat_tmp1.lib)) AND
      gbd_dat.que=gbd_dat_tmp1.que AND
      (gbd_dat.det=gbd_dat_tmp1.det OR IsNull(gbd_dat.det) OR IsNull(gbd_dat_tmp1.det))
      )');
    //requete 2 : requêtes qui n'existent plus
    $bdd->exec('UPDATE gbd_dat SET exi=0 WHERE NOT EXISTS (SELECT 1 FROM gbd_dat_tmp1 WHERE
      gbd_dat.pat=gbd_dat_tmp1.pat AND
      gbd_dat.fic=gbd_dat_tmp1.fic AND
      (gbd_dat.var=gbd_dat_tmp1.var OR IsNull(gbd_dat.var) OR IsNull(gbd_dat_tmp1.var)) AND
      (gbd_dat.lib=gbd_dat_tmp1.lib OR IsNull(gbd_dat.lib) OR IsNull(gbd_dat_tmp1.lib)) AND
      gbd_dat.que=gbd_dat_tmp1.que AND
      (gbd_dat.det=gbd_dat_tmp1.det OR IsNull(gbd_dat.det) OR IsNull(gbd_dat_tmp1.det))
      )');
    //requete 3 : nouvelles requêtes
    //ddc_dat correspond à la date à laquelle la DDC a été générée
    $bdd->exec('INSERT INTO gbd_dat (pat, fic, var, lib, que, des, det, exi, ddc_dat)
      SELECT pat, fic, var, lib, que, des, det, 1 AS exi, NOW() as ddc_dat
      FROM gbd_dat_tmp1
      WHERE NOT EXISTS (
      SELECT 1 FROM gbd_dat WHERE
      gbd_dat.pat=gbd_dat_tmp1.pat AND
      gbd_dat.fic=gbd_dat_tmp1.fic AND
      (gbd_dat.var=gbd_dat_tmp1.var OR IsNull(gbd_dat.var) OR IsNull(gbd_dat_tmp1.var)) AND
      (gbd_dat.lib=gbd_dat_tmp1.lib OR IsNull(gbd_dat.lib) OR IsNull(gbd_dat_tmp1.lib)) AND
      gbd_dat.que=gbd_dat_tmp1.que AND
      (gbd_dat.det=gbd_dat_tmp1.det OR IsNull(gbd_dat.det) OR IsNull(gbd_dat_tmp1.det))
      )
      ');

  //ON VIDE LA TABLE GBD_DAT_TMP1
    //$bdd->exec('TRUNCATE TABLE gbd_dat_tmp1');
 
//affichage des résultats, pour savoir si la modification a marchée:
if($result)
{
        header ('location:data_recherche1.php');
        //header ('Refresh: 0;URL=data_recherche1.php');
        //echo '<meta http-equiv="refresh" content="0;URL=data_recherche1.php">';
        //echo("La modification à été correctement effectuée") ;
}
else
{
    echo("La modification à échouée") ;
}
?>
 

#5 MySQL, PostgreSQL, etc... » Saisie/modification de données dans base MySQL avec formulaire » 10-11-2017 18:58:35

LE CARROU
Réponses : 2

Bonjour,

Je bloque depuis quelques jours sur la conception d'un formulaire de saisie/modification de données dans ma base MySQL.

J’ai développé une 1ère page demande_de_corrections_page.php qui m’affiche le contenu de ma table gbd_dat sur laquelle l’utilisateur peut naviguer de page en page

Lorsque que l'utilisateur clique sur un filtre en bas du tableau, une autre page demande_de_corrections_page_filtres.php s'affiche et permet à l’utilisateur de filtrer et de toujours naviguer page par page.

Maintenant, j’aimerais que l’utilisateur puisse modifier les données du tableau dans la table. Je pense donc qu’il faut une nouvelle page demande_de_corrections_page_insert.php sur laquelle une partie des données du tableau seront simplement de l’affichage et l’autre partie de la saisie (cf capture ci-dessous). Et surtout, je veux que l’utilisateur puisse saisir et valider une page entière (et pas variable par variable).

Je sais insérer des données en base (INSERT INTO ou UPDATE) mais je ne trouve pas l’ago qui me permette de faire ce que je décrit dans mon dernier point.

Je suis plus familier du VBA avec lequel j’utilise des recordsets (à partir de requêtes SQL) et la méthode MoveNext qui me permet de parcourir mon recordset et d’insérer à chaque boucle. Je pense que mon algo devrait ressembler à çà (mais j'en suis pas sûr) mais je n’y arrive pas en PHP. J’ai lu quelque article sur une méthode MoveNext en PHP donc je vais regarder de ce côté ce matin.

Je suis assez surpris qu’il n’y ait pas plus d’exemples et de tuto sur les formulaires de modifications php car c’est une action assez courante dans une application… ce qui me fait penser que je n’envisage peut-être pas la bonne solution… j’ai bien lu les tuto sur OC concernant les mini-chat, les forums etc.. mais çà ne correspond pas exactement à ce que je veux faire…

merci d’avance pour votre aide

Projet DMS

#6 Re : MySQL, PostgreSQL, etc... » Affichage page par page » 10-11-2017 09:34:32

Bonjour,

avec beaucoup de retard, je post pcq j'ai trouvé une solution depuis (cf code ci-dessous) avec l'auteur du tuto qui m'a servi (Ymox sur Zeste de savoir).
merci à tof73 pour son aide


<?php
// On démarre la session AVANT d'écrire du code HTML
session_start();

?>


<!DOCTYPE html>

<html>

    <head>

        <meta charset="utf-8" />
        <link rel="stylesheet" href="style.css" />
        <title>Mereva</title>

    </head>

    <body>
       
        <!--début du bloc page-->
        <div id="page">

            <!-- En-tête -->
            <div class="element_page">
                <?php include("entete.php"); ?>
            </div>

            <!-- Le corps -->
            <div class="element_page">
                <div id="corps">
                   
                    <?php include("menus.php"); ?>
                    <!--Tableau avec le contenu de la table GBD_DAT-->
                               
                    <div id='element_tableau'>
                      <div id="tableau">

              <?php

              //*******************************************************************
              //affichage page par page tutoriel Ymox sur le site Zeste de Savoir
              //https://zestedesavoir.com/tutoriels/351/paginer-avec-php-et-mysql/

              //*******************************************************************
             

              //*Connexion à la base de données
                        //*OpenCLassroom "Concevez votre site web avec php et MySql"  
                        try
              {
              // On se connecte à MySQL
              $bdd = new PDO('mysql:host=localhost;dbname=dms;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
              }
              catch(Exception $e)
              {
              // En cas d'erreur, on affiche un message et on arrête tout
              die('Erreur : '.$e->getMessage());
              }

              $limite = 15;
              $page = (!empty($_GET['page']) ? $_GET['page'] : 1);
              $debut = ($page - 1) * $limite;


              // Partie "Requête"
              /* On calcule donc le numéro du premier enregistrement ; SQL_CALC_FOUND_ROWS compte le nombre d'enregistrements*/
              /*sans tenir compte du critère limit*/
              $sql = 'SELECT SQL_CALC_FOUND_ROWS * FROM `gbd_dat` LIMIT :limite OFFSET :debut';
              $query = ($sql);
              /* On prépare la requête à son exécution. Les marqueurs seront identifiés */
              $query = $bdd->prepare($query);
              /* On lie ici une valeur à la requête, soit remplacer de manière sûre un marqueur par sa valeur, nécessaire pour que la requête fonctionne. */
              $query->bindValue(
              'limite',         // Le marqueur est nommé « limite »
              $limite,         // Il doit prendre la valeur de la variable $limite
              PDO::PARAM_INT   // Cette valeur est de type entier
              );
              $query->bindValue(
              'debut',         // Le marqueur est nommé « début »
              $debut,         // Il doit prendre la valeur de la variable $debut
              PDO::PARAM_INT   // Cette valeur est de type entier
              );

              /* Maintenant qu'on a lié la valeur à la requête, on peut l'exécuter pour en récupérer le résultat */
              $resultSet = $query->execute();

              /* Ici on récupère le nombre d'éléments total. Comme c'est une requête, il ne
              * faut pas oublier qu'on ne récupère pas directement le nombre.
              * De plus, comme la requête ne contient aucune donnée client pour fonctionner,
              * on peut l'exécuter ainsi directement */
              $resultFoundRows = $bdd->query('SELECT found_rows()');
              /* On doit extraire le nombre du jeu de résultat */
              $nombredElementsTotal = $resultFoundRows->fetchColumn();

              // début du tableau
              echo '<table>'."\n";
              // première ligne on affiche les titres prénom et surnom dans 2 colonnes
              echo '<tr class="class01">';
              echo '<td class="ID">#ID</td>';
              echo '<td class="Patient">Patient</td>';
              echo '<td class="Fiche">Fiche</td>';
              echo '<td class="Question">Question</td>';
              echo '<td class="Description">Description</td>';
              echo '<td class="Details">Details</td>';
              echo '<td class="Correction">Corrections</td>';
              echo '<td class="NR">NR</td>';
              echo '<td class="Commentaires">Commentaires</td>';
              echo '</tr>'."\n";

              // Partie "Boucle"
              // lecture et affichage des résultats sur 2 colonnes, 1 résultat par ligne.    
              while($element= $query -> fetch()) {
              echo '<tr class="class02">';
              echo '<td class="ID">'.$element['id'].'</td>';
              echo '<td class="Patient">'.$element['pat'].'</td>';
              echo '<td class="Fiche">'.$element['fic'].'</td>';
              echo '<td class="Question">'.$element['que'].'</td>';
              echo '<td class="Description">'.$element['des'].'</td>';
              echo '<td class="Details">'.$element['det'].'</td>';
              echo '<td class="Correction">'.$element['cor'].'</td>';
              echo '<td class="NR">'.$element['non_rec'].'</td>';
              echo '<td class="Commentaires">'.$element['com'].'</td>';
              echo '</tr>'."\n";
              }
              echo '</table>'."\n";
              // fin du tableau.

              // on libère le résultat
              //unset($resultSet);
             
              ?>

            <!--fin du bloc tableau-->  
            </div>
                         
                      <?php
                      $query->closeCursor();
                      ?>

                    <!--fin du bloc element_tableau-->
                    </div>

                <!--fin du bloc corps-->
                </div>

            <!--fin du bloc element_page correspondant au CORPS-->
            </div>

            <div class="element_page">
              <!--// Partie "Filtres"-->
        <div id='filtres'>
            <form action="demande_de_corrections_page_filtres.php" method="get">
                    <select onselect="this.form.submit()" name="patient" id="patient">
                    <?php
                    $sql="SELECT DISTINCT pat, fic FROM gbd_dat ORDER BY pat";
                    $result = $bdd->query($sql);
                    while ($donnees = $result->fetch(PDO::FETCH_ASSOC))
                    {
                    ?>
                    <option value="<?php echo $donnees['pat'];?>"><?php echo $donnees['pat'];?></option>
                    <?php
                    }
                    ?>
                    </select>
                    <select onselect="this.form.submit()" name="fiche" id="fiche">
                    <?php
                    $sql="SELECT DISTINCT pat, fic FROM gbd_dat ORDER BY pat";
                    $result = $bdd->query($sql);
                    while ($donnees = $result->fetch(PDO::FETCH_ASSOC))
                    {
                    ?>
                    <option value="<?php echo $donnees['fic'];?>"><?php echo $donnees['fic'];?></option>
                    <?php
                    }
                    ?>
                    </select>
            <input type="submit" value="Valider" />                            
              </form>
          </div>

           <!--// Partie "Liens"-->
         
        <div id='liens'>

            <?php
          /* On calcule le nombre de pages */
          $nombreDePages = ceil($nombredElementsTotal / $limite);

          /* Si on est sur la première page, on n'a pas besoin d'afficher de lien
          * vers la précédente. On va donc l'afficher que si on est sur une autre
          * page que la première */
          if ($page > 1):
          ?><a href="?page=<?php echo $page - 1; ?>">Précédente</a> - <?php
          endif;

          /* On va effectuer une boucle autant de fois que l'on a de pages */
          for ($i = 1; $i <= $nombreDePages; $i++):
          ?><a href="?page=<?php echo $i; ?>"><?php echo $i; ?></a> <?php
          endfor;

          /* Avec le nombre total de pages, on peut aussi masquer le lien
          * vers la page suivante quand on est sur la dernière */
          if ($page < $nombreDePages):
          ?>- <a href="?page=<?php echo $page + 1; ?>">Suivante</a><?php
          endif;
          ?>        
            </div>
        </div>

            <!-- Le pied de page -->
            <div class="element_page">
            <div id="pied_de_page"/>
            <?php include("pied_de_page.php"); ?>
            </div>
            </div>

        <!--fin du bloc page-->
        </div>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    <!-- jQuery est inclus ! -->
   <script>

        jQuery(document).ready(function(){
        // Du code en jQuery va pouvoir être tapé ici !
        console.log("jQuery est prêt !");
    });


   

   </script>
    </body>

</html>

#7 Re : MySQL, PostgreSQL, etc... » Affichage page par page » 10-11-2017 09:34:32

Bonjour et merci pour ta réponse.

En trainant sur les forums, j'ai trouvé nue solution apportée par Bouchon et qui confirme ce que tu dis.
La correction proposée (cf ci-dessous) est presque fonctionnelle sauf lorsque l'on arrive sur la première page ou j’obtiens le message d'erreur :

Notice: Undefined index: limite in C:\wamp64\www\tests\affichage_pages.php on line 25

ensuite, tout fonctionne normalement.
après quelque lecture sur les forums, j'ai essayé de remplacer :
$limite = trim($_REQUEST['limite']);
par
if (isset($_REQUEST['limite']))
{
    $limite = trim($_REQUEST['limite']);
}

mais çà ne change rien

une idée ?

*******************************************
correction par Bouchon
remplacer :
if (!isset($limite)) $limite = 0; //si premier acces a la page

par :
// On récupère l'argument "limite"
$limite = trim($_REQUEST['limite']);
   
// On vérifie qu'il s'agit bien d'un entier
if(ctype_digit($limite)==FALSE)
{
// Il ne s'agit pas d'un entier, ou il n'y a tout simplement pas de valeur
// ==> On utilise une valeur par défaut
$limite = 0;
}

#8 MySQL, PostgreSQL, etc... » Affichage page par page » 10-11-2017 09:34:32

LE CARROU
Réponses : 3

Bonjour

je débute en programmation et encore plus en PHP/MySQL.
je suis tombé sur le Tutoriel écrit par Flyingcow qui correspond à ce que je veux faire.
Le tutoriel date un peu et je l'ai adapté pour prendre en compte le PDO.
Malgré les explications pas à pas de Flyingcow, je n'obtient pas le résultat voulu (premier code sans les fonctions).

Je comprend globalement le code et le code ne plante (c'est déjà çà).
Mais il affiche constamment la première page avec les 5 premiers enregistrements.
Pourtant, dans la barre URL, je passe bien de http://localhost/tests/affichage_pages.php à http://localhost/tests/affichage_pages.php?limite=5.
Cependant, les valeurs des différentes variables ne changent pas :
$limite=5
$limitesuivante=5
$limiteprecedente=-5

J'ai essayé de lire le second code mais j'ai un peu de mal pour le moment avec les fonctions et surtout, j'aimerais comprendre le premier code avant d'attaquer le deuxième.

Si quelqu'un peut m'aider à comprendre ce code ce serait super !

Alors voici mon code modifié en PDO :


<html>
<body>
<?php
// information pour la connection à le DB
//$host = 'localhost';
//$user = 'root';
//$pass = '';
//$db = 'test';

// initialisation des variables
$nombre = 5;  // on va afficher 5 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'];

echo 'nombre par page : ' . $nombre . '</br>';
echo 'limite : ' . $limite . '</br>';

// connection à la DB
//$link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
//mysql_select_db($db) or die ('Erreur :'.mysql_error());

try
{
// On se connecte à MySQL
$bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
}
catch(Exception $e)
{
// En cas d'erreur, on affiche un message et on arrête tout
die('Erreur : '.$e->getMessage());
}

// compte le nombre d'enregistrement total de la table
$select = 'SELECT count(id) FROM vaches';
//$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
$result = $bdd->query($select);
$row = $result -> fetch();
$total = $row[0];

// requête SQL qui ne prend que le nombre d'enregistrements nécessaire à l'affichage.
$select = 'select prenom,surnom FROM vaches ORDER BY prenom ASC limit '.$limite.','.$nombre;
$result = $bdd->query($select);


// calcul des limites précédent/suivant
$limitesuivante = $limite + $nombre;
$limiteprecedente = $limite - $nombre;

echo 'limite : ' . $limitesuivante . '</br>';
echo 'limite : ' . $limiteprecedente . '</br>';

// affichage du lien précédent si besoin
if($limite != 0) {
echo '<a href="'.$page.'?limite='.$limiteprecedente.'">Page précédente</a>';
}


// affichage du lien suivant si besoin
if($limitesuivante < $total) {
    echo '<a href="'.$page.'?limite='.$limitesuivante.'">Page Suivante</a>';
}

// si on a récupéré un résultat on l'affiche.
if($total) {
    // début du tableau
    echo '<table bgcolor="#FFFFFF">'."\n";
        // première ligne on affiche les titres prénom et surnom dans 2 colonnes
        echo '<tr>';
        echo '<td bgcolor="#669999"><b><u>Prénom</u></b></td>';
        echo '<td bgcolor="#669999"><b><u>Surnom</u></b></td>';
        echo '</tr>'."\n";
    // lecture et affichage des résultats sur 2 colonnes, 1 résultat par ligne.    
    while($row = $result -> fetch()) {
        echo '<tr>';
        echo '<td bgcolor="#CCCCCC">'.$row['prenom'].'</td>';
        echo '<td bgcolor="#CCCCCC">'.$row['surnom'].'</td>';
        echo '</tr>'."\n";
    }
    echo '</table>'."\n";
    // fin du tableau.
}
else echo 'Pas d\'enregistrements dans cette table...';

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

?>
</body>
</html>
 

Pied de page des forums

Propulsé par FluxBB