我有两张table users
以及 userdata
我用以下方法创建了它们:
CREATE TABLE users
(
id INT(6) AUTO_INCREMENT NOT NULL PRIMARY KEY,
name VARCHAR(255),
password VARCHAR(255)
);
以及 userdata
通过这个:
CREATE TABLE userdata
(
adder INT(6) NOT NULL,
added INT(6) NOT NULL,
CONSTRAINT adder_user FOREIGN KEY (adder) REFERENCES users(id),
CONSTRAINT added_user FOREIGN KEY (added) REFERENCES users(id),
PRIMARY KEY (adder, added)
);
我有个登录系统看到了吗 index.php
页面:(此处通过输入用户id添加用户密码,并为每个用户设置会话)
<?php
session_start();
?>
<!DOCTYPE html>
<html>
<head>
<title>
login
</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">
</head>
<body>
<form action="review.php" method="post">
<input type="text" name="id" placeholder="id">
<input type="password" name="password" placeholder="password">
<input type="submit" name="submit" class="btn btn-success">
</form>
</body>
</html>
我已经 review.php
我检查过用户真实性(基本级别)
<?php
session_start();
$connect = mysqli_connect('localhost','root','root','stackoverflow');
if(isset($_POST['submit']))
{
$id = $_POST['id'];
$password = $_POST['password'];
$query = "SELECT `name`,`id`,`password` from `users` where `id` = '$id' and `password` = '$password' ";
$run = mysqli_query($connect,$query);
$row = mysqli_fetch_assoc($run);
if( ($id == $row['id']) && ($password == $row['password']) )
{
// start session with the id of the one who is logged in
// this is the id of the user who is logged in
$_SESSION['id']= $row['id'];
header('location:save.php?id=$id');
}
}
?>
这是 save.php
,这里是主要问题,假设alice登录到我的系统,并且她访问 save.php
要添加的页面 Bob
我的系统。当某个用户在我的系统中登录时,此页上有“保存”按钮( Alice
)尝试添加其他用户( Bob
)进入我的系统( userdata
表),在这一点上,我想检查这个->有 Bob
已添加 Alice
(当鲍勃登录时)?如果是这样,当alice单击save时 Bob
应插入 userdata
表和 Alice
以及 Bob's
名称应该用红色书写,并显示给用户(使用selectquery),因为它们都是相互添加的。如果 Alice
想要添加 Bob
但是 Bob
尚未添加 Alice
单击“保存方式”之前,然后单击“保存方式” Alice
名字 Bob
应插入 userdata
表,并且应显示为不带任何颜色,因为 Bob
还没有加上她。
我如何解决这个问题,当用户添加一个名字,你必须检查他们是否被添加到相反的情况下,并指出它。例如,如果alice加上bob,bob加上alice,你必须指出它(用一些符号)?
<?php
session_start();
$connect = mysqli_connect('localhost','root','root','stackoverflow');
if(isset($_POST['save']))
{
$name = $_POST['name'];
$id = $_SESSION['id'];
$insert = "INSERT INTO `userdata` ('adder','added') values ('$id','$name')";
$query = "SELECT aer.name AS Adder, 'added', aed.name AS added
FROM users aer
INNER JOIN userdata ud ON aer.id = ud.adder
INNER JOIN users aed ON aed.id = ud.added
WHERE
(
SELECT COUNT(*)
FROM userdata uda
WHERE uda.adder = ud.added
AND uda.added = ud.adder
) >= 1";
$run = mysqli_query($connect, $query);
while($row = mysqli_fetch_assoc($run))
{
echo "<div class = 'text text-center' id = 'special'>".$row['Adder']." Added ".$row['added']."</div><br>";
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>save</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">
<link rel="stylesheet" href="style.css">
</head><body>
<div class="container">
<div class="row">
<div class="col-md-6">
<form action="save.php" method="POST">
<input type="text" name="name">
<input type="submit" name="save" value="Save" class="btn btn-success">
</form>
</div>
</div>
</div>
</body>
</html>
``` `users` table
![](https://i.stack.imgur.com/1BDWc.png)
这里是 `userdata` 包含加法器和附加列的表
adder added
1 2
1 3
第一排 `Alice` 补充 `Bob` 第二排 `Alice` 补充 `John` ![](https://i.stack.imgur.com/cDVN2.png)
1条答案
按热度按时间iyfamqjs1#
首先,您必须有一个唯一的用户标识符,以便了解他是否被添加(例如,电子邮件)
然后(例如不用于实际项目)
保存.php:
如果用户存在,则执行此操作(因为用户可以由现有用户创建,所以您已经拥有他的id(在
$_SESSION['id']
例如:如果该记录存在,则表示它们被添加到相反的位置。