Как проверить обратные отношения в следующей системе - PullRequest
0 голосов
/ 11 ноября 2018

У меня есть две таблицы 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: (Здесь пользователь добавляется путем ввода его идентификатора и пароля, и для каждого пользователя устанавливается сеанс)

<?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, вот основная проблема. Допустим, Алиса вошла в мою систему, и она заходит на страницу save.php, чтобы добавить Bob в мою систему. На этой странице есть кнопка «Сохранить», когда какой-либо зарегистрированный пользователь в моей системе (Alice) пытается добавить другого пользователя (Bob) в мою систему (таблица userdata), в этот момент я хочу проверить это-> Bob уже добавил Alice (когда Боб вошел в систему)? если это так, когда Алиса нажимает кнопку «Сохранить», имя Bob должно быть вставлено в таблицу userdata, а имена Alice и Bob's должны быть написаны красным цветом и отображены пользователю (с помощью запроса select), поскольку они оба добавляются друг другом. Если Alice хочет добавить Bob, но Bob не добавил Alice ранее, то после нажатия кнопки сохранения с помощью Alice имя Bob должно быть вставлено в таблицу userdata и должно отображаться без любой цвет, потому что Bob еще не добавил ее.

Как я могу решить эту проблему, когда пользователь добавляет имя, вы должны проверить, добавлены ли они к оборотной стороне, и в этом случае указать его . Например, если Алиса добавляет Боба, а Боб добавил Алису, вы должны указать это (с некоторым символом)?

 <?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 стол

users

здесь userdata таблица, содержащая сумматор и добавленные столбцы

adder    added
1         2
1         3

первый ряд Alice добавлено Bob второй ряд Alice добавлено John userdata table

1 Ответ

0 голосов
/ 11 ноября 2018

Для начала вы должны иметь уникальный идентификатор пользователя, чтобы понять, был ли он добавлен или нет (например, электронная почта)

тогда (просто не использовать в реальных проектах)

save.php:

"SELECT `id` from `users` where `email` = '$email'";

если пользователь существует, сделайте это (поскольку пользователь может быть создан существующим пользователем, у вас уже есть его идентификатор (например, в $_SESSION['id'])):

"SELECT * from `userdata` where `edder` = '$id' AND `edded` = '$_SESSION['id']'";

если запись существует, это означает, что они добавляются в обратную сторону.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...