Как отобразить переменную сеанса внутри ввода и текстовое поле tinymce после перенаправления пользователя на страницу - PullRequest
1 голос
/ 22 января 2020

Я пытаюсь обработать форму. Если есть ошибка, пользователь будет перенаправлен на форму, где будут отображаться ошибки, и все, что пользователь пытался отправить, отражается в текстовой области tinymce формы. Таким образом, пользователю не придется переписывать все заново. Все работает хорошо, за исключением того, что переменная сеанса не отображается в редакторе tinymce после перенаправления пользователя. Переменная сеанса установлена ​​и имеет правильное значение. Если я выведу на экран переменные сеанса за пределами tinymce, они появятся, как и ожидалось. Это просто не будет отображаться в текстовой области. Как я могу это исправить?

Кроме того, я знаю, что это подвержено xss. Я хочу разрешить пользователям форматировать свои посты, поэтому я буду запускать их через HTML Purifier позже.

addnewthread. php:

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


?>

форма html:

<!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>

Ответы [ 3 ]

0 голосов
/ 22 января 2020

Просто отобразите переменную, просто позаботьтесь о " и ' из-за конкатенации строк.

Для ввода:

 <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['threadTitle'];
  }
  ?> 
  </textarea>
0 голосов
/ 22 января 2020

Я проверил ваш код и обнаружил, что вы забыли добавить круглые скобки:

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

Также вам необходимо заменить & на &&.

0 голосов
/ 22 января 2020

Я думаю, вам нужно сделать это так

 <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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...