1
votes

Comment faire écho à la variable de session dans l'entrée et dans la zone de texte Tinymce après avoir redirigé l'utilisateur vers la page

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');
}


?>


1 commentaires

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>


3 Réponses :


0
votes

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>


0 commentaires

0
votes

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>


0 commentaires

0
votes

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 && .


1 commentaires

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?