Member 13711982 Ответов: 1

Как создать домашнюю страницу пользователя, управляемую базой данных, на основе register in PHP


Я попал в затруднительное положение, и мне очень нужна ваша помощь, если у вас есть хоть какое-то понимание. Короче говоря, в настоящее время я занимаюсь проектом типа учебного портала и хочу, чтобы он полностью управлялся базой данных, чтобы при регистрации на модуль этот конкретный модуль появлялся в профиле пользователя, потому что на данный момент не имеет значения, войдет ли Том, Дик или Гарри, все они видят одни и те же три модуля для конкретного курса.

Таким образом, после регистрации пользователь выбирает курс, появляется список соответствующих модулей, а затем пользователь выбирает свои модули. Исходя из этого, их домашняя страница будет заполнена кодом html &CSS, прикрепленным к этому модулю.

Есть 3 таблицы, которые взаимодействуют с этим разделом. UserDemo, курс и модуль.

Вот код, который я должен сделать с регистрацией в качестве пользователя в настоящее время (курс & модули должны быть добавлены)

accounts\signup.php

<?php 
    include '../inc/db.php';
    include '../inc/functions.php';


    if (isset($_POST['signup'])) {
        $fName = p_s($_POST['fName']);
        $lName = p_s($_POST['lName']);
        $email = p_s($_POST['email']);
        $password = p_s($_POST['password']);
        $rpassword = p_s($_POST['rpassword']);
        $contentID = p_s($_POST['contentID']);
        if (!empty($fName) && !empty($lName) && !empty($email) && !empty($password) && !empty($contentID)) {
            if (strlen($password) === strlen($rpassword)) {

          $options = [
              'cost' => 12,
          ];
          $password = password_hash($password, PASSWORD_BCRYPT, $options);
          $created_at = date('Y-m-d G:i:s');

                $sql = "INSERT INTO usersDemo (fName, lName, email, password, contentID, status, created_at) VALUES ('$fName','$lName', '$email', '$password', '$contentID', 'approved', '$created_at')";
                if (mysqli_query($conn, $sql)) {
                    header('Location: ../signup.php?suc');exit();
                }
            }else{
                header('Location: ../signup.php?fidpass');exit();
            }
        }else{
            header('Location: ../signup.php?fempt');exit();
        }


    }


inc\signup.php


<form action="accounts/signup.php" method="POST">

      <div id="fade-box">
        <h2>Register</h2>
     <div class="form-group">
       <input name="fName" type="text" class="form-control" id="fName" placeholder="Enter your first name" required>
     </div>
     <div class="form-group">
       <input name="lName" type="text" class="form-control" id="lName" placeholder="Enter your last name" required>
     </div>
     <div class="form-group">
       <input name="email" type="email" class="form-control" id="email" placeholder="Email" required>
     </div>
     <div class="form-group">
       <input name="password" type="password" class="form-control" id="password" placeholder="Password" required>
     </div>
     <div class="form-group">
       <input name="rpassword" type="password" class="form-control" id="rpassword" placeholder="Repeat Password" required>
     </div>
     <div class="form-group">
       <input name="contentID" type="text" class="form-control" id="contentID" placeholder="Enter your contentID" required>
     </div>
     <button name="signup" type="submit" class="btn btn-success">Register</button>
     </div>
   </form>



Глобальные функции для проверки входа в систему

function checkIfEmailExist($email){
  global $conn;
  $data[]=array();
  $sql = "SELECT userID FROM usersDemo WHERE email ='$email'";
  $run = mysqli_query($conn, $sql);
  $rows =mysqli_num_rows($run);
  if ($rows == 0) {
    return false;
  }else{
    return true;
  }
}


function checkPassword($email, $password){
  global $conn;
  $sql = "SELECT password FROM usersDemo WHERE email ='$email'";
  $run = mysqli_query($conn, $sql);
  while ($rows = mysqli_fetch_assoc($run)) {
    $hashedDBPass = $rows['password'];
  }
  if (password_verify($password, $hashedDBPass)) {
    return true;
  }else{
    return false;
  }
}


Что я уже пробовал:

Это мой текущий план атаки:


Выберите имя модуля, описание модуля из БД

Дисплей на экране

Итерация по значениям и отображение

Скопируйте код для пользовательского интерфейса в цикл for

Каково было бы ваше мнение об этом плане нападения или кто-нибудь знает альтернативный (и, возможно, более простой) способ его осуществления.

Заранее спасибо за ваше время и помощь :)

1 Ответов

Рейтинг:
1

Patrice T

$sql = "INSERT INTO usersDemo (fName, lName, email, password, contentID, status, created_at) VALUES ('$fName','$lName', '$email', '$password', '$contentID', 'approved', '$created_at')";

Не решение вашего вопроса, а еще одна проблема, которая у вас есть.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь к уязвимости под названием "SQL-инъекция", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа выйдет из строя. Если пользователь вводит имя, например "Брайан О'Коннер", может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция - Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL-инъекция - руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL - OWASP[^]