与MySQL PHP的Todolist

时间:2018-09-05 10:07:18

标签: php mysql

我刚刚创建了一个待办事项列表html页面,该页面链接到包含id itemname的数据库并完成。我正在尝试将此表的ID链接到包含ID,用户名和密码的登录表的ID。我可以在用户登录时将用户名传递给主页,但是在待办事项列表中创建项目时如何将用户的相同ID与ID链接起来?这是我的代码 validate.php

$username = $_POST ['username'];
$password = $_POST ['password'];



$s = " select * from usertable1 where username = '$username' ";
$result = mysqli_query($con, $s);
$num = mysqli_num_rows($result);
$error = "username/password incorrect";

if($num == 1 ){
    $row = mysqli_fetch_array($result, MYSQLI_ASSOC);
    if(password_verify($password, $row['password'])){
        $_SESSION['username']= $username;
        header('location:home.php');
    }else{

        header("location: index.php");
    }

}else{
    header("location: index.php");

}



 ?>

todolist.php

<?php
require_once 'init.php';

$itemsQuery = $db ->prepare("
SELECT id, name, done
FROM items
WHERE username = :username
");
$itemsQuery->execute([
  'username'=>$_SESSION ['id']
]);
$items = $itemsQuery->rowCount()? $itemsQuery :[];
foreach ($items as $items ) {
  echo $item['name'], '<br>';
}
 ?>

 <html>
 <head>
   <meeta charset = "utf-8">
   <title> To do</title>
   <link href="https://fonts.googleapis.com/css?family=Open+Sans" rel="stylesheet">
   <link href="https://fonts.googleapis.com/css?family=Shadows+Into+Light+Two" rel="stylesheet">
   <link rel ="stylesheet" href="cool.css">
   <meta name="viewport" content="width=device-width", initial-scale=1.0:>

 </head>
<body>
  <div class ="list">
    <h1 class ="header"> To do.</h1>

    <?php if(!empty($items)):
      ?>
    <ul class="items
    <?php foreach ($items as $item): ?>
        <li>
          <span class="item<?php echo $item['done'] ? ' done' : ''?>"><?php echo $item['name'];?></span>
          <?php if(!$item['done']): ?>
          <a href="mark.php?as=done&item=<?php echo $item['id'];?>" class="done-button"> Mark as done</a>
          <?php endif; ?>
</li>
<?php endforeach; ?>
    </ul>
    </<?php else: ?>
      <p> You haven't added any items yet. </php>
        </<?php endif; ?>

    <form class="item-add" action="add.php" method="post">
      <input type="text" name="name" placeholder="Type a new item here." class="input" autocomplete="off" required>
      <input type="submit" value="Add" class="submit">

    </form>
  </div>

</body>
</html>

init.php

$username = $_POST ['username'];
$password = $_POST ['password'];
$s = " select * from usertable where username = '$username' ";
$result = mysqli_query($db, $s);


if($num == 1){
  $_SESSION['username']= $username;
}else{
  die('You are not signed in.');
}

 ?>

1 个答案:

答案 0 :(得分:0)

我的脑海中还有一些额外的想法。

  

项目表: id(主键),名称,用户,完成(单击完成按钮时),创建(获取日期)


  

用户表:ID(主键)用户名,密码

第一种方法:

当用户创建/添加新项目时,来自id表的用户user也将存储到item表的user字段中。

因此,您可以在成功登录后将id之类的登录用户的详细信息保存到session中。


第二种方法: 在这里,您将创建另一个表,其中包含之间的关系 itemuser

  

item_to_user_table: id,item_id(项目表中新添加的项目的ID),user_id(用户表单会话或user表中的ID)

因此,当用户创建/添加新项目时,接下来的过程就会进行

  1. 将新项目插入item表中
  2. 在插入新项目之后,立即使用mysqli_insert_id函数获取项目的最后inserted id

  3. 然后使用步骤2 inserted_iduser_id进入第三张表item_to_user_table

第二种方法的优点: item和关系详细信息将分别存储,因此以后您可以轻松地从item table删除项目,而不会影响user table

缺点:很长,需要一些额外的工作。