Bonjour, actuellement j'actualise l'envoi d'un formulaire qui me réactualise toute la page, je voudrais qui me réactualise juste une partie de la page, je tiens à préciser que c'est un "chat"
voici le code du formulaire
<form action="chatbox_traitement.php" method="post">
<p> <input class="form" type="text" name="message" id="message" size="80" placeholder="Éditer votre message ici" autofocus autocomplete="off" spellcheck="true"/>
<input type="submit" class="form2" value="Envoyer" /></p></form>

et le code qui traite le formulaire
session_start();

if (empty($_POST['message'] AND strlen(trim($_POST['message'])) > 0 ))
	{
	 header('location: chatbox.php');
	  Exit(); }
else
	{
	require ('require/connet_bdd.php'); //Connexion à la base de données
	// Insertion du message à l'aide d'une requête préparée
	$req = $bdd->prepare('INSERT INTO chat (pseudo, date_post, message) VALUES(?, NOW(), ?)');
	$req->execute(array($_SESSION['pseudo'], $_POST['message']));
	// Redirection du visiteur vers la page du chatbox
	header('Location: chatbox.php');
 Exit();}

Donc il renvoie sur la page en réactualisant toute la page, ce qui peut ralentir la page, je sais qu'on peut juste réactualiser juste une partie de la page en Jquery ou ajax, mais je ne connais pas le code qui pourrait remplacer le
header('Location: chatbox.php')
.
Si vous pouviez m'orienter sur une solution.
Merci.
Jean-Pierre-Bruneau a écrit :
Cela se fait par Ajax couramment, je peux te faire un exemple sur ton problème après tu saura tout seul !

Un exemple oui, je veux bien.
Bonjour,
Jean-Pierre-Bruneau, j'ai regardé ton tuto, très intéressant, le souci c'est que je n'ai pas envie de recommencer tout mon code.
J'ai résolu mon problème + ou - avec le même code d'auto refrech
<script >
        var auto_refresh = setInterval(
        function() {
            $('#mess').load('chatbox.php #mess');
        },3000);
        </script>

voici le code :
<form action="chatbox.php" method="post">
        <p> <input class="form" type="text" name="message" id="message" size="80" placeholder="Éditer votre message ici" autofocus autocomplete="off" spellcheck="true"/>
        <input type="submit" class="form2" value="Envoyer" /></p>
        </form>
 
        <?php
 
        if (isset($_POST['message']) AND (empty($_POST['message'] AND strlen(trim($_POST['message'])) > 0 )))
            {
                echo '<script>
                 $(\'#mess\').load(\'chatbox.php #mess\');
                </script>';
            }
 
        elseif (isset($_POST['message']))  // Insertion du message à l'aide d'une requête préparée
            {
            $req = $bdd->prepare('INSERT INTO chat (pseudo, date_post, message) VALUES(?, NOW(), ?)');
            $req->execute(array($_SESSION['pseudo'], $_POST['message']));
 
            echo '<script>
                $(\'#mess\').load(\'chatbox.php #mess\');
                </script>';
            }
?>
 
        <div id="mess"> <?php
        // Récupération des 18 derniers messages
        $reponse = $bdd->query('SELECT pseudo, message, DATE_FORMAT(date_post, \'%d/%m/%Y à %Hh%i :\') AS date_post FROM chat ORDER BY ID DESC LIMIT 0, 24');
 
        // Affichage de chaque message (toutes les données sont protégées par htmlspecialchars)
        while ($donnees = $reponse->fetch())
        {
            echo '<span class="date">Posté le ' .($donnees['date_post']). '</span> <div class="post"> <h4 class="pseudo">' . htmlspecialchars($donnees['pseudo']) . '</h4> <div class="msg">
            <p>' .texte(htmlspecialchars($donnees['message'])) . '</p> </div> </div>';
        }
 
        $reponse->closeCursor();
 
        ?> </div>
 
        <script >
        var auto_refresh = setInterval(
        function() {
            $('#mess').load('chatbox.php #mess');
        },3000);
        </script>

Cela m'actualise bien juste la partie ID="mess", mais le problème maintenant quand j'actualise avec la touche F5, il me renvoie le $_POST Smiley message en mémoire.
Quelqu'un aurait-il une astuce pour contrer ça ?
Merci.
Modifié par ricem (25 Feb 2020 - 15:02)
Salut JENCAL,

Si j'enregistre le $_POST "message" en session, vu que c'est un "chat" au prochain message il sera déjà enregistré, ça risque pas de poser de problème ??

Jean-Pierre-Bruneau, qu'entends-tu par bloquer ?? peux-tu m'expliquer un peu plus...?

Ps: le $_POST "message", si je mets les crochets à la place des guillemets, cela m'écrit smiley Smiley eek Smiley eek ??

Exemple : $_POST Smiley message
$_POST[message] 
Comme ça c'est mieux ^^
Modifié par ricem (25 Feb 2020 - 15:31)
JENCAL a écrit :
Okk alors j'ai rien compris avec l'histoire de ton POST et ton F5 Smiley smile


Tous fonctionne correctement, le seul souci c'est qu'il garde en mémoire le
$_POST['message']
et qu'il le renvoie quand j'actualise la page via la touche F5 ou la petite flèche ronde. Sinon quand je clique sur le bouton "envoyer" il m'actualise juste le div que je lui demande
id="mess"
, mais vu que si tu ne réactualises pas une page complète avec le fameux protocole HTTP le
$_POST['message']
reste actif en mémoire, apparemment la seule solution est d'actualiser la page via un
header('Location: chatbox.php')
.
Et un truc du genre ?

if(isset($_SESSION['last_post'])){
   // ton code normal... 
   if( $_SESSION['last_post'] != $_POST['message']){
        //ton code normal
    }else{
             $_SESSION['last_post'] = $_POST['message'];
      }
}else{
   $_SESSION['last_post'] = $_POST['message'];
}

en gros hein.. c'est pas otpi là
Salut JENCAL, j'ai essayé d'intégrer ton code dans le mien, mais il me une erreur
Parse error: syntax error, unexpected 'elseif' (T_ELSEIF) in C

voici le code
<?php
		if(isset($_SESSION['last_post'])){

		
		if (isset($_POST['message']) AND (empty($_POST['message'] AND strlen(trim($_POST['message'])) > 0 )))
			{
				echo '<script>
				 $(\'#mess\').load(\'chatbox.php #mess\');
				</script>';
			}

			if($_SESSION['last_post'] != $_POST['message']){
// L'erreur est par ici, du moins il l'indique ici 
		elseif (isset($_POST['message']))  
			{
			$req = $bdd->prepare('INSERT INTO chat (pseudo, date_post, message) VALUES(?, NOW(), ?)');
			$req->execute(array($_SESSION['pseudo'], $_POST['message']));

			echo '<script>
				$(\'#mess\').load(\'chatbox.php #mess\');
				</script>';
			}
			}else{
             $_SESSION['last_post'] = $_POST['message'];
      }
}
else{
   $_SESSION['last_post'] = $_POST['message'];
}
?>


J'ai essayé de trouvé l'erreur tout seul, mais je ne suis pas doué du tout Smiley decu
je viens de voir que mon code n'est pas bon....
car le premier message passeras pas.

Il faut voir avec une autre solution désolé.