Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
运行表单脚本时的php pdo空白页_Php_Mysql_Pdo - Fatal编程技术网

运行表单脚本时的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是的,这也是;在反复阅读他们的代码后,对其进行了额外的编辑,并将其添加到我的答案中。我相信这是多种因素的混合。