$ _ POST无法从此页面或其他页面(个人资料页面)的登录表单中识别出mailuid的值。
$ _ Get方法由于登录系统的构建和不安全而无法使用。我需要mailuid值,以便在登录后将其带到自己的个人资料页面。
登录表单,因为它是post方法,所以我应该能够在其他页面和该页面上获取该值
<div class="modal">
<div class = "modal-content">
<section class="section-default">
<h1>Login</h1>
<?php
if (!isset($_SESSION['Id'])) {
echo'<form action="includes/login.inc.php" method="post">
<input type="text" name="mailuid" placeholder="Username/E-mail...">
<input type="password" name="pwd" placeholder="Password...">
<button type="submit" name="login-submit">Login</button>
</form>';
} else if (isset($_SESSION['Id'])) {
echo '<div class="signup12">
You Do not have an account? <a href="signup.php" class="ml-2">Sign Up</a>
</div>
<div class="forgotpwd">
<a href="#">Forgot your password?</a>
</div>';
}
?>
</section>
</div>
</div>
临时检查mailuid值。应该从登录表单中获取值,然后将其吐回去,以检查其是否被识别
<?php
$user = $_POST["mailuid"];
if (isset($_POST["mailuid"]))
{
$user = $_POST["mailuid"];
echo $user;
echo " is your username";
}
else
{
$user = null;
echo "no username supplied";
}
?>
答案 0 :(得分:0)
首先我要清理一下:
$user = $_POST["mailuid"];
if (isset($_POST["mailuid"]))
{
$user = $_POST["mailuid"];
echo $user;
echo " is your username";
}
else
{
$user = null;
echo "no username supplied";
}
相反,它可以写得更简洁:
$user = isset($_POST["mailuid"]) ? $_POST["mailuid"] : false;
if( $user ){
echo "{$user} is your username";
} else {
echo "no username supplied";
}
我更喜欢布尔值false而不是NULL,null表示它不存在。布尔值false使您知道您已检查它并且它不存在。通常,应该尽可能少地访问$_POST
。这是因为您永远不应该信任$_POST
。
$ _ Get方法不起作用,因为登录系统的构建方式和不安全的方式。
发布并没有获取安全,即使不使用PostMan等访问网站,也可以很轻松地将任何内容发布到页面。将其分配给本地变量后,您知道您至少已对数据进行了规范化,即使您尚未对其进行消毒。
也不要忘记尝试访问session_start
之前先呼叫$_SESSION
。由于问题的含糊不清,可能是表格工作正常,只是因为您尚未启动会话而未维护会话数据。等等。
希望有帮助。 我个人将清理构成表单的HTML部分,而不是这样:
<div class="modal">
<div class = "modal-content">
<section class="section-default">
<h1>Login</h1>
<?php
if (!isset($_SESSION['Id'])) {
echo'<form action="includes/login.inc.php" method="post">
<input type="text" name="mailuid" placeholder="Username/E-mail...">
<input type="password" name="pwd" placeholder="Password...">
<button type="submit" name="login-submit">Login</button>
</form>';
} else if (isset($_SESSION['Id'])) {
echo '<div class="signup12">
You Do not have an account? <a href="signup.php" class="ml-2">Sign Up</a>
</div>
<div class="forgotpwd">
<a href="#">Forgot your password?</a>
</div>';
}
?>
</section>
</div>
</div>
我会做这样的事情:
<div class="modal">
<div class = "modal-content">
<section class="section-default">
<h1>Login</h1>
<?php if (!isset($_SESSION['Id'])){ ?>
<form action="includes/login.inc.php" method="post">
<input type="text" name="mailuid" placeholder="Username/E-mail...">
<input type="password" name="pwd" placeholder="Password...">
<button type="submit" name="login-submit">Login</button>
</form>
<?php }else{ ?>
<div class="signup12">
You Do not have an account? <a href="signup.php" class="ml-2">Sign Up</a>
</div>
<div class="forgotpwd">
<a href="#">Forgot your password?</a>
</div>';
<?php } ?>
</section>
</div>
</div>
看看有多少清洁剂。其中大多数只是可读性问题。例如,无需检查else if条件中的isset($_SESSION['Id'])
,因为它是否已设置。减少会话变量键的位置减少了一个,这也减少了代码的复杂度。
对于实际问题,只要在提交表单后到达上述代码,它就可以工作。因此,这使我相信您的操作有问题。
转到includes/login.inc.php
后,您应该得到一个干净的页面,这意味着HTML的方式不会太多。您可以做的一件非常简单的事情就是在顶部添加:
die(__LINE__.' of '.__FILE__);
$user = isset($_POST["mailuid"]) ? $_POST["mailuid"] : false;
//... other code
这将是die
,它将终止PHP执行,但输出您传入的参数。在这种情况下,我只是放置了模具所在的行和文件,这样更容易找到后来。但关键是要查看您是否正在击中正确的结束脚本或表单操作/端点。
我之所以只建议这样做,是因为您对当前行为的含糊不清
$ _ POST无法从此页面或其他页面(个人资料页面)的登录表单中识别出mailuid的值。
例如,这并不能告诉我您是否在访问正确的页面。现在您是否曾说过类似的东西“它所做的全部就是输出no username supplied
”。那我至少不会知道这一点。如前所述,这可能只是对sesion_start()
的省略,在尝试访问任何$_SESSION
东西之前必须先调用它。在使用会话的每个页面的顶部,您应该只调用一次。
尽管这不是解决方案,但在评论中发布太多了。我真的很想为您提供更多帮助,但是没有足够的信息可以继续下去。