Форма отправки показывает пустую запись в MySQL

0

Код здесь:

<?php require_once('verbinding.php') ?>
<html>
<head>
    <title>Blog Arena 2.0</title>
    <link rel="stylesheet" type="text/css" href="css/mooi.css">
</head>
<body>
      <!--- navigatie --->
      <?php include('./includes/navigatie.php') ?>
      <!--- header --->
      <?php include('./includes/header.php') ?>
        <h5> Registeer je nu ! Register now ! I cant choose English or Dutch ! </h5>
        <form action='registersubmit.php' method='post' enctype="multipart/form-data">
              <div class="test">
                  <label>Username</label> <input type='text' name='rusername' value=''><br>
              </div>
              <div class="test">
                  <label>E-mail</label> <input type='text' name='remail' value=''><br>
              </div>
                  <div class="test">
                    <label>Password</label> <input type='password' name='rpassword' value=''><br>
              </div>
              <div class="test">
                  <label>Confirm password</label>
                  <input type="password" name='rpassword_2'>
              </div>
              <div class="test">
                <input type='submit' name='save' class='knop'><br>
              </div>
        </form>
  </body>
</html>

И verbinding.php

<?php
session_start();
//verbinding met de database
$conn = mysqli_connect("localhost", "elly", "elly", "blog");

if (!$conn) {
    die("Er zijn problemen met het verbinden aan de database: " . mysqli_connect_error());
}

//als ik het goed begrijp is Base Url  verwijzing voor verschillende OS-es
//define    ('ROOT_PATH', realpath(dirname(__FILE__)));
define  ('BASE_URL', 'http://localhost/');

/* $query = "SELECT * FROM posts";
$result = $conn->query($query);

if($result ->num_rows > 0){
    echo "We have data";
} else {
    echo "we dont have data";
} */
?>

И скрипт, который запускается при отправке формы:

<?php
session_start();

// initializing variables
$rusername = "";
$remail    = "";

var_dump($_POST);

// connect to the database
$con = mysqli_connect('localhost', 'elly', 'elly', 'blog');

// REGISTER USER
if (isset($_POST['save'])) {
    // receive all input values from the form
    $rusername = mysqli_real_escape_string($con, $_POST['rusername']);
    $remail = mysqli_real_escape_string($con, $_POST['remail']);
    $rpassword_1 = mysqli_real_escape_string($con, $_POST['rpassword_1']);
    $rpassword_2 = mysqli_real_escape_string($con, $_POST['rpassword_2']);

    // form validation: ensure that the form is correctly filled ...
    // by adding (array_push()) corresponding error unto $errors array
    if (empty($rusername)) { echo "Username is required"; }
    if (empty($remail)) { echo "Email is required"; }
    if (empty($rpassword_1)) { echo "Password is required"; }
    if ($rpassword_1 != $rpassword_2) {
        echo "The two passwords do not match";
    }

    // first check the database to make sure
    // a user does not already exist with the same username and/or email
    $user_check_query = "SELECT * FROM users WHERE username='$rusername' OR email='$remail' LIMIT 1";
    $result = mysqli_query($db, $user_check_query);
    $user = mysqli_fetch_assoc($result);

    if ($user) { // if user exists
        if ($user['username'] === $rusername) {
            array_push($errors, "Username already exists");
        }

        if ($user['email'] === $remail) {
            array_push($errors, "email already exists");
        }
    }

    // Finally, register user if there are no errors in the form
    if (count($errors) == 0) {
        $rpassword = md5($rpassword_1);//encrypt the password before saving in the database

        $query = "INSERT INTO users (username, email, password)
                  VALUES('$username', '$email', '$password')";
        mysqli_query($con, $query);
        $_SESSION['username'] = $username;
        $_SESSION['success'] = "You are now logged in";
        header('location: user.php');
    }
}

Я, возможно, привык к большому пространству, которое я трачу 20 минут, пытаясь опубликовать: PI очень новичок в программировании. Я слышу, что в stackoverflow люди сжигают вас, ну, я готов. Вот как я учился.

Моя проблема заключается в том, что если я добавлю пользователя в таблицу пользователей, он станет пустым в базе данных, будет запись, но информация не будет заполнена. Может ли кто-нибудь помочь мне с этим?

Просто, чтобы быть уверенным, что это мой стол:

| users | CREATE TABLE 'users' (
  'id' int(11) NOT NULL AUTO_INCREMENT,
  'username' varchar(255) NOT NULL,
  'email' varchar(255) NOT NULL,
  'role' enum('Author','Admin') DEFAULT NULL,
  'password' varchar(255) NOT NULL,
  'created_at' timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  'updated_at' timestamp NULL DEFAULT NULL,
  PRIMARY KEY ('id')
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1 |

Это вывод таблицы (заметьте, я добавил Elmo сам через терминал:

mysql> select * from users;
+----+----------+---------------------+------+----------+---------------------+------------+
| id | username | email               | role | password | created_at          | updated_at |
+----+----------+---------------------+------+----------+---------------------+------------+
|  1 | elmo     | [email protected] | NULL | elmo     | 2018-07-05 10:23:13 | NULL       |
|  2 |          |                     | NULL |          | 2018-07-06 14:47:04 | NULL       |
|  3 |          |                     | NULL |          | 2018-07-06 14:55:44 | NULL       |
|  4 |          |                     | NULL |          | 2018-07-06 15:27:38 | NULL       |
|  5 |          |                     | NULL |          | 2018-07-06 16:06:01 | NULL       |
|  6 |          |                     | NULL |          | 2018-07-06 16:07:55 | NULL       |
|  7 |          |                     | NULL |          | 2018-07-06 16:17:10 | NULL       |
+----+----------+---------------------+------+----------+---------------------+------------+
  • 2
    Ваш код уязвим для атак SQL-инъекций. Даже экранирование строк не на 100% безопасно. Вы должны использовать параметризованные запросы и подготовленные операторы, чтобы помочь злоумышленникам не скомпрометировать вашу базу данных, используя вредоносные входные значения. bobby-tables.com дает объяснение рисков, а также некоторые примеры того, как написать ваши запросы безопасно, используя PHP / mysqli. Никогда не вставляйте неанизированные данные прямо в ваш SQL.
  • 1
    Я уверен, что это все, потому что вы вставляете переменные, которые даже не существуют. Проверьте имена ваших переменных. Также включите отчеты об ошибках и уведомлениях, чтобы вы могли легче заметить «использование неопределенного». Поместите это в начало вашего скрипта: ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
Показать ещё 3 комментария
Теги:
mysqli

1 ответ

0
Лучший ответ

Причиной проблемы является то, что вы вставляете значения из пустых полей в свою базу данных:

"INSERT INTO users (username, email, password)
VALUES('$username', '$email', '$password')";

Однако $username, $email и $password не объявляются в коде до этого момента. Переменные, которые вы заполнили ранее, - это $rusername, $remail и $rpassword. Вы должны использовать их в качестве входных данных для вашего запроса.

  • 0
    Это бы помогло;) @Codelly, если вопрос не будет закрыт как «опечатка», вы должны принять этот ответ, чтобы мы знали, что вы выполнили свой запрос (добро пожаловать в stackoverflow!).
  • 2
    Я так новичок на этом сайте: D, но так много ответов так быстро: D проверит это прямо сейчас. Уже многому научился! Но смутился, если я отправил, и это оказалось опечаткой. Я вернусь к вам!
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню