Информация не вставляется в базу данных (что не так с моим кодом?)

Я пытаюсь сделать регистрационную форму с подтверждением. Я добавил немного php-кода в мой html и css код. Все хорошо. Он проверяет, существует ли пользователь или адрес электронной почты. Если проверка пройдена, данные будут сохранены в базе данных, но они не будут работать. Я не знаю в чем проблема.

Вот мой код:

<?php

if (isset($_POST['submit'])) {
require 'connect.php';

$username       = ($_POST['username']);
$email          = ($_POST['email']);
$password       = ($_POST['password']);
$passwordconf   = ($_POST['passwordconf']);

$errorfields    = "<p class='errormsg'>Please fill out all the fields!</p>";

if (empty($username) || empty($email) || empty($password) ||
empty($passwordconf))
{
echo "$errorfields";
}

$check = mysqli_query($con, "SELECT username FROM users WHERE
username='$username' ");

if (mysqli_num_rows($check) >= 1) {
echo "username already exists"."</br>". "</br>";
}

$erroremail     = "<p class='errormsg'>Email is not in name@domain format! </p>";
$regex          = "/^[a-z0-9]+([_.-][a-z0-9]+)*@([a-z0-9]+([.-][a-z0-9]+)*)+.[a-z]{2,}$/i";

if(!preg_match($regex, $email))
{
echo "$erroremail";
}

$errorpassword  = "<p class='errormsg'>You passwords do not match!</p>";

if ($password != $passwordconf)
{
echo "$errorpassword";
}

$check = mysqli_query($con, "SELECT email FROM users WHERE email='$email' ");

if (mysqli_num_rows($check) >= 1) {
echo "email already exists";
}

} else {

$con = mysqli_connect('localhost' , 'root', '');

if(!$con) {
echo "not connected";
}

if (!mysqli_select_db($con, "new accounts")) {
echo "database not selected";
}

$username= (isset($_POST['username']));
$email= (isset($_POST['email']));
$password= (isset($_POST['password']));

mysqli_query($con, "INSERT INTO users (username, email, password) VALUE ('$username', '$email', '$password')") or die ( "cannot insert in databse");
}

?>

Во-первых, я написал $username = ($_POST['username'])
тогда это показывает мне ошибку, поэтому я изменяю это на это. он не показывал мне ошибок, но ничего не вставлял в базу данных. Может кто-нибудь сказать мне, как я могу решить эту проблему? Благодарю.

1

Решение

Краткий ответ:

Ваш код вставляет логические значения результата из isset()что, конечно, не ваше намерение. Удалить isset() позвонить и объявить представленные значения.

ТЕМ НЕ МЕНИЕ, с вашим кодом можно многое исправить.

Это так же щедро, как я хочу быть для блока кода с таким количеством проблем:

<?php
if (isset($_POST['submit']) {
if (empty($_POST['username']) || empty($_POST['email']) || empty($_POST['password']) || empty($_POST['passwordconf'])) {
$error = "<p class='errormsg'>Please fill out all the fields!</p>";
} elseif ($_POST['password'] !== $_POST['passwordconf']) {
$error  = "<p class='errormsg'>You passwords do not match!</p>";

} elseif (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL))
$error = "<p class='errormsg'>Email is not in name@domain format!</p>";
} else {
require 'connect.php'; // implement object-oriented $con variable
if ($stmt=$con->prepare("SELECT * FROM users WHERE username=?")) {
if ($stmt->bind_param('s', $_POST['username']) && $stmt->execute() && $stmt->store_result()) {
if ($stmt->num_rows) {
$error = "<p class='errormsg'>Username already exists</p>";
}
} else {
$error = "<p class='errormsg'>Username Check Statement Error</p>"; // $stmt->error
}
$stmt->close();
} else {
$error = "<p class='errormsg'>Username Check Prepare Error</p>"; // $con->error;
}
if ($stmt=$con->prepare("SELECT * FROM users WHERE email=?")) {
if ($stmt->bind_param('s', $_POST['email']) && $stmt->execute() && $stmt->store_result()) {
if ($stmt->num_rows) {
$error = "<p class='errormsg'>Email already exists</p>";
}
} else {
$error = "<p class='errormsg'>Email Check Statement Error</p>"; // $stmt->error
}
$stmt->close();
} else {
$error = "<p class='errormsg'>Email Check Prepare Error</p>"; // $con->error;
}
}
if ($error) {
echo $error;
} else {
// Perform your insert with $_POST['username'], $_POST['email'], $_POST['password'] , but DO NOT EVER, EVER, EVER store raw passwords...
// This subject is too extensive and gathers too much scrutiny for me to dare to post any hard-fast lines of code on StackOverflow
// Every minute that you spend researching this topic is time well spent.
// Not learning about cryptography and password security will lead to many, many unfortunate events for you and your users.
}
}
?>

Итак, вообще говоря:

  1. Используйте готовые заявления с заполнителями в целях безопасности.
  2. Реализуйте проверку ошибок, чтобы вы могли быстро отлаживать проблемы.
  3. Правильно вкладывайте код, чтобы легко следовать логике кода.
  4. Используйте валидатор электронной почты, а не регулярное выражение для стабильности.
  5. Выполняйте более простые проверки перед более дорогими (например, вызовы запросов)
  6. Подключайтесь к своей базе данных только при необходимости и повторно используйте одно и то же соединение для всех запросов.
  7. Система входа / регистрации, если все сделано правильно, не является тривиальной операцией; исследуйте множество ресурсов и определите лучший метод для вашей версии php и внедрите наилучшие возможные методы шифрования и хранения.
1

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

Других решений пока нет …

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