Код здесь:
<?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 |
+----+----------+---------------------+------+----------+---------------------+------------+
Причиной проблемы является то, что вы вставляете значения из пустых полей в свою базу данных:
"INSERT INTO users (username, email, password)
VALUES('$username', '$email', '$password')";
Однако $username
, $email
и $password
не объявляются в коде до этого момента. Переменные, которые вы заполнили ранее, - это $rusername
, $remail
и $rpassword
. Вы должны использовать их в качестве входных данных для вашего запроса.
ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);