我按照寄存器&来自PHPAcademy的登录系列和我构建了一个登录系统。我想为它添加一个公告系统。我已经构建了它,但我无法存储登录表中的用户的名字和姓氏。消息和日期将被插入,但不是userdata。
用户详细信息如name,sex,dept都存储在其他表中,但我只想要两个字段 - 名字和姓氏,所以我想到了使用会话变量。此外,我在JOIN概念中很弱,任何人都可以解释我,我有一种奇怪的感觉,可以用它来完成,但我不知道如何,我尝试了两次但失败了(也许是因为我没有得到概念)
请帮忙。以下是代码:
<?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'; ?>
这是放在函数文件中的announce函数(init.php需要):
function announce($announcement) {
array_walk($announcement, 'array_sanitize');
$announcement['announce'] = ucfirst($announcement['announce']);
$fields = '`' . implode('`, `', array_keys($announcement)) . '`';
$data = '\'' . implode('\', \'', $announcement) . '\'';
$one = $_SESSION['faculty_fname'];
mysql_query("INSERT INTO `notices` ($fields, `faculty_fname`, `datetime`) VALUES ($data, '$one', NOW())");
}
任何人都可以帮我在表格中插入教职员工的名字吗?我花了整整一天时间才成功。
谢谢
答案 0 :(得分:0)
如果要将用户信息存储在通知记录中,您希望存储例如用户表中与宣布通知的用户对应的主键。 您的通知表必须具有user_id列,并且将存储在此列中的ID通常称为外键。这样,您就不会在数据库中存储重复的信息。所有用户特定信息都已存储在user_table中,因此无需再将其存储在通知表中,只需将用户连接到通知即可。
要将其用于当前代码,您可以执行以下操作。
如果要在通知表中插入新通知,首先需要从提交通知的人员的数据库中检索用户记录。如何执行此操作取决于您的登录系统的构建方式,例如,在登录时,您可以在会话中存储来自用户的主键。在提交通知时,您从会话中检索用户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);
现在我们有登录用户的记录,您可以在通知表中插入通知
$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);
执行查询后,新记录在表格通知的用户列中包含user_id,对应于user_table中可以找到所有用户特定信息的主键。