通过HTML表单重新加载的sessionStorage变量传递错误

时间:2017-06-19 05:14:22

标签: javascript php session

我目前正在处理一个表单,该表单接收用户数据并在提交时传递给mySQL。它有一个开头段落,我想在提交失败时更改,以显示适用的错误。我想将错误传递给刷新的表单,因为未能向用户显示出错的地方。这是我的Opening div。

<div id="formExplained">
     <h1>Title Here</h1>
     <p>Content Here</p>
</div>

在提交时,我的脚本将我的$ error变量设置为false,因此表单提交可以在$errors == false时继续。我在php中检查各种错误并将它们逐个附加到$ errors。最后我

if($_POST['submit']){
  //variable to hold relavent error messages.  Set to false
          $error = false;
  //check each form field for errors
        if(!$title){
          $error .= $missingTitle;
        }else{
          $title = filter_var($title, FILTER_SANITIZE_STRING);
          $title = mysqli_real_escape_string($link, $title);
        }//Check for Grocoordinates
        if(!$lat || !$lng){
          $error .= $missingGeo;
        }//etc

在我设置mySQL查询之前,我会检查错误并在存在时删除我的代码。在这里,我还将错误传递给sessionStorage,并回显包含我的错误的div。

if($error){
          //pass errors from php to session Storage to display on reload
          echo "<script>sessionStorage.setItem('error', '$error');</script>";
          echo "<div id='error' class='error'>$error;</div>";
          echo "<p>Here Is Proof that this is Executing</p>";
          die();
        }

包含错误的div和段落都在页面重新加载时完美执行。它们显示在我的地图底部。

在我运行的所有php提交代码的单独的javascript中,我拉出sessionStorage变量并尝试从我的开始div更改我的innerHTML以反映错误。

<script>
  var error = sessionStorage.getItem('error');
    if(error){
        document.getElementById('formExplained').innerHTML = "<div class='error'><p>" + error + "</p></div>";
        }
</script>

此代码在我第一次提交时无法正确执行,但是在第二次提交时,我的错误会显示在我希望的表单顶部。似乎无论我的错误如何改变,只有在延迟2次刷新后才会显示。

查看我正在使用的页面(http://www.sumoftruth.com/map/map.php)。表格在“提供住房”下

任何让我摆脱这个泥潭的指导将不胜感激。

1 个答案:

答案 0 :(得分:0)

要解决此问题。

正如Shahaf所建议的那样,我需要将会话存储检查移到脚本的末尾。

  if($error){
      //pass errors from php to session Storage to display on reload
          echo "<script type='text/javascript'>sessionStorage.setItem('error', '$error');</script>";
        //Here is a script to pass the sessionStorage error variable to javascript variable
          echo "<script>";
          echo   "var error = sessionStorage.getItem('error');";
        //if any errors stored in sessionStorage, place them in main div
          echo  "if(error){";
        //write the error message into the main div in offerShelterForm
          echo    "document.getElementById('formExplained').innerHTML = \"<div class='error'><p>\" + error + \"</p></div>\";";
          echo  "}";
          echo "</script>";
        //kill the rest of the php code
          die();
        }