Сохранять значения входов на POST PHP, когда поля недействительны - PullRequest
0 голосов
/ 14 апреля 2020

Я пишу страницу регистрации, где электронное письмо предварительно вводится во вход. Это делается с помощью JS, который идентифицирует электронную почту пользователя по URL, а затем устанавливает значение этого элемента ввода. Это хорошо работает; однако, если пользователь выполняет какой-либо тип ошибки регистрации (а именно, если пароли не совпадают), форма выбрасывает ошибки, но очищает поля. Это создает проблему для предварительного заполнения электронной почты, поскольку предыдущие вводы стираются. Мне интересно, есть ли обходной путь, чтобы ценность электронной почты осталась. Я прикрепил свои файлы ниже. Любая помощь с благодарностью! Большое спасибо!

регистрация. php

<?php include('server.php') ?>

<!DOCTYPE html>
<html>
<head>
  <title>Register</title>
  <link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
  <div class="header">
    <h2>Register</h2>
  </div>

  <form method="post" action="register.php">
    <?php include('errors.php'); ?>
    <div hidden class="input-group">
      <label>Username</label>
      <input type="text" name="username" value="Cop First User">
    </div>
    <div class="input-group">
      <label>Email</label>
      <input type="email" name="email" id="email1" value="<?php if(isset($_POST["UserName"])) echo $_POST["UserName"]; ?>" disabled>
    </div>
        <div hidden class="input-group">
      <label>Email</label>
      <input type="email" name="email" id="email" value="<?php if(isset($_POST["UserName"])) echo $_POST["UserName"]; ?>">
    </div>
    <div class="input-group">
      <label>Password</label>
      <input type="password" name="password_1">
    </div>
    <div class="input-group">
      <label>Confirm password</label>
      <input type="password" name="password_2">
    </div>
    <div class="input-group">
      <button type="submit" class="btn" name="reg_user">Register</button>
    </div>
  </form>
</body>
<script
  src="https://code.jquery.com/jquery-3.4.1.js"
  integrity="sha256-WpOohJOqMqqyKL9FccASB9O0KwACQJpFTUBLTYOVvVU="
  crossorigin="anonymous">
</script>
<script type='text/javascript' src="fillEmail.js"></script>
</html>

fillEmail. js

$(document).ready(function() {
    var link = window.location.href;

    var emailIndex = link.indexOf("email");

    if(emailIndex != -1) {
    link = link.substring(emailIndex + 6);
    } else {
        link = "";
    }

    document.getElementById("email").value = link;
    document.getElementById("email1").value = link;
});

сервер. php

<?php
session_start();

// initializing variables
$username = "";
$email = "";
$errors = array(); 

// connect to the database
$db = mysqli_connect('localhost', 'root', '', 'registration');

// REGISTER USER
if (isset($_POST['reg_user'])) {
  // receive all input values from the form
  $username = mysqli_real_escape_string($db, $_POST['username']);
  $email = mysqli_real_escape_string($db, $_POST['email']);
  $password_1 = mysqli_real_escape_string($db, $_POST['password_1']);
  $password_2 = mysqli_real_escape_string($db, $_POST['password_2']);

  // form validation: ensure that the form is correctly filled ...
  // by adding (array_push()) corresponding error unto $errors array
  if (empty($username)) { array_push($errors, "Username is required"); }
  if (empty($email)) { array_push($errors, "Email is required"); }
  if (empty($password_1)) { array_push($errors, "Password is required"); }
  if ($password_1 != $password_2) {
    array_push($errors, "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 email='$email' LIMIT 1";
  $result = mysqli_query($db, $user_check_query);
  $user = mysqli_fetch_assoc($result);

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

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

    $query = "INSERT INTO users (username, email, password) 
              VALUES('$username', '$email', '$password')";
    mysqli_query($db, $query);
    $_SESSION['username'] = $username;
    $_SESSION['success'] = "You are now logged in";
    header('location: index.php');
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...