我正在转向PDO,这个开发网站已经有几十页的成功,而这个应该是一个“快速”形式 - 应该只用了大约十分钟。但我正在开始我的第二个周末试图找出它为什么不起作用。我知道下面的内容是不安全的 - 我已经把它剥去了骨头,试图弄清楚为什么它不会处理。以下只是将字段空白重新加载到表单页面。我没有收到任何错误,错误日志没有显示任何内容,并且它永远不会达到处理表单的程度 - 例如,输入两个不同的密码不显示为错误,回显变量未显示。它似乎甚至没有达到“if(isset”点 - 我无法弄清楚原因。
<?php
try {
$con = new PDO('mysql:host=localhost;dbname=database', $user, $pass);
} catch (PDOException $e) {
echo "Connection failed: " . $e -> getMessage();
}
if (isset($_POST['submit'])) {
$email = $_POST['email'];
$username = $_POST['username'];
$pass1 = $_POST['pass1'];
$pass2 = $_POST['pass2'];
if ($pass1 != $pass2) {
die ("ERROR: Hey! The passwords don't match!");
}
$stmt = $con -> prepare ("
INSERT INTO proj_users
(email, username, password)
VALUES
(?, ?, ?)
");
$stmt -> bindParam(1,$email);
$stmt -> bindParam(2,$username);
$stmt -> bindParam(3,$pass1);
$stmt -> execute();
header('Location: /index.php');
} else {
?>
<form action='<?php echo $_SERVER['SCRIPT_NAME']; ?>' method='post'>
<table>
<tr>
<td class='label'>Email: </td>
<td><input type='text' name='email' /></td>
</tr>
<tr>
<td class='label'>Username: </td>
<td><input type='text' name='username' maxlength='30' /></td>
</tr>
<tr>
<td class='label'>Password: </td>
<td><input type='password' name='pass1' /></td>
</tr>
<tr>
<td class='label'>Password Again: </td>
<td><input type='password' name='pass2' /></td>
</tr>
<tr>
<td class='label alignright' colspan='2'><input type='submit' value='Register' /></td>
</tr>
</table>
</form>
<?php
}
?>
更新:当我浏览并更新更多表单时,我遇到了同样的问题 - 没有“名称”属性,但是在我开始弄乱它们之前它们一直在工作。我没有花很长时间才弄明白这是因为我正在重写表格,并在此过程中将它们从“!isset”改为“isset” - 所以,当然,没有“名字”,他们从来没有。
答案 0 :(得分:3)
<input type='submit' value='Register' />
应该是
<input name='submit' type='submit' value='Register' />
您忘记为“提交”按钮设置name
。
答案 1 :(得分:3)
您必须为提交按钮设置名称属性我认为
变化
<input type='submit' value='Register' />
到
<input type='submit' name='submit' value='Register' />
答案 2 :(得分:1)
你错过了这个名字:
<input type='submit' name='submit' value='Register' />
答案 3 :(得分:0)
您正在调用$ _POST ['submit'],它不在您的查询字符串中。 将名称添加到提交按钮,然后回答。
<input type='submit' name='submit' value='Register' />