J'essaye de traiter un formulaire. S'il y a une erreur, l'utilisateur sera redirigé vers le formulaire, où les erreurs seront affichées et tout ce que l'utilisateur essayait de soumettre sera renvoyé à la zone de texte du formulaire. De cette façon, l'utilisateur n'aura plus à tout réécrire. Tout fonctionne bien sauf que la variable de session ne fait pas écho dans l'éditeur tinymce après la redirection de l'utilisateur. La variable de session est définie et a la valeur correcte. Si je fais écho aux variables de session en dehors de Tinymce, cela apparaît comme prévu. Il n'apparaîtra tout simplement pas dans la zone de texte. Comment puis-je réparer ça?
De plus, je sais que cela est sensible à xss. Je veux permettre aux utilisateurs de mettre en forme leur message, donc je l'exécuterai plus tard via HTML Purifier.
addnewthread.php:
<!DOCTYPE html> <html> <?php session_start(); ?> <head> <!-- title, meta, stylesheet, etc. --> <script type="text/javascript" src="jquery.js"></script> <script src="https://cdn.tiny.cloud/1/no-api-key/tinymce/5/tinymce.min.js" referrerpolicy="origin"></script> <script>tinymce.init({selector:"#threadCont", height: 300, resize: false });</script> </head> <body> <?php if($_GET['submit']==="error") { if((isset($_SESSION['forum_titErr'])&&!empty($_SESSION['forum_titErr']))|| (isset($_SESSION['forum_thrContErr'])&&!empty($_SESSION['forum_thrContErr']))) { echo $_SESSION['forum_titErr']; echo $_SESSION['forum_thrContErr']; session_unset($_SESSION['forum_titErr']); session_unset($_SESSION['forum_thrContErr']); } } ?> <form action='addnewthread.php' method='post'> <input type='text' name='thread-title' id='thread-title' placeholder='Type title here' class='user-input' <?php if(isset($_SESSION['threadTitle'])&!empty($_SESSION['threadTitle']) { echo "value='{$_SESSION['threadTitle']}'"; } ?> > <textarea id='threadCont' name='threadCont'> <?php if(isset($_SESSION['threadCont'])&!empty($_SESSION['threadCont']) { echo $_SESSION['threadCont']; } ?> </textarea> <button id='submit' type='submit' name='submit'value='success'>Submit</button> </form> </body> </html>
formulaire html:
<?php session_start(); if($_SERVER['REQUEST_METHOD']==='POST') { if(isset($_POST['submit'])&&$_POST['submit']==='success') { if (empty(trim($_POST['thread-title']))) { $_SESSION['forum_titErr'] = "<p class='error text-center'>Error message</p>"; } else { $_SESSION['threadTitle'] = $_POST['thread-title']; } if (empty(trim($_POST['thread-content']))) { $_SESSION['forum_thrContErr'] = "<p class='error text-center'>Error message </p>"; } else { $_SESSION['threadCont'] = $_POST['thread-content']; } if((isset($_SESSION['forum_titErr'])&&!empty($_SESSION['forum_titErr']))|| (isset($_SESSION['forum_thrContErr'])&&!empty($_SESSION['forum_thrContErr']))) { header("Location: newthread.php?submit=error"); } else { //insert into database and redirect to readtopic.php if insert is successful; else redirect to form and show insert is not successful } } else{ header("Location: newthread.php"); } } else { exit('invalid request'); } ?>
3 Réponses :
Je pense que vous devez le faire comme ceci
<form action='addnewthread.php' method='post'> <input type='text' name='thread-title' id='thread-title' placeholder='Type title here' class='user-input' <?php if(isset($_SESSION['threadTitle']) && !empty($_SESSION['threadTitle'])) { echo "value='{$_SESSION['threadTitle']}'"; } ?> > <textarea id='threadCont' name='threadCont'> <?php if(isset($_SESSION['threadCont']) && !empty($_SESSION['threadCont'])) { echo $_SESSION['threadCont']; } ?> </textarea> <button id='submit' type='submit' name='submit'value='success'>Submit</button> </form>
Faites simplement écho à la variable, prenez simplement soin de "
et '
à cause de la concaténation de chaînes.
Pour l'entrée:
<textarea id='threadCont' name='threadCont'> <?php if(isset($_SESSION['threadCont'])&!empty($_SESSION['threadCont']) { echo $_SESSION['threadTitle']; } ?> </textarea>
J'ai vérifié votre code et j'ai constaté que vous aviez oublié d'ajouter des crochets:
<form action='addnewthread.php' method='post'> <input type='text' name='thread-title' id='thread-title' placeholder='Type title here' class='user-input' <?php if(isset($_SESSION['threadTitle'])&&!empty($_SESSION['threadTitle']) <--here { echo "value='{$_SESSION['threadTitle']}'"; } ?> > <textarea id='threadCont' name='threadCont'> <?php if(isset($_SESSION['threadCont'])&&!empty($_SESSION['threadCont']) <--and here { echo $_SESSION['threadCont']; } ?> </textarea> <button id='submit' type='submit' name='submit'value='success'>Submit</button> </form>
Vous devez également remplacer &
par &&
.
J'ai corrigé le code et découvert que la raison pour laquelle la zone de saisie / texte ne fait pas écho aux variables de session est que j'utilisais session_unset ($ _ Session ['variable']) au lieu de unset ($ _ Session ['variable']). Quand j'utilise unset ($ _ Session ['variable']) ou que je déplace session_unset ($ _ Session ['variable']) jusqu'au bas de la page, cela fonctionne. Je ne comprends pas vraiment pourquoi cela se produit. Je pensais que session_unset ($ _ Session ['variable']) ne désarmera que la variable entre parenthèses, mais il semble désarmer toutes les variables de session existantes dans la session?
Vos constructions
if (isset ($ _ SESSION ['threadTitle']) &! Empty ($ _ SESSION ['threadT itle'])
n'ont pas beaucoup de sens. Tout d'abord, vide inclut la vérification de est déjà défini, il n'est donc pas nécessaire d'utiliser les deux. Et deuxièmement,&
serait un bit à bit et, vous voudriez un logique et ici, c'est&& < / code>