运行表单脚本时的php pdo空白页
我正试图完成一个用户注册到该网站的登记表。早些时候我正在使用运行表单脚本时的php pdo空白页,php,mysql,pdo,Php,Mysql,Pdo,我正试图完成一个用户注册到该网站的登记表。早些时候我正在使用mysql\u*,但得到的建议是mysqli\u*或pdo会更好,因为mysql\u*在PHP7中被贬值。这是我的代码。每次执行这段代码时,我只会得到一个空白页,我的“错误”消息不会出现,也不会出现“新记录创建成功!”消息我已经在网上查看过了,但是没有发现这个脚本的问题 <?php if (isset($_POST['submit'])){ $servername = "localhost"; $username = "use
mysql\u*
,但得到的建议是mysqli\u*
或pdo
会更好,因为mysql\u*
在PHP7中被贬值。这是我的代码。每次执行这段代码时,我只会得到一个空白页,我的“错误”消息不会出现,也不会出现“新记录创建成功!”消息我已经在网上查看过了,但是没有发现这个脚本的问题
<?php
if (isset($_POST['submit'])){
$servername = "localhost";
$username = "user";
$password = "pass";
$dbname = "db";
$username=$_POST['username'];
$firstname=$_POST['firstname'];
$middlename=$_POST['middlename'];
$surname=$_POST['surname'];
$email=$_POST['email'];
$recovery_email=$_POST['recovery_email'];
$password=$_POST['password'];
if (!$_POST['username'] || !$_POST['firstname'] || !$_POST['surname'] || !$_POST['email'] || !$_POST['password']) {
header('Location: http://makeupstudiofix.co.uk/user/register/?error=fields');
exit();
} else {
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "INSERT INTO user_logins (username, firstname, middlename, surname, email, recovery-email, password)
VALUES ('$username', '$firstname', '$middlename', '$surname', '$email', '$recovery_email', '$password')";
$conn->exec($sql);
echo "<Script>alert('New record created successfully')</script>";
}
catch(PDOException $e)
{
echo $sql . "<br>" . $e->getMessage();
}
echo 'error';
}
}
$conn = null;
?>
您应该使用类似的方法,而不是直接将变量放入查询中
$sql->bindParam(':username', $_POST["username"], PDO::PARAM_STR, 12);
对要绑定到查询中的其他变量执行此操作
$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 */
您还应该考虑对密码进行哈希运算。你可以试一下简单但可靠的答案。一定要把我的答案通读一遍。这里有相当多的事情会失控
您不会得到错误,因为您没有在PHP端检查错误
首先,您看到您的恢复电子邮件
专栏了吗
它包含一个连字符,MySQL将其解释为恢复减去电子邮件
,认为您需要做数学运算
或者用记号将其包裹起来:
(username, firstname, middlename, surname, email, `recovery-email`, password)
或者使用下划线recovery\u email
重命名它(除非是打字错误)
您没有看到它的语法错误,可能是由于第一个条件语句,并且从一开始就没有在其中出现
在测试期间使用错误检查:
还应咨询:
另外,确保您的表单及其元素不会让您失望。表单需要使用POST方法,并且所有输入都带有名称属性
例如:
等
添加到文件的顶部,这将有助于查找错误
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
因此,这也可能是您出现空白屏幕和/或语法错误的原因。(对其使用错误报告)
在$conn=null上方为其添加一个否则{echo“提交按钮未设置…”;}
代码>
如果是这样的话,你就知道该怎么办了;输入可能没有它的submit
name属性
即:
或者,您的提交按钮可能是一个没有type=“submit”
类型的
这是未知的,因为您没有在问题中发布HTML表单
脚注:
即使您使用的是PDO,您的代码仍然可以使用
使用事先准备好的陈述
密码
我还注意到,您可能正在以纯文本形式存储密码。不建议这样做
使用以下选项之一:
- PHP5.5的函数
- 兼容性包(如果PHP<5.5)
其他链接:
最后注释:
if (isset($_POST['submit'])){...}
正如洛根在他的回答中指出的那样,使用有条件的!EMPTY()/<代码>是检查空字段的更好方法,但是它不会导致您得到的空白屏幕。
您还必须更改值()
插入查询的第一个值(:用户名,:名字,:中间名,:姓氏,:电子邮件,:恢复电子邮件,:密码)
是。另外,我之前删除了我的评论,因为我重新阅读了你给我的答案。干杯。我已经实施了你建议的上述事项。不幸的是,我仍然收到一个白色屏幕,你知道为什么吗?@JoshMurray-我已经改变了你的if()
条件。请立即尝试我更新的答案。我已对if语句进行了正确的更改,并已上载,但仍然没有更改。你有没有可能“注册”并亲自看一看?谢谢如果你得到一个空白屏幕,脚本中可能有语法错误。检查服务器上的PHP或Apache错误日志。@Barmar-我正在查找错误日志,但在收到此空白页时没有。我以前遇到的任何其他错误都会给我一个错误日志。请使用PHP来处理密码安全问题。如果您使用的PHP版本低于5.5,您可以使用密码\u hash()
。感谢您的回答,虽然它已经摆脱了可怕的白色屏幕,但我现在确实收到了关于未创建变量的错误,但我会解决它。感谢您提供有关密码、列名等的帮助和信息。您不能在INSERT
语句的列列表中计算。连字符应该导致MySQL语法错误。既然他设置了ERRMODE\u异常
set,那应该是一个错误信号。@Barmar True,正如我在回答中所说;他们可能还没有看到这个错误,因为它很可能还没有出现在那里,可能是因为他们提交输入的条件语句没有命名。至少,这是我从中得到的。这也可能是因为$username/$password
变量重用。在设置错误处理模式之前,这将在新PDO期间导致错误。@Barmar是的,这也是;在反复阅读他们的代码后,对其进行了额外的编辑,并将其添加到我的答案中。我相信这是多种因素的混合。