php - 在php中创建基于register的数据库驱动的用户主页

标签 php html css mysql for-loop

我有一个困境,如果您有任何见解,我希望得到您的帮助。简而言之,我目前正在做一个研究门户类型的元素,我希望它完全由数据库驱动,这样当我注册一个模块时,该特定模块就会出现在用户的个人资料中,因为截至目前,它不会不管是 tom、dick 还是 harry 登录,他们都会看到特定类(class)的相同三个模块。

因此,在注册后,用户会选择一门类(class),相关模块的列表会出现,然后用户会选择他们的模块。从那里,他们的主页将由附加到该模块的 html 和 CSS 代码填充。

有 3 个表与此部分交互。 UserDemo、类(class)和模块。

这是我当前注册为用户时必须执行的代码(必须添加类(class)和模块):

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>

这是我目前的攻击计划:

攻击计划:

  1. 从数据库中选择模块名称、模块描述

  2. 在屏幕上显示

  3. 遍历值并显示

  4. 将 UI 代码复制到 for 循环中

您对这个攻击计划有何看法,或者有人知道实现此目标的替代方法(也许更简单)。

提前感谢您的时间和帮助:)

最佳答案

使用准备好的语句,你很容易受到 sql 注入(inject)的攻击,准备好的语句可以防止这种情况发生。

<?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 (?, ?, ?, ?, ?, ?, ?)"; 

    if($stmt = $conn->prepare($sql)){

       $stmt->bind_param('ssssiis',$fName,$lName,$email,$password,$contentID,'approved',$created_at); //s = string i = int

       /* execute query */
       $stmt->execute();
    }
       /* free results */
       $stmt->free_result();

    $stmt->close();
    
                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();
        }


    }

关于php - 在php中创建基于register的数据库驱动的用户主页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49134832/

相关文章:

php - 从下拉框中的选择返回 mysql 查询

html - 需要一个与图像 slider 重叠的标题 Logo

html - Rails 中的导航菜单

html - Firefox 32.0.1 中的透视跳跃旋转

PHP - 文件获取内容和正确的编码

php - 自动将尾部斜杠添加到 urlencoded url

javascript - jsfiddle 问题 - 保存为 html 时输出不正确显示

javascript - 消息框大小应取决于 jQuery 中的消息大小

css - Ruby On Rails & Flaticon => 如何在 Rails 中导入(使用图标字体)Flaticon 图标?

php - 如何使用 Sencha Touch 2 (Native Packaging) 创建 Widget?