php - 为什么每次登录后的数据都没有存储在我的数据库中?

标签 php mysql

我正在使用 PDO 和 session 开发登录系统。在成功登录到名为“ session ”的表中后,我试图以随机字符串的形式存储来自每个 session 的数据。 这是我的 config.php 文件:

<?php

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

$dbh = new PDO('mysql:host=localhost;dbname=rineva', 'root', '');

$stmt = $dbh->prepare("SELECT * FROM user;");
$stmt->execute();

$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

foreach ($rows as $row)
{
  echo $row['user_username'];
}

 ?>

我的 functions.php 文件是:

 <?php
  class func
  {
    public static function checkLoginState($dbh)
    {
      if (!isset($_SESSION['id']) || !isset($_COOKIE['PHPSESSID']))
      {
        session_start();
      }
      if (isset($_COOKIE['id']) && isset($_COOKIE['token']) && isset($_COOKIE['serial']))
      {
        $query = "SELECT * FROM sessions WHERE sessions_userid = :user_id AND sessions_token =:token AND sessions_serial =:serial;";

        $id = $_COOKIE['id'];
        $token = $_COOKIE['token'];
        $serial = $_COOKIE['serial'];

        $stmt = $dbh->prepare($query);
        $stmt->execute(array(':user_id' => $user_id, ':token' => $token, ':serial' => $serial));

        $row = $stmt->fetch(PDO::FETCH_ASSOC);

        if ($row['sessions_userid'] > 0)
        {
             if (
               $row['sessions_userid'] == $_COOKIE['user_id'] &&
               $row['sessions_token'] == $_COOKIE['token'] &&
               $row['sessions_serial'] == $_COOKIE['serial']
               )
               if (
                 $row['sessions_userid'] == $_SESSION['user_id'] &&
                 $row['sessions_token'] == $_SESSION['token'] &&
                 $row['sessions_serial'] == $_SESSION['serial']
                 )
                 {
                   return true;
                 }
        }
      }
    }
    public static function createRecord($dbh, $user_username, $user_id)
    {
      $query ="INSERT INTO sessions(sessions_userid, sessions_token, sessions_serial) VALUES (:user_id,:token,:serial) '25/05/2018'";
      $dbh->prepare("DELETE FROM sessions WHERE sessions_userid = :sessions_userid';")->execute(array(''));

      $token = func:: createString(20);
      $serial = func:: createString(20);

      func :: createCookie($user_username, $user_id, $token, $serial);
      func :: createSession($user_username, $user_id, $token, $serial);

      $stmt = $dbh->prepare($query);
      $stmt->execute(array(':user_id' => $user_id, ':token' => $token, ':serial' => $serial));

    }

    public static function createCookie($user_username, $user_id, $token, $serial)
    {
      setcookie('user_id', $user_id, time() + (86400) * 30, "/");
      setcookie('token', $token, time() + (86400) * 30, "/");
      setcookie('serial', $serial, time() + (86400) * 30, "/");
      setcookie('user_username', $user_username, time() + (86400) * 30, "/");
    }

    public static function createSession($user_username, $user_id, $token, $serial)
    {
      if (!isset($_SESSION['id']) || isset($_COOKIE['PHPSESSID']))
        {
          session_start();
        }
        $_SESSION['user_username'] = $user_username;
    }


    public static function createString($len)
    {
      $string ="1lksjrienj4hjtJHBNKq5SWndmrtjihush45bhe0qwsdcnNER56NWMLOIwsQ";
      $s = '';
      $r_new = '';
      $r_old = '';

      for ($i = 1; $i < $len; $i++)
      {
        while ($r_old ==$r_new)
        {
          $r_new = rand(0, 60);
        }
        $r_old = $r_new;
        $s = $s.$string[$r_new];
      }
      return $s;
    }
  }
 ?>

请帮帮我。我附上了我的数据库结构的截图

我的用户数据库

My user database

我的 session 数据库

My sessions database

最佳答案

也许您在插入 mysql 数据库后忘记提交数据。先检查一下

关于php - 为什么每次登录后的数据都没有存储在我的数据库中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50517264/

相关文章:

php - 使用 xpath 获取元描述标签

php - 对两个准备好的语句使用相同的 MySql 连接

mysql - 根据两列的不同组合选择最近的行

c# - 循环只显示一个数据

php - 如何从这个多维数组形成 JSON

php - 使用 phalcon 验证类进行不区分大小写的验证

php - 将列中存储的数据与现有值进行比较

php - 通过 php 表单输入 mysql INT 和 DATE 的空值

mysql - 获取mysql中没有选择列值的列总数

php - 使用 PHP 从文本文件将某些行和字符发送到 MySql