我目前正在处理一个表单,该表单接收用户数据并在提交时传递给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)。表格在“提供住房”下
任何让我摆脱这个泥潭的指导将不胜感激。
答案 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();
}