我是一位寻求帮助的新开发人员。 我试图搜索这个问题,但是我找不到任何令人满意的东西。
我所拥有的基本上是: 报名表格。用户输入他的详细信息并注册我的网站。 如果字段太短,则会处理错误并使用url中的变量重定向同一页面。 然后我在同一页面上获取url变量并显示错误。
然而,当我刷新页面时,表单信息消失了,错误数组正常工作并显示在页面上但是我必须在网址中传递用户名,电子邮件等。
所以我的问题是:将名字,姓名,用户名,电子邮件传递到网址是否有问题,以便刷新后可以在表单中显示?我知道怎么做,我只是想知道是否应该这样做。
修改
我的代码示例。但我想用这个用户名来保存提交后的数据。
if (strlen($firstName) <= 3)
{
$error_array_4 = array("er4" => "t");
}
header('Location:'.$_SERVER['PHP_SELF'].'?'.$error_array_4.'');
if(isset($_GET['er4']) && $_GET['er4'] == "t")
{
echo "<div id='errorContainer'>Your firstname is too short</div>";
}
答案 0 :(得分:2)
为什么要在刷新后保留错误?
该错误与此最新提交有关,只有在提交的上下文中才有意义。如果我重新加载页面(或者为该实例,关闭选项卡并再次输入表单),为什么我需要看到相同的错误?显示新鲜的形式对我来说更有意义。
但是,如果你坚持,你可以采取几种方法:
localStorage
,localStorage保留在客户端,因此只有该客户端才能看到它。 (请注意,这并不能免除您验证服务器端的问题,只是服务器端错误处理不需要那么好)。在查询中传递这些参数是不可取的,因为:
答案 1 :(得分:0)
虽然很多人提到他应该使用POST而不是GET,但是没有人告诉他如何。我现在会做的,因为他是新开发人员寻求帮助。
在您的html中,如果您有表单,请使用值method
添加属性POST
:
<form method="POST" ...
当然,您需要将PHP脚本更改为使用$_POST
而不是$_GET
。
区别为GET
(默认情况下,当您忽略method=
时)会附加到网址,例如?name = foo&amp; action = bar,但POST
将与标题一起发送。< / p>
现在,当您在结果页面上点击刷新时,您的浏览器会要求您再次提交数据。
答案 2 :(得分:0)
假设您正在使用过程PHP代码,这使得这个问题很容易解决(这可以使用OOP ofcourse来完成)。考虑这个少量的代码。这应该都在同一个文件中,不应该重定向,因为它会破坏逻辑。
<?php
if(isset($_POST['submit'])) {
$errors = [];
// Assign posted values to variables
$username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);
/*
* Error checking here. If an error occurs you update your errors array and
* leave the posted as it is.
*/
if(strlen($username) < 4 || strlen($username) > 30) {
$errors[] = 'The username must be between 4 and 30 characters in length.';
}
// Do your registration logic here.
// If all is good and well redirect to another page (login page maybe)
}else{
$username = null;
$email = null;
// Add any other required variables here...
}
?>
然后在HTML表单中执行以下操作:
<form method="POST" action="">
<p>Username:</p>
<input type="text" name="username" value="<?php echo $username; ?>" />
<p>Email:</p>
<input type="text" name=email" value="<?php echo $email; ?>" />
<input type="submit" name="submit" value="Register" />
</form>
请注意value
HTML标记的input
属性。您可以在此处回显输入字段的值。
这将确保始终定义变量$username
和$email
,并且默认值等于NULL
,您可以毫不费力地将它们回显到屏幕上。然后,当发布页面时,$username
和$email
变量将被用户提供的值覆盖,并在发生错误时显示。
奖励信息
在youtube上有一个小编,其中创建了注册和登录系统。请记住,这是一个非常糟糕的系统,应该只用于学习基础知识,永远不会在实时服务器上使用! 还有更多你所问的内容,因为他略微涵盖了数据库交互,但遗忘了一个基本的东西(我稍后会描述)。但是你可以用它来了解幕后发生的事情。
PHPAcadamy: Registration & Login System
如果您愿意,可以在Google上阅读以下两件事(这是一些非常好的基础知识)。
希望这会有所帮助。我知道这可能有点令人生畏,而且很难理解。如果信息太少,请随时问我。
答案 3 :(得分:-1)
如果正在使用HTTPS,则没有关于用户名的安全问题。
如果没有使用HTTPS,有关安全性的问题没有实际意义,因为不存在任何安全问题
不使用HTTPS时无法保护GET查询字符串或POST数据。