Bonjour a tous,

Tout d'abord merci a celles et ceux qui tenteront de m'aider.
Pour faire court, j'essaie depuis plusieurs jours de créer un livre d'or avec moderation et pagination en PHP. Lorsque je test le code juste avec le livre d'or et la modération, tout fonctionne niquel.

Par contre j'ai un soucis avec la pagination, les numéros de page s'affichent bien mais ils ne prennent pas en compte les messages déja écrits. C'est a dire que j'essaie de limiter l'affichage a 5 messages par page, mais il affiche tous les messages sur toutes les pages.

Si quelqu'un pourrait me donner un coup de main ce serait sympa, surtout que je n'y connais rien en php.
Merci beaucoup a ceux qui m'aideront. (Et les commentaires désagréables, merci de les garder, je cherche de l'aide pas autre chose).

Décrivez ici votre code ou ce que vous cherchez à faire

<?php

mysql_connect('d...1.db.1and1.com','d...1','M...');
mysql_select_db('d...1');

$Msg = '';

if( count($_POST) > 0 ){

    if( empty($_POST['Pseudo']) ){

        $Msg = 'Vous devez saisir un pseudo.<br />';
    }

    if( empty($_POST['Message']) )
        $Msg .= 'Vous devez saisir un message';

    if( $Msg == '' ){

        $IsInsert = mysql_query('INSERT INTO messages VALUES ("0","'.mysql_real_escape_string(htmlspecialchars($_POST['Pseudo'],ENT_QUOTES)).'","'.mysql_real_escape_string(htmlspecialchars($_POST['Message'],ENT_QUOTES)).'",CURRENT_TIMESTAMP,0) ') or 0;

        if( $IsInsert != 0 ){

            $Msg = '<p style="color:green;font-weight:bold;">Votre message a bien été sauvegardé, il est en attente de modération.</p>';
        }
        else{

            $Msg = '<p style="color:red;font-weight:bold;">Il y a eu un soucis technique si le problème persiste merci de nous contacter. Veuillez réessayer ans quelque minutes.</p>';

        }
    }
    else{

        $Msg = '<p style="color:red;font-weight:bold;">'.$Msg.'</p>';
    }
}

echo '<h1>Un commentaire ? Un avis ? Une idée ? Une amélioration ? <br><br>Laissez votre message ici !</h1>'.$Msg.'

<p><a href="gestion.php">Modérer les messages</a></p>

<form action="" method="post">

                            <div class="row">

                            <div class="col-lg-6 field">
                                <div class="form-group">
                                    <label for="Pseudo">Votre pseudo :</label>
                                    <input required type="text" name="Pseudo" class="form-control" id="Pseudo" value=""/>
                                </div>
                            </div>

                            <div class="col-lg-12 margintop10 field">
                                <div class="form-group">
                                    <label for="Message">Votre message</label>
                                    <textarea required id="Message" name="Message" class="form-control" cols="60" rows="10"></textarea>
                                </div>
                            </div>

                            <div class="col-lg-12">
                                <button type="submit" name="Send" value="Envoyer mon message" class="btn btn-theme margintop10 pull-left">Envoyer</button>
                             </div><br>
<br>
<br>
<br>
<br>

</form>';

//================
//  Affichage des messages
//================
$LesMessages = mysql_query('SELECT * FROM messages WHERE PublierMessage=1 ORDER BY idMessage DESC');

if( mysql_num_rows($LesMessages) > 0 ){

    while( $UnMessage = mysql_fetch_array($LesMessages) ){

        $Date = date_parse($UnMessage['DateMessage']);

        echo '
        <div class="row">
        <div class="col-lg-12">

        <p>          
            Par <strong>'.$UnMessage['AuteurMessage'].'</strong> Le : <em>'.$Date['day'].'/'.$Date['month'].'/'.$Date['year'].'</em><br />
            '.nl2br($UnMessage['Message']).'
        </p>
        <hr />

        </div>
        </div>

        ';
    }
}

$num_rec_per_page=5;
mysql_connect('d...1.db.1and1.com','d...1','M...');
mysql_select_db('d...1');
if (isset($_GET["page"])) { $page  = $_GET["page"]; } else { $page=1; };
$start_from = ($page-1) * $num_rec_per_page;
$IsInsert = "SELECT * FROM messages LIMIT $start_from, $num_rec_per_page";
$rs_result = mysql_query ($IsInsert); //run the query

$IsInsert = "SELECT * FROM messages";
$rs_result = mysql_query($IsInsert); //run the query
$total_records = mysql_num_rows($rs_result);  //count number of records
$total_pages = ceil($total_records / $num_rec_per_page);

echo "<a href='livredor.php?page=1'>".'|<'."</a> "; // Goto 1st page 

for ($i=1; $i<=$total_pages; $i++) {
            echo "<a href='livredor.php?page=".$i."'>".$i."</a> ";
};
echo "<a href='livredor.php?page=$total_pages'>".'>|'."</a> "; // Goto last page

?>

7 réponses


bebealsace91
Auteur
Réponse acceptée

Pas de soucis ! Merci du coup de main en tout cas.
Bonne soirée

Bonsoir,

Il n'y a pas de LIMIT dans la partie afficher les messages.
Puis plus bas, vous gérer bien les requêtes a fairfe suivaant la page mais vous n'en faite rien.

Vous avez un soucis dans l'ordre des choses.
De plus, il est inutile de mettre des ; après une }
Sans oublier q'un seul mysql_connect et mysql_select_db suffise.

Merci pour la réponse.
J'ai tenté de mettre un LIMIT mais ca me mets toujours une erreur sur cette ligne:
$LesMessages = mysql_query('SELECT * FROM messages WHERE PublierMessage=1 ORDER BY idMessage DESC');

Dans quel ordre je devrais mettre les choses ?

Je vais essayé de me débrouiller même si c'est pas gagné ! Et si je n'y arrive pas je redemanderais sur le forum.
Merci pour la piste

qu'elle est l'erreur ?

J'ai corrigé votre code sans le vérifier à fond mais cela vous donnera la bonne piste à pendre.

<?php //

mysql_connect('d...1.db.1and1.com','d...1','M...');
mysql_select_db('d...1');

$Msg = '';

if( count($_POST) > 0 ){

    if( empty($_POST['Pseudo']) ){

        $Msg = 'Vous devez saisir un pseudo.<br />';
    }

    if( empty($_POST['Message']) )
        $Msg .= 'Vous devez saisir un message';

    if( $Msg == '' ){

        $IsInsert = mysql_query('INSERT INTO messages VALUES ("0","'.mysql_real_escape_string(htmlspecialchars($_POST['Pseudo'],ENT_QUOTES)).'","'.mysql_real_escape_string(htmlspecialchars($_POST['Message'],ENT_QUOTES)).'",CURRENT_TIMESTAMP,0) ') or 0;

        if( $IsInsert != 0 ){

            $Msg = '<p style="color:green;font-weight:bold;">Votre message a bien été sauvegardé, il est en attente de modération.</p>';
        }
        else{

            $Msg = '<p style="color:red;font-weight:bold;">Il y a eu un soucis technique si le problème persiste merci de nous contacter. Veuillez réessayer ans quelque minutes.</p>';

        }
    }
    else{

        $Msg = '<p style="color:red;font-weight:bold;">'.$Msg.'</p>';
    }
}

?>

<h1>Un commentaire ? Un avis ? Une idée ? Une amélioration ? <br><br>Laissez votre message ici !</h1><?= $Msg; ?>

<p><a href="gestion.php">Modérer les messages</a></p>

<form action="" method="post">

    <div class="row">

        <div class="col-lg-6 field">
            <div class="form-group">
                <label for="Pseudo">Votre pseudo :</label>
                <input required type="text" name="Pseudo" class="form-control" id="Pseudo" value=""/>
            </div>
        </div>

        <div class="col-lg-12 margintop10 field">
            <div class="form-group">
                <label for="Message">Votre message</label>
                <textarea required id="Message" name="Message" class="form-control" cols="60" rows="10"></textarea>
            </div>
        </div>

        <div class="col-lg-12">
            <button type="submit" name="Send" value="Envoyer mon message" class="btn btn-theme margintop10 pull-left">Envoyer</button>
         </div><br>
    </div>
<br>
<br>
<br>
<br>

</form>
<?php

//================
//  Affichage des messages
//================

$num_rec_per_page=5;

if (isset($_GET["page"])) { 
    $page = $_GET["page"]; 
} else { 
    $page = 1; 
}
$start_from = ($page-1) * $num_rec_per_page;

$LesMessages = mysql_query('SELECT * FROM messages WHERE PublierMessage=1 ORDER BY idMessage DESC LIMIT '.$start_from.', '.$num_rec_per_page);

if( mysql_num_rows($LesMessages) > 0 ){

    while( $UnMessage = mysql_fetch_array($LesMessages) ){

        $Date = date_parse($UnMessage['DateMessage']);

        echo '
        <div class="row">
        <div class="col-lg-12">

        <p>          
            Par <strong>'.$UnMessage['AuteurMessage'].'</strong> Le : <em>'.$Date['day'].'/'.$Date['month'].'/'.$Date['year'].'</em><br />
            '.nl2br($UnMessage['Message']).'
        </p>
        <hr />

        </div>
        </div>

        ';
    }
}

$IsInsert = "SELECT * FROM messages";
$rs_result = mysql_query($IsInsert); //run the query
$total_records = mysql_num_rows($rs_result);  //count number of records
$total_pages = ceil($total_records / $num_rec_per_page);

echo "<a href='livredor.php?page=1'>".'|<'."</a> "; // Goto 1st page 

for ($i=1; $i<=$total_pages; $i++) {
            echo "<a href='livredor.php?page=".$i."'>".$i."</a> ";
}
echo "<a href='livredor.php?page=$total_pages'>".'>|'."</a> "; // Goto last page

Yes !!! Merci ca fonctionne !
Tout est bien ordonné, par contre il me met une erreur : "Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in line 296", ce la correspond a la ligne:

$LesMessages = mysql_query('SELECT * FROM messages WHERE PublierMessage=1 ORDER BY idMessage DESC LIMIT $start_from, $num_rec_per_page');

Pourtant tout me semble bien écrit, sans faute de frappe.
En tout cas merci pour l'aide. Je suis photographe, je peux peut etre vous remercier en vous offrant un shoot, vous habitez l'ile de france ?

La je ne sais pas pour le warning.
Mais comme cette fonction disparait dans php7, il vous faudra passer à mysqli ou pdo.

Non du tout, je suis pas très loin. Merci pour la proposition.
Plus qu'à mettre le sujet en résolu