【发布时间】: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" />
 
<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"];之类的条件句