【问题标题】:Form doesn't send post表单不发送帖子
【发布时间】:2018-02-13 10:31:29
【问题描述】:

这是我的表单,它发送 POST 到 loginuser.php 它有从数据库读取用户的下拉列表。

<form action="loginuser.php" method="POST">
<div class="form-group">
    <select name="userList">
        <option> - - - </option>

        <?php
        include 'db.php';

        $sql = "SELECT username FROM dbusers";
        $result = $conn->query($sql);

        if ($result->num_rows > 0) {

            while($row = $result->fetch_assoc()) {
                echo "<option>" . $row["username"]. "</option>";
            }
            }
        ?>
    </select>
</div>
<div class="form-group">
    <input name "password" type="password" class="form-control" id="inputPassword">
</div>  
<div class="form-group">
    <button type="submit" class="btn btn-info btn-sm btn-block">Login</button>
</div>  
</form>

这是我的 loginuser.php - 当我按下登录按钮时,它会将我发送到 localhost/loginuser.php,但它显示“TEST-FALSE”

<?php
session_start();
require('db.php');

if (isset($_POST['username']) and isset($_POST['password'])){
  echo "TEST - GOOD";

  $username = $_POST['username'];
  $password = $_POST['password'];

  $query = "SELECT * FROM `dbusers` WHERE username='$username' and password='$password'";

  $result = mysqli_query($conn, $query) or die(mysqli_error($conn));
  $count = mysqli_num_rows($result);

  if ($count == 1){
    $_SESSION['username'] = $username;
  }else{
    $fmsg = "Invalid Login Credentials.";
  }
}

if (isset($_SESSION['username'])){
  $username = $_SESSION['username'];
  echo "Succes";
}else{
  echo "TEST - FALSE";
}
?>

另外,我在 db.php 中的连接可以正常工作,因为表单上的脚本可以正确显示用户。

【问题讨论】:

  • 你没有通过username你只通过userlist
  • name "password" 是一个错字,应该有一个=。所以不会提交。而且您的表单根本不包含名为“username”的变量,只有“userList”
  • 另外,您的代码容易受到 SQL 注入攻击。您应该使用参数化查询和准备好的语句来帮助防止攻击者通过使用恶意输入值来破坏您的数据库。 bobby-tables.com 给出了风险解释,以及如何使用 PHP / mysqli 安全地编写查询的一些示例。 切勿将未经处理的数据直接插入您的 SQL。
  • 你应该对你的密码进行哈希处理,而不是将它们存储为纯文本。
  • 好的,谢谢!它有效。

标签: php forms post


【解决方案1】:

我在您的前端选择下拉菜单中更改了一些通过值,我不知道name=password 是否是拼写错误:

<form action="loginuser.php" method="POST">
<div class="form-group">
    <select name="userList">
        <option> - - - </option>

        <?php
        include 'db.php';

        $sql = "SELECT username FROM dbusers";
        $result = $conn->query($sql);

        if ($result->num_rows > 0) {

            while($row = $result->fetch_assoc()) {
                echo "<option value='".$row["username"]."'>" . $row["username"]. "</option>";
            }
            }
        ?>
    </select>
</div>
<div class="form-group">
    <input name="password" type="password" class="form-control" id="inputPassword">
</div>  
<div class="form-group">
    <button type="submit" class="btn btn-info btn-sm btn-block">Login</button>
</div>  

你的 php 代码是这样的:

<?php
session_start();
require('db.php');

if (isset($_POST['userList']) && isset($_POST['password'])){
  echo "TEST - GOOD";

  $username = $_POST['userList'];
  $password = $_POST['password'];

  $query = "SELECT * FROM `dbusers` WHERE username='$username' and password='$password'";

  $result = mysqli_query($conn, $query) or die(mysqli_error($conn));
  $count = mysqli_num_rows($result);

  if ($count == 1){
    $_SESSION['username'] = $username;
  }else{
    $fmsg = "Invalid Login Credentials.";
  }
}

if (isset($_SESSION['username'])){
  $username = $_SESSION['username'];
  echo "Succes";
}else{
  echo "TEST - FALSE";
}
?>

注意:请避免sql注入尝试使用PDO。,

【讨论】:

  • 那么你需要检查查询执行是否正确并且返回正确的计数@majsterfun
【解决方案2】:

这是你写的

<div class="form-group"> <input name "password" type="password" class="form-control" id="inputPassword"> </div> 

正确的

<div class="form-group"> <input name="password" type="password" class="form-control" id="inputPassword"> </div> 

name="password" (=) 缺失

【讨论】:

  • 正确但不是完整的故事。甚至在您回答之前,cmets 就已经提到了更多。
猜你喜欢
  • 2013-03-16
  • 2018-02-09
  • 2017-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-27
  • 2021-10-08
  • 1970-01-01
相关资源
最近更新 更多