PHP

Charger plus de messages

Non Résolu

Salut ça va ?


Alors voici mon problème, je suis dessus depuis maintenant 2 petits jours. Je suis les tutoriels du "site de reconntre" et je suis à l'époside de charger plus de messages (1-2). Mes messages se chargent cependant si je mets mes messages par 2, les derniers (les deux premiers de la conversation donc) ne s'affichent pas mais le bouton disparaît bel et bien... Si vous avez une idée :)


Je vous mets le code de mon message.php ci dessous :


<?php
    session_start();
    
    include_once('db/connexiondb.php'); 
    
    if(!isset($_SESSION['id'])){
        header('Location: /');
        exit;
    }
    
    $get_id = (int) $_GET['id'];


    if($get_id <= 0){
        header('Location: /site1/messagerie.php');
        exit;
    }


    $req = $BDD->prepare("SELECT id
        FROM relation
        WHERE ((id_demandeur, id_receveur) = (:id1, :id2) OR (id_demandeur, id_receveur) = (:id2, :id1)) AND statut = :statut");
    
    $req->execute(array('id1' => $_SESSION['id'], 'id2' => $get_id, 'statut' => 2));
    
    $verifier_relation = $req->fetch();


    if(!isset($verifier_relation['id'])){
        header('Location : /site1/messagerie.php');
        exit;
    }


    // C'est le nombre de message à afficher.
    $nombre_total_message = 2;


    $req = $BDD->prepare("SELECT COUNT(id) as NbMessage
        FROM messagerie 
        WHERE ((id_from, id_to) = (:id1, :id2) OR (id_from, id_to) = (:id2, :id1))");
        
    $req->execute(array('id1' => $_SESSION['id'], 'id2' => $get_id));
        
    $nombre_message = $req->fetch();


    $verifier_nb_message = 0;


    if(($nombre_message['NbMessage'] - $nombre_total_message) > 0){
        $verifier_nb_message = ($nombre_message['NbMessage'] - $nombre_total_message);
    }
    
    $req = $BDD->prepare("SELECT *
        FROM messagerie
        WHERE ((id_from, id_to) = (:id1, :id2) OR (id_from, id_to) = (:id2, :id1))
        ORDER BY date_message 
        LIMIT $verifier_nb_message, $nombre_total_message");
        
    $req->execute(array('id1' => $_SESSION['id'], 'id2' => $get_id));
        
    $afficher_message = $req->fetchAll();


    $req = $BDD->prepare("UPDATE messagerie SET lu = ? WHERE id_to = ? AND id_from = ?");
    
    $req->execute(array(0, $_SESSION['id'], $get_id));


    if(!empty($_POST)){
        extract($_POST);
        $valid = (boolean) true;
        
        if(isset($_POST['envoyer'])){
            $message = (String) trim($message);
            
            if(empty($message)){
                $valid = false;
                $er_message = "Il faut mettre un message";
            }
            
            if($valid){
                
                $date_message = date("Y-m-d h:i:s");
                        
                $req = $BDD->prepare("INSERT INTO messagerie (id_from, id_to, message, date_message, lu) VALUES (?, ?, ?, ?, ?)");
                    
                $req->execute(array($_SESSION['id'], $get_id, $message, $date_message, 1));
            }
            
            header('Location: /site1/message.php?id=' . $get_id);
            exit;
        }
    }
    
?>
<!doctype html>
<html lang="fr">
    <head>
        <!-- Required meta tags -->
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
        
        <!-- Bootstrap CSS -->
        <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">


        <link rel="stylesheet" href="style.css">


        <title>Message</title>
    </head>
    <body>
        
        <?php
            require_once('menu.php');   
        ?>
        
        <div class="container">
            <div class="row">
                <div class="col-sm-12">
                    <div class="corps-des-messages" id="msg">
                        <?php
                            if($nombre_message['NbMessage'] > $nombre_total_message){
                        ?>      
                        <button id="voir-plus" class="btn-voir-plus-message">Voir plus de messages</button> 
                        <?php
                            }
                        ?>
                        <div id="voir-plus-message"></div>
                        <?php
                            foreach($afficher_message as $am){
                                if($am['id_from'] == $_SESSION['id']){
                        ?>
                        <div style="background: #666; color: white;">
                            <?= nl2br($am['message']) ?>
                        </div>
                        <?php
                                }else{
                        ?>
                        <div>
                            <?= nl2br($am['message']) ?>
                        </div>
                        <?php
                                }
                            }   
                        ?>
                        <div id="afficher-message"></div>
                        <div id="charger-message"></div>
                    </div>
                </div>              
                <div class="col-sm-12" style="margin-top: 20px">
                    <?php
                        if(isset($er_message)){
                            echo $er_message;
                        }   
                    ?>
                    <form method="post" id="envoyer">
                        <textarea placeholder="Votre message ..." name="message" id="message"></textarea>
                        <input type="submit" name="envoyer" value="Envoyer"/>
                    </form>
                </div>
            </div>
        </div>


        <!-- Optional JavaScript -->
        <!-- jQuery first, then Popper.js, then Bootstrap JS -->
        <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
        <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
        <script>
            $(document).ready(function(){


                document.getElementById('msg').scrollTop = document.getElementById('msg').scrollHeight;



                $('#envoyer').on("submit", function(e){
                    e.preventDefault();


                    var id;
                    var message;


                    id = <?= json_encode($get_id, JSON_UNESCAPED_UNICODE); ?>;
                    message = document.getElementById('message').value;


                    document.getElementById('message').value = '';


                    if(id > 0 && message != ""){
                        $.ajax({
                            url : 'envoyer-message.php',
                            method : 'POST',
                            dataType :'html',
                            data : {id: id, message: message},


                            success : function(data){
                                $('#afficher-message').append(data);
                                document.getElementById('msg').scrollTop = document.getElementById('msg').scrollHeight;
                            },


                            error : function(e, xhr, s){
                                let error = e.responseJSON;
                                if(e.status == 403 && typeof error !== 'undefined'){
                                    alert('Erreur 403');
                                }else if(e.status == 404){
                                    alert('Erreur 404');
                                }else if(e.status == 401){
                                    alert('Erreur 401');
                                }else{
                                    alert('Erreur Ajax');
                                }
                            }
                        });
                    }   
                });


                var chargement_message_auto = 0;


                chargement_message_auto = clearInterval(chargement_message_auto);


                chargement_message_auto = setInterval(chargerMessageAuto, 2000);


                function chargerMessageAuto(){


                    var id = <?= json_encode($get_id, JSON_UNESCAPED_UNICODE); ?>;


                    if(id > 0){
                        $.ajax({
                            url : 'charger-message.php',
                            method : 'POST',
                            dataType :'html',
                            data : {id: id},


                            success : function(data){
                                if(data.trim() != ""){
                                    $('#charger-message').append(data);
                                    document.getElementById('msg').scrollTop = document.getElementById('msg').scrollHeight;
                                }
                            },


                            error : function(e, xhr, s){
                                let error = e.responseJSON;
                                if(e.status == 403 && typeof error !== 'undefined'){
                                    alert('Erreur 403');
                                }else if(e.status == 404){
                                    alert('Erreur 404');
                                }else if(e.status == 401){
                                    alert('Erreur 401');
                                }else{
                                    alert('Erreur Ajax');
                                }
                            }
                        });
                    }
                }


                <?php
                    if($nombre_message['NbMessage'] > $nombre_total_message){
                ?>


                var req = 0;


                $('#voir-plus').click(function(){
                    var id;


                    req += <?= $nombre_total_message ?>;
                    id = <?= json_encode($get_id, JSON_UNESCAPED_UNICODE); ?>;


                    $.ajax({
                        url : 'voir-plus-message.php',
                        method : 'POST',
                        dataType :'html',
                        data : {limit: req, id: id},


                        success : function(data){
                            $(data).hide().appendTo('#voir-plus-message').fadeIn(2000);
                            document.getElementById('voir-plus-message').removeAttribute('id');
                        },


                        error : function(e, xhr, s){
                            let error = e.responseJSON;
                            if(e.status == 403 && typeof error !== 'undefined'){
                                alert('Erreur 403');
                            }else if(e.status == 404){
                                alert('Erreur 404');
                            }else if(e.status == 401){
                                alert('Erreur 401');
                            }else{
                                alert('Erreur Ajax');
                            }
                        }
                    });
                });


                <?php
                    }
                ?>
            });
        </script>
    </body>
</html>



Et voici le code de mon fichier : voir-plus-message.php ! En espérant que vous ayez assez d'informations pour m'aider. Je sens que c'est une erreur toute bête ^^


<?php
    session_start();
    
    include_once('db/connexiondb.php'); 
    
    if(!isset($_SESSION['id'])){
        exit;
    }


    $limit = (int) trim($_POST['limit']);
    $get_id = (int) trim($_POST['id']);


    if($limit <= 0 || $get_id <= 0){
        exit;
    }


    $req = $BDD->prepare("SELECT id
        FROM relation
        WHERE ((id_demandeur, id_receveur) = (:id1, :id2) OR (id_demandeur, id_receveur) = (:id2, :id1)) AND statut = :statut");
    
    $req->execute(array('id1' => $_SESSION['id'], 'id2' => $get_id, 'statut' => 2));
    
    $verifier_relation = $req->fetch();


    if(!isset($verifier_relation['id'])){
        exit;
    }


    // C'est le nombre de message à afficher.
    $nombre_total_message = 2;
    $limit_mini = 0;
    $limit_maxi = 0;


    $req = $BDD->prepare("SELECT COUNT(id) as NbMessage
        FROM messagerie 
        WHERE ((id_from, id_to) = (:id1, :id2) OR (id_from, id_to) = (:id2, :id1))");
        
    $req->execute(array('id1' => $_SESSION['id'], 'id2' => $get_id));
        
    $nombre_message = $req->fetch();


    $limit_mini = $nombre_message['NbMessage'] - $limit;


    if($limit_mini > $nombre_total_message){
        $limit_maxi = $nombre_total_message;
        $limit_mini = $limit_mini - $nombre_total_message;
    }else{
        if($limit_mini > 0){
            $limimt_maxi = $limit_mini;
        }else{
            $limit_maxi = 0;
        }


        $limit_mini = 0;
    }
    
    $req = $BDD->prepare("SELECT *
        FROM messagerie
        WHERE ((id_from, id_to) = (:id1, :id2) OR (id_from, id_to) = (:id2, :id1))
        ORDER BY date_message 
        LIMIT $limit_mini, $limit_maxi");
        
    $req->execute(array('id1' => $_SESSION['id'], 'id2' => $get_id));
        
    $afficher_message = $req->fetchAll();


    if($limit_mini <= 0){
?>
<div>
    <script>
     var el = document.getElementById('voir-plus');
     el.classList.add('btn-masquer-voir-plus-message');
    </script>
</div>
<?php
    } 
?>
<div id="voir-plus-message"></div>
<?php
    foreach($afficher_message as $am){
        if($am['id_from'] == $_SESSION['id']){
?>
    <div style="background: #666; color: white;">
        <?= nl2br($am['message']) ?>
    </div>
<?php
    }else{
?>
    <div>
        <?= nl2br($am['message']) ?>
    </div>
<?php
    }
}   
?>



Merci et bonne journée

353 vues
06 février 2022 à 13:50
Cette pub permet au site de vivre ...

Commentaire

Cette pub permet au site de vivre ...