我正在切换到 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”——所以,当然,没有“名字”,它们从来没有.