php - 通过 php 将数据插入 MySQL,并指定过期日期

标签 php html mysql database mysqli

所以这是我的问题,我想通过 HTML 和 PHP 在我的数据库表中添加特定行的到期日期,但我不知道出了什么问题。由于某种原因,它在时间用完时不会删除特定行。

是否可以向数据库添加一些内容,例如,在 php 中在一列中引入过期时间? 我刚刚开始使用 PHP MySQLi 交互,因此代码可能很糟糕!

HTML:

<div class="modal fade" id="addModal" role="dialog">
   <div class="modal-dialog">
      <div class="modal-content">
         <div class="modal-header">
            <h4 class="modal-title">VIPS</h4>
         </div>
         <div class="modal-body">
            <div class="container">
               <form class="form-horizontal" action="insert.php" method="post" onsubmit="setTimeout('location.reload()', 10);">
                  <div class="form-group">
                     <label class="control-label col-sm-2" for="full name">SteamID</label>
                     <input class="form-control" type="text" id="identity" name="identity" placeholder="SteamID" ng-model="newUser.fullname"/>
                  </div>
                  <div class="form-group">
                     <label class="control-label col-sm-2" for="full name">Name</label>
                     <input class="form-control" type="text" placeholder="Name" id="Name" name="name" ng-model="newUser.fullname"/>
                  </div>
                  <div class="form-group">
                     <label class="control-label col-sm-2" for="full name">immunity</label>
                     <input class="form-control" type="text" id="immunity" name="immunity" placeholder="Imunidade" ng-model="newUser.fullname"/>
                  </div>
                  <div class="form-group">
                     <label class="control-label col-sm-2" for="full name">Time</label>
                     <select id="time" name="time" data-plugin-selectTwo class="form-control populate">
                        <optgroup label="Staff">
                           <option value="1">1 minute</option>
                           <option value="2">2 minute</option>
                        </optgroup>
                     </select>
                  <div class="form-group">
                     <label class="control-label col-sm-2" for="full name">Flags</label>
                     <select id="flags" name="flags" data-plugin-selectTwo class="form-control populate">
                        <optgroup label="Staff">
                           <option value="zo">Founder</option>
                           <option value="abcdefghjkp">Admin</option>
                           <option value="abcdfgjkq">Mod</option>
                        </optgroup>
                     </select>
                     <div class="modal-footer">
                        <button class="btn btn-primary" type="submit" value="ADICIONAR">Add</button>
                        <button class="btn btn-default" type="button" data-dismiss="modal">Close</button>
                     </div>
                  </div>
               </form>
            </div>

PHP:

<?php

$conn = new mysqli("", "", "", "");

if ($conn->connect_error) {
    die("Connection failed");
} 

// Escape user inputs for security
$identity = mysqli_real_escape_string($conn, $_REQUEST['identity']);
$name = mysqli_real_escape_string($conn, $_REQUEST['name']);
$flags = mysqli_real_escape_string($conn, $_REQUEST['flags']);
$immunity = mysqli_real_escape_string($conn, $_REQUEST['immunity']);
$time=$_POST['time'];

$sql = "SELECT COUNT(*) FROM sm_admins WHERE identity = ('$identity')";
if($count = $conn->query($sql)){

    if($count == 1){
        $sql = "INSERT INTO sm_admins 
                        (identity, name, flags, immunity, '', '', now(), 
                         DATE_ADD(NOW(), INTERVAL time='time' MINUTE)) 
                VALUES ('$identity', '$name', '$flags', '$immunity')";
        if($conn->query($sql)){
            echo "Good Connection";
        }
    }else{
        echo "Identity already exist";
    }
}
// close connection
header('Location: panel.php');
mysqli_close($conn);

?>

最佳答案

您当前的查询是:

$sql = "INSERT INTO sm_admins 
                (identity, name, flags, immunity, '', '', now(), 
                 DATE_ADD(NOW(), INTERVAL time='time' MINUTE)) 
        VALUES ('$identity', '$name', '$flags', '$immunity')";

需要对其进行更改,以便数据库知道您想要什么。由于我没有 sm_admin 表的所有字段名称,我将使用 f1、f2、f3 等,因此您需要替换为适当的字段名称

    $sql = "INSERT INTO sm_admins 
                    (identity, name, flags, immunity, f1, f2, f3, f4, f5 ) 
            VALUES ('$identity', '$name', '$flags', '$immunity', '', '', now(), 
                     DATE_ADD(NOW(), INTERVAL time='time' MINUTE))";

编辑:

您原来的 sql 语句不起作用。上述更正将起作用,但您需要将 f1..f5 更改为相关字段名称。

对于自动删除记录,您可以使用 cronjob 或 mySQL 事件。文档可以在 https://dev.mysql.com/doc/refman/5.7/en/event-scheduler.html 找到。 。 Cronjob 将取决于您的服务器。 这是 mysql 事件时间表的框架 - 阅读文档了解详细信息。

DELIMITER $$
-- SET GLOBAL event_scheduler = ON$$     -- required for event to execute but not create    

CREATE  /*[DEFINER = { user | CURRENT_USER }]*/ EVENT `_u3a_work`.`xx`

ON SCHEDULE
     /* uncomment the example below you want to use */

    -- scheduleexample 1: run once

       --  AT 'YYYY-MM-DD HH:MM.SS'/CURRENT_TIMESTAMP { + INTERVAL 1 [HOUR|MONTH|WEEK|DAY|MINUTE|...] }

    -- scheduleexample 2: run at intervals forever after creation

       -- EVERY 1 [HOUR|MONTH|WEEK|DAY|MINUTE|...]

    -- scheduleexample 3: specified start time, end time and interval for execution
       /*EVERY 1  [HOUR|MONTH|WEEK|DAY|MINUTE|...]

       STARTS CURRENT_TIMESTAMP/'YYYY-MM-DD HH:MM.SS' { + INTERVAL 1[HOUR|MONTH|WEEK|DAY|MINUTE|...] }

       ENDS CURRENT_TIMESTAMP/'YYYY-MM-DD HH:MM.SS' { + INTERVAL 1 [HOUR|MONTH|WEEK|DAY|MINUTE|...] } */

/*[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE]
[COMMENT 'comment']*/

DO
    BEGIN
        (sql_statements)
    END$$

DELIMITER ;

关于php - 通过 php 将数据插入 MySQL,并指定过期日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51461292/

相关文章:

javascript - 在指令中声明范围的方法之间的差异(内部显示的方法)

MySQL日期格式更改

mysql - 为什么这些查询会返回不同的结果?

同一页面上的 Php 邮件表单成功消息

php - Mysqli 多表操作

php - WooCommerce 产品 : Wrong product permalink in custom loop

javascript - 在选择中渲染巨大的列表

javascript - 有没有办法用 JavaScript/CSS 制作 3D 文本效果

css - 完美中心的内容栏,附有左右栏

php - Laravel Query Builder 不会将变量识别为整数并添加引号