我如何获得我的$ _POST来识别值

时间:2019-07-13 18:01:19

标签: php

$ _ 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";
        }

            ?>

1 个答案:

答案 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东西之前必须先调用它。在使用会话的每个页面的顶部,您应该只调用一次。

尽管这不是解决方案,但在评论中发布太多了。我真的很想为您提供更多帮助,但是没有足够的信息可以继续下去。