【发布时间】:2017-09-06 14:02:57
【问题描述】:
我已经开始学习 php,但我被 php 中的“输入”困住了。我即将建立一个注册。
这是我的“输入”代码(signup.php)的引述:
<?php
include_once 'header.php'
?>
<section class="main-container">
<div class="main-wrapper">
<h2>Sign up</h2>
<form class="signup-form" action="includes/signup.inc.php" method="POST">
<input type="text" name="first" placeholder="First Name">
<input type="text" name="last" placeholder="Last Name">
<input type="text" name="e-mail" placeholder="e-mail">
<input type="text" name="uid" placeholder="Username">
<input type="password" name="pwd" placeholder="Password">
<button type="submit" name="submit">
Sign up
</button>
</form>
</div>
</section>
<?php
include_once 'footer.php'
?>
这是我要开始的代码(signup.inc.php):
<?php
if (isset($_POST['submit'])) {
include_once 'dbh.inc.php';
$first = mysqli_real_escape_string($conn, $_POST['first']);
$last = mysqli_real_escape_string($conn, $_POST['last']);
$email = mysqli_real_escape_string($conn, $_POST['email']);
$uid = mysqli_real_escape_string($conn, $_POST['uid']);
$pwd = mysqli_real_escape_string($conn, $_POST['pwd']);
//Error handlers
//Check for empty fields
if (empty($first) || empty($last) || empty($email) || empty($uid) || empty($pwd)) {
header("Location: ../signup.php?signup=empty");
exit();
} else {...
这是我的连接代码(dbh.inc.php):
<?php
$user="root";
$password="";
$conn=mysqli_connect("localhost",$user,$password);
如果我访问我的网站,单击注册按钮并填写输入框,我会立即收到“signup.php?signup=empty”消息。 为什么我的变量是空的?
【问题讨论】:
-
不要再假设因为点击了提交就认为所有字段都已设置并存在,请在分配变量之前使用
isset和empty。 始终验证/清理您的用户输入并使用准备好的语句。如果uid是非字符串,那么你为什么要转义它?是否启用错误报告?是否显示/记录了任何错误?你在散列你的pwd字段吗?如果您还没有这样做,请使用password_hash。 -
你没有选择数据库
-
提示:始终使用 var_dump($var) 来记录应用程序!
-
不要依赖
mysqli_real_escape_string()来防止SQL注入,it alone is not sufficient。您应该通过mysqli 或PDO 驱动程序使用带有绑定参数的预处理语句。 This post 有一些很好的例子。 -
它不会运行,因为你的 没有设置,所以空,这就是你被重定向到空页面的原因。将
$email = mysqli_real_escape_string($conn, $_POST['email']);更改为$email = mysqli_real_escape_string($conn, $_POST['e-mail']);就可以了。