我正在尝试填写注册表单,以便用户注册该网站。我之前使用的是mysql_*
,但得到建议mysqli_*
或pdo
会更好,因为{7}在PHP7中被折旧了。所以,这是我的代码。每次执行此代码时,我只会得到一个空白页面,我的错误'消息不会显示,也不会创建新记录!'信息。我在网上看了一下,无法找到这个脚本的问题。
mysql_*
非常感谢任何帮助。
答案 0 :(得分:3)
完整地回答我的回答。这里有很多东西可以搞乱。
你没有收到错误,因为你没有在PHP方面检查它们。
首先,您看到了recovery-email
列?
它包含一个连字符,MySQL正在将其解释为recovery MINUS email
,认为你想要做数学。
将它包裹在刻度线中:
(username, firstname, middlename, surname, email, `recovery-email`, password)
或使用下划线recovery_email
重命名(除非是拼写错误)。
你没有看到它的语法错误,可能是由于第一个条件语句而且永远不会在那里开始。
在测试期间使用错误检查:
另见:
另外,请确保您的表单及其元素不会让您失望。您的表单需要使用POST方法,并且所有输入都带有它们的名称属性。
即:<input type="text" name="username">
等。
将error reporting添加到文件的顶部,这有助于查找错误。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
旁注:只应在暂存时进行显示错误,而不是生产。
可能发生冲突:
但是,此处$username, $password
中的变量可能存在冲突,其中您使用的是POST数组和登录凭据的相同变量。
另一件事是您的代码依赖于此条件语句:
if (isset($_POST['submit'])){...}
因此,这也可能是您获得空白屏幕的原因,和/或您有语法错误。 (使用错误报告)。
在else{ echo "Submit button not set..."; }
上方添加$conn = null;
。
如果属于那个,那么你就会知道该怎么做;输入可能没有submit
名称属性。
即:
<input type="submit" name="submit" value="SUBMIT">
或您的提交按钮可能是<button>
,而不是type="submit"
类型。
这是未知的,因为您没有在您的问题中发布HTML表单。
脚注:
即使您使用的是PDO,您的代码仍然可以使用SQL injection。
使用准备好的声明
<强>密码强>
我还注意到您可能以纯文本格式存储密码。不建议这样做。
使用以下其中一项:
crypt()
bcrypt()
scrypt()
password_hash()
功能。其他链接:
最终说明:
Logan在他的回答中指出,使用条件!empty()
是检查空字段的更好方法,但它不会导致你得到空白屏幕。
答案 1 :(得分:0)
您应该使用bindParam()
之类的内容,而不是将变量直接放入查询中。
$sql->bindParam(':username', $_POST["username"], PDO::PARAM_STR, 12);
在查询中对其他变量进行绑定。
而不是
(!$_POST['username'] || !$_POST['firstname'] || !$_POST['surname'] || !$_POST['email'] || !$_POST['password'])
应该是
(empty($_POST['username']) || empty($_POST['firstname']) || empty($_POST['surname']) || empty($_POST['email']) || empty($_POST['password']))/* DO IT FOR THE REST OF THE VARIABLES */
您还应该考虑哈希密码。您可以尝试简单但可靠的password_hash()
。