gpt4 book ai didi

运行表单脚本时的php pdo空白页

转载 作者:行者123 更新时间:2023-11-29 01:53:56 25 4
gpt4 key购买 nike

我正在尝试填写注册表,以便用户注册到该站点。我之前使用的是 mysql_*,但由于 mysql_*,我被告知 mysqli_*pdo 会更好在 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;

?>

非常感谢任何帮助。

最佳答案

请完整阅读我的回答。这里有很多事情会失控。


您不会收到错误,因为您没有在 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 开放.

使用准备好的语句


密码

我还注意到您可能以明文形式存储密码。不建议这样做。

使用以下之一:

其他链接:


最后的注释:

正如 Logan 在他的回答中指出的那样,使用条件 !empty()是检查空字段的更好方法,但它不会导致出现空白屏幕。

关于运行表单脚本时的php pdo空白页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34214206/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com