Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 获取用户详细信息并将其存储在数据库中_Php_Mysql_Session - Fatal编程技术网

Php 获取用户详细信息并将其存储在数据库中

Php 获取用户详细信息并将其存储在数据库中,php,mysql,session,Php,Mysql,Session,我遵循PHPAcademy的注册和登录系列,构建了一个登录系统。我想增加一个公告系统。我已经构建了它,但是我无法在表中存储登录用户的名字和姓氏。将插入消息和日期,但不会插入用户数据 用户名、性别、部门等用户详细信息都存储在另一个表中,但我只需要两个字段——名字和姓氏,所以我考虑使用会话变量。另外,我在加入的概念上很弱,有人能解释一下吗?我有一种奇怪的感觉,使用它可以做到,但我不知道如何做到,我尝试了两次,但都失败了(可能是因为我不了解这个概念) 请帮忙。代码如下: <?php

我遵循PHPAcademy的注册和登录系列,构建了一个登录系统。我想增加一个公告系统。我已经构建了它,但是我无法在表中存储登录用户的名字和姓氏。将插入消息和日期,但不会插入用户数据

用户名、性别、部门等用户详细信息都存储在另一个表中,但我只需要两个字段——名字和姓氏,所以我考虑使用会话变量。另外,我在加入的概念上很弱,有人能解释一下吗?我有一种奇怪的感觉,使用它可以做到,但我不知道如何做到,我尝试了两次,但都失败了(可能是因为我不了解这个概念)

请帮忙。代码如下:

    <?php
    include $_SERVER["DOCUMENT_ROOT"].'/TestSite/core/init.php';
    faculty_protect_page();
    include $_SERVER["DOCUMENT_ROOT"].'/TestSite/includes/overall/header.php';

    if(empty($_POST)===false) {
        $required_fields = array('announce');
        foreach($_POST as $key=>$value) {
            if(empty($value) && in_array($key, $required_fields) === true ) {
                $errors[] = 'It seems like you have not made any announcement!';
                break 1;
            }
        }
        if(empty($errors) === true ){
            if(strlen($_POST['announce']) < 20) {
                $errors[] = 'Your announcement must be atleast 20 characters long!';
            }
            if(strlen($_POST['announce']) > 250) {
                $errors[] = 'Your announcement cannot be more than 250 characters long!';
            }
        }
    }
?>
<center><h3>Make an announcement</h3></center>
<?php
                if(isset($_GET['success'])===true && empty($_GET['success'])===true) {
                    echo 'You have successfully made an announcement';
                }
                else {
                    if(empty($_POST)=== false && empty($errors)===true) {
                        $announcement = array(
                            'announce'     => $_POST['announce'],
                       //'faculty_fname' => $_SERVER['faculty_fname'] this didn't work
                            );
                        announce($announcement);
                        header('Location: announce.php?success');
                        exit();
                    }
                    else if(empty($errors)===false) {
                        echo output_errors($errors);
                    }

    ?>
    <form action="" method="POST">
        <br/>
        <input type="text" class="span12" name="announce" maxlength="250"/><br/><br/>
        <center><input type="submit" class="btn btn" value="Announce" /></center>     
    </form>
<?php
}
include $_SERVER["DOCUMENT_ROOT"].'/TestSite/includes/overall/footer.php'; ?>
有人能帮我在表格中插入教职员工的名字吗?我花了一整天的时间在这上面,但没有成功


谢谢

如果要在“通知”记录中存储用户信息,请存储用户表中与宣布通知的用户对应的主键。 您的notices表必须有一个user_id列,存储在该列中的id通常被称为外键。这样,您就不会在数据库中存储重复的信息。所有特定于用户的信息都已存储在user_表中,因此无需再次将其存储在notices表中,这只是将用户连接到通知的一种方法

要将其应用到当前代码中,您可以执行以下操作

  • 如果要在notices表中插入新通知,首先需要从数据库中检索提交通知的人员的用户记录。如何做到这一点取决于如何构建登录系统,但例如,在登录时,您可以将用户的主键存储在会话中。在提交通知时,从会话中检索用户id并使用它查询数据库。在半伪码中:

    $mysqli = new mysqli("localhost", "root", "", "");
    $user_id = $_SESSION['user_id'];  
    $sql = $mysqli->prepare("SELECT * FROM user_table WHERE user_id = ?");  
    $sql->bind_param("i", $user_id); 
    
  • 现在我们有了登录用户的记录,您可以在notices表中插入通知

    $notice = $_POST['notice'];  
    $user_id = $_SESSION['user_id'];  
    $sql = $mysqli->prepare("INSERT INTO notices ('notice', 'user', 'datetime') VALUES (?,?,NOW())");  
    $sql->bind_param("si", $notice, $user_id);
    

  • 执行查询后,新记录在表NOTIONS的user列中包含user\u id,它对应于user\u表中的主键,在该表中可以找到所有用户规范信息。

    据我所见,您的公告功能有点不明显。在调用函数之前,使用精确的数组键创建一个包含所有所需数据的数组。不要直接内爆$\u POST。另外,您还可以在$\u会话中存储use first和last name。另外,您需要在$\会话中存储唯一的用户ID以查询用户信息。
    $notice = $_POST['notice'];  
    $user_id = $_SESSION['user_id'];  
    $sql = $mysqli->prepare("INSERT INTO notices ('notice', 'user', 'datetime') VALUES (?,?,NOW())");  
    $sql->bind_param("si", $notice, $user_id);