【问题标题】:php post method fails with no errorphp post方法失败,没有错误
【发布时间】:2015-11-21 15:23:31
【问题描述】:

我的代码中似乎遗漏了一些限制 post 方法和未发送到我的数据库的数据的内容。数据库连接测试成功,但是当我提交带有输入数据的表单时...被重定向到 new_employee.php,这意味着 $_POST['submit'] 为 false,但设置了表单 name='submit'。

这是php代码

<?php  
if (isset($_POST['submit'])) {
    $first_name = $_POST["first_name"];
    $last_name = $_POST["last_name"];
    $dept_id = $_POST["dept_id"];
    $position = $_POST["position"];
    $hire_date = $_POST["hire_date"];
    $salary = $_POST["salary"];
    $bonus = $_POST["bonus"];
    $end_date = $_POST["end_date"];

    $sql  = "insert into staff (first_name, last_name, dept_id, position, hire_date, salary, bonus, end_date)";
    $sql .= " values ('{$first_name}', '{$last_name}', {$dept_id}, '{$position}', {$hire_date}, {$salary}, {$bonus}, {$end_date})";
    $result = mysqli_query($connection, $sql);

    if ($result) {
        redirect_to("employee.php");
    } else {
        redirect_to("new_employee.php");
    }
}?>

这是 html 表单

<form action="new_employee.php" method="POST" role="form" class="form-horizontal">
                <legend>Add new employee</legend>

                <div class="col-md-10">
                    First Name: <input type="text" name="first_name" class="form-control" placeholder="First name">
                    Last Name: <input type="text" name="last_name" class="form-control" placeholder="Last name">
                    Department: <input type="text" name="dept_id" class="form-control" placeholder="Department">
                    Position: <input type="text" name="position" class="form-control" placeholder="Position">
                    Hire Date: <input type="text" name="hire_date" class="form-control" placeholder="Hire date">
                    Salary: <input type="text" name="salary" class="form-control" placeholder="Salary">
                    Bonus: <input type="text" name="bonus" class="form-control" placeholder="Bonus">
                    End Date: <input type="text" name="end_date" class="form-control" placeholder="Password">

                    <br/>
                    <div class="row text-right">
                        <input type="submit" name="submit" value="Save" class="btn btn-default" /> 
                        &nbsp 
                        <button type="button" class="btn btn-default" aria-label="Left Align"><a href="employee.php">Cancel</a></button>
                    </div>
                </div>
            </form>

我能在这里得到的任何帮助将不胜感激。

【问题讨论】:

  • 缺少起始
    标签,请包含此标签。
  • 根据您的代码,当您的查询失败时,您将被重定向到new_employee.php,而不是在未设置$_POST['submit'] 时。尝试回显您的 $sql 并直接在 MySQL 中尝试。我的猜测是$hire_date$salary$bonus$end_date 是字符串,需要引用。如果其中任何一个具有$-/ 等字符,则它们被视为字符串。另外,您可能想看看 - How can I prevent SQL-injection in php
  • @GoatMaster 开头的表单标签实际上并没有弄乱,我已经更正了格式。 $hire_date、$salary、$bonus 和 $end_date 都可以为空并且不是字符串。对于我的测试,仅提供 first_name、last_name、dept_id 和 position,其他字段留空一旦我的代码正确,我将努力防止 sql 注入
  • @GoatMaster 我像这样直接在 mysql 上尝试了我的 sql stmt - 插入员工(first_name,last_name,dept_id,position,hire_date,salary,bonus,end_date)值('pretty','emem ', 101, '老师', null, null, null, null); -- 插入成功
  • $_POST 变量的空值不会转换为 null。您需要回显出实际的$sql,您会看到它看起来像... values ('pretty', 'emem', 101, 'teacher', , , , ),这是一个无效查询。尝试使用 $hire_date = (trim($_POST["hire_date"]) == "" ? 'null' : $_POST["hire_date"]; 之类的条件句

标签: php forms


【解决方案1】:

我认为您的代码不正确。 试试这个 sql 变量而不是你的:

$sql  = "insert into staff (first_name, last_name, dept_id, position, hire_date, salary, bonus, end_date)";
$sql .= " values ('$first_name', '$last_name', $dept_id, '$position', $hire_date, $salary, $bonus, $end_date)";

【讨论】:

猜你喜欢
  • 2012-10-08
  • 1970-01-01
  • 1970-01-01
  • 2013-08-10
  • 2012-08-26
  • 2015-07-24
  • 1970-01-01
  • 2015-03-09
  • 1970-01-01
相关资源
最近更新 更多