【问题标题】:POST form not working with PHP, working with PostmanPOST 表单不使用 PHP,使用 Postman
【发布时间】:2017-12-12 16:17:31
【问题描述】:

这是带有会话的登录代码。我正在使用引导程序。代码没有重定向到 index.html,当我在 Postman 中测试它时它可以工作,但在这个引导程序模板中它不起作用。我没明白原因?请帮忙

<?php

if($_SERVER["REQUEST_METHOD"]=="POST") {
    $email=$_POST["email"];
    $password=$_POST["password"];

    $sql = "SELECT * FROM login where email='$email' and password='$password'";

    $result = mysqli_query($conn,$sql);
    $row=mysqli_fetch_array($result,MYSQLI_ASSOC);
    $count = mysqli_num_rows($result);

    if ($count>0) {

        // output data of each row
        if($row['admin_role']==1) {
            //$_SESSION["email"]=$email;
            //$_SESSION["id"]=$row['user_id'];

            //echo "Login successfull";

            header('Location: index.html');
            exit; 
        }
    } else {
        echo "0 results";
    }
}

?>


<div class="row">
    <div class="col-xs-10 col-xs-offset-1 col-sm-8 col-sm-offset-2 col-md-4 col-md-offset-4">
        <div class="login-panel panel panel-default">
            <div class="panel-heading"> Admin Log in</div>
            <div class="panel-body">
                <form role="form">
                    <fieldset>
                        <div class="form-group">
                            <input class="form-control" placeholder="E-mail" name="email" type="email" autofocus="">
                        </div>
                        <div class="form-group">
                            <input class="form-control" placeholder="Password" name="password" type="password" value="">
                        </div>
                        <div class="checkbox">
                            <label>
                                <input name="remember" type="checkbox" value="Remember Me">Remember Me
                            </label>
                        </div>
                        <a href="" class="btn btn-primary">Login</a>
                    </fieldset>
                </form>
            </div>
        </div>
    </div><!-- /.col-->
</div><!-- /.row --> 

【问题讨论】:

    标签: php css twitter-bootstrap mysqli


    【解决方案1】:

    您的表单是 GET 表单,您需要在 &lt;form&gt; 标签上设置 method="POST"

    除此之外,您的代码很容易受到攻击,您应该对数据库中的密码进行哈希处理,并且应该使用 PDO,因为它更安全,您还应该使用准备好的语句并关闭模拟语句。

    目前,您的代码容易受到 SQL 注入的攻击,这是 Web 应用程序最基本但最危险的安全威胁之一。

    【讨论】:

    • 好的,但我没有在表格中看到任何 GET 字词?你能告诉我线路吗?
    • @TariqZiad 您没有在&lt;form&gt; 上指定method 属性,所以它默认GET。您需要 add 该属性而不是更改它。查看&lt;form&gt;的开始标签
    • @TariqZiad &lt;form role="form"&gt; -> &lt;form role="form" method="POST"&gt;
    • @TariqZiad 定义不起作用。如果按钮不执行任何操作,请尝试将type="submit" 添加到它
    • @TariqZiad 将 &lt;a href="" class="btn btn-primary"&gt;Login&lt;/a&gt; 更改为 &lt;button type="submit" class="btn btn-primary"&gt;Login&lt;/button&gt;
    【解决方案2】:

    OverCoder 是对的,顺便说一下,您应该在分配值之前检查 isset 是否有两个 POST 变量: if (isset($_POST["email"]) && isset($_POST["password"])) { //bla bla }

    【讨论】:

      【解决方案3】:

      您忘记了提交按钮,您忘记了表单方法和类型: action="#" 告诉你来同一个 php 文件。 非常重要的改变: $email=$_POST["email"]; 在 $email=strip_tags($_POST["email"]);

      阅读 strip_tags() 函数:)

      <div class="row">
      <div class="col-xs-10 col-xs-offset-1 col-sm-8 col-sm-offset-2 col-md-4 col-md-offset-4">
          <div class="login-panel panel panel-default">
              <div class="panel-heading"> Admin Log in</div>
              <div class="panel-body">
                  <form role="form" action="#" method="post">
                      <fieldset>
                          <div class="form-group">
                              <input class="form-control" placeholder="E-mail" name="email" type="email" autofocus="">
                          </div>
                          <div class="form-group">
                              <input class="form-control" placeholder="Password" name="password" type="password" value="">
                          </div>
                          <div class="checkbox">
                              <label>
                                  <input name="remember" type="checkbox" value="Remember Me">Remember Me
                              </label>
                          </div>
                          <button type="submit" class="btn btn-primary">Login</button>
                      </fieldset>
                  </form>
              </div>
          </div>
      </div><!-- /.col-->
      

      【讨论】:

        【解决方案4】:

        我认为

        Step1:您可以使用 POST 设置表单方法,如 method="post" 并使用按钮类型提交(不使用锚点,type="button" 不适用于从表单发送的数据)。仅使用提交按钮。

        Step2:您可以使用输入字段的条件来登录。 isset() 表示字段(PHP 函数)的非空数据,并在这两种情况下都使用了&amp;&amp;

        Step3:如果可以在会话中存储数据,则需要启动会话(session_start())。如果您无法启动会话,则无法存储数据。

        if(isset($_POST["email"]) && isset($_POST["password"])) {
            $email    = trim($_POST["email"]);
            $password = trim($_POST["password"]);
        
        
            $sql = "SELECT * FROM login where email='$email' and password='$password'";
        
            $result = mysqli_query($conn,$sql);
            $row=mysqli_fetch_array($result,MYSQLI_ASSOC);
            $count = mysqli_num_rows($result);
        
            if ($count>0) {
        
                // output data of each row
                if($row['admin_role']==1) {
        
                    //session_start();
                    //$_SESSION["email"] = $email;
                    //$_SESSION["id"]    = $row['user_id'];
        
                    //echo "Login successfull";
        
                    header('Location: index.html');
                }
            } else {
                echo "0 results";
            }
        }
        
        
        
        <div class="row">
            <div class="col-xs-10 col-xs-offset-1 col-sm-8 col-sm-offset-2 col-md-4 col-md-offset-4">
                <div class="login-panel panel panel-default">
                    <div class="panel-heading"> Admin Log in</div>
                    <div class="panel-body">
                        <form role="form" action="" method="POST">
                            <fieldset>
                                <div class="form-group">
                                    <input class="form-control" placeholder="E-mail" name="email" type="email" autofocus="">
                                </div>
                                <div class="form-group">
                                    <input class="form-control" placeholder="Password" name="password" type="password" value="">
                                </div>
                                <div class="checkbox">
                                    <label>
                                        <input name="remember" type="checkbox" value="Remember Me">Remember Me
                                    </label>
                                </div>
                                <button type="submit" class="btn btn-primary">Login</button>
                            </fieldset>
                        </form>
                    </div>
                </div>
            </div><!-- /.col-->
        </div><!-- /.row --> 
        

        【讨论】:

          猜你喜欢
          • 2017-09-25
          • 1970-01-01
          • 2020-01-27
          • 1970-01-01
          • 1970-01-01
          • 2018-11-06
          • 2016-01-31
          • 1970-01-01
          • 2019-01-16
          相关资源
          最近更新 更多