mysql — ошибка печати формы регистрации PHP

Закончено создание системы входа в систему php / mysql. Я также создал систему регистрации, которая работает, но мне нужно заставить ее распечатать ошибку в html, если электронная почта / имя пользователя уже зарегистрированы или если имя пользователя или пароль из входных данных отсутствуют и т. Д.

Как и сейчас, он автоматически умрет и напечатает сообщение об ошибке на пустой странице.

Это выглядит так:

        if(empty($_POST['password']))
{
die("Please enter a password");
}

Я попробовал это:

 $errors = array();
if(empty($_POST['password']))
{
$errors[] = 'Please enter a password';
}

А затем распечатать его внутри HTML. Но он проигнорирует ввод пароля и все равно зарегистрирует учетную запись пользователя (с зашифрованным паролем в phpmyadmin).

Похоже, должен умереть, но как мне это сделать?

Вот весь код:

<?php
require("*mysql_connection file*");


if(!empty($_POST))
{

if(empty($_POST['username']))
{
die("Please enter a username.");
}

$errors = array();
if(empty($_POST['password']))
{
$errors[] = 'Please enter your password';
}

if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL))
{
die("Invalid E-Mail Address");
}

$query = "SELECT
1
FROM users
WHERE
username = :username
";

$query_params = array(
':username' => $_POST['username']
);

try
{
$stmt = $db->prepare($query);
$result = $stmt->execute($query_params);
}
catch(PDOException $ex)
{
die("Failed to run query: " . $ex->getMessage());
}

$row = $stmt->fetch();

if($row)
{
die("This username is already in use");
}

$query = "SELECT
1
FROM users
WHERE
email = :email
";

$query_params = array(
':email' => $_POST['email']
);

try
{
$stmt = $db->prepare($query);
$result = $stmt->execute($query_params);
}
catch(PDOException $ex)
{
die("Failed to run query: " . $ex->getMessage());
}

$row = $stmt->fetch();

if($row)
{
die("Email already registered.");
}

$query = "INSERT INTO users (
username,
password,
salt,
email
) VALUES (
:username,
:password,
:salt,
:email
)
";

$salt = dechex(mt_rand(0, 2147483647)) . dechex(mt_rand(0, 2147483647));


$password = hash('sha256', $_POST['password'] . $salt);

for($round = 0; $round < 65536; $round++)
{
$password = hash('sha256', $password . $salt);
}

$query_params = array(
':username' => $_POST['username'],
':password' => $password,
':salt' => $salt,
':email' => $_POST['email']
);

try
{
$stmt = $db->prepare($query);
$result = $stmt->execute($query_params);
}
catch(PDOException $ex)
{

die("Failed to run query: " . $ex->getMessage());
}

header("Location: *login page*");
die("Redirecting to *login page*");
}

?>

0

Решение

<?php
require("*mysql_connection file*");


if(!empty($_POST))
{

if(empty($_POST['username']))
{
die("Please enter a username.");
}

$errors = array();
if(empty($_POST['password']))
{
$errors[] = 'Please enter your password';
}

if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL))
{
die("Invalid E-Mail Address");
}

$query = "SELECT
1
FROM users
WHERE
username = :username
";

$query_params = array(
':username' => $_POST['username']
);

try
{
$stmt = $db->prepare($query);
$result = $stmt->execute($query_params);
}
catch(PDOException $ex)
{
die("Failed to run query: " . $ex->getMessage());
}

$row = $stmt->fetch();

if($row)
{
die("This username is already in use");
}

$query = "SELECT
1
FROM users
WHERE
email = :email
";

$query_params = array(
':email' => $_POST['email']
);

try
{
$stmt = $db->prepare($query);
$result = $stmt->execute($query_params);
}
catch(PDOException $ex)
{
die("Failed to run query: " . $ex->getMessage());
}

$row = $stmt->fetch();

if($row)
{
die("Email already registered.");
}

$query = "INSERT INTO users (
username,
password,
salt,
email
) VALUES (
:username,
:password,
:salt,
:email
)
";

$salt = dechex(mt_rand(0, 2147483647)) . dechex(mt_rand(0, 2147483647));


$password = hash('sha256', $_POST['password'] . $salt);

for($round = 0; $round < 65536; $round++)
{
$password = hash('sha256', $password . $salt);
}

$query_params = array(
':username' => $_POST['username'],
':password' => $password,
':salt' => $salt,
':email' => $_POST['email']
);


if (empty($errors)) { /********* EDITS ***********/

try
{
$stmt = $db->prepare($query);
$result = $stmt->execute($query_params);
}
catch(PDOException $ex)
{

die("Failed to run query: " . $ex->getMessage());
}

}/********* EDITS ***********/

header("Location: *login page*");
die("Redirecting to *login page*");
}
?>

Это далеко не оптимально, но я не могу переписать весь ваш код.
Главное замечание заключается в использовании openssl_random_pseudo_bytes вместо ваших собственных вещей, чтобы восполнить соль, или вы можете просто взять IV из семейства функций mcrypt.

0

Другие решения

Попробуй это :-

if(""== trim($_POST['password']))
{
die("Please enter a password");
}
else //password is entered
{
//your code
}
0

По вопросам рекламы [email protected]