【问题标题】:HTML datetime to PHP to MySQLHTML 日期时间到 PHP 到 MySQL
【发布时间】:2017-12-16 11:05:30
【问题描述】:

我正在使用 HTML、PHP 和 MySQL 做一个待办事项列表网页,但我无法将日期时间提交到数据库:

HTML:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8" />
  <title>Sign Controller</title>
  <link rel="stylesheet" href="/css/style.css" />
  <script src="http://code.jquery.com/jquery-latest.js"></script>
  <script src="update.js"></script>
</head>
<body>
  <!--MAIN CONTENT HERE-->
  <div class="container">
    <form id="controller" action="php/update.php" method="post">
      <h3>Sign display controller</h3>
      <h4>Event Controller</h4>
      <fieldset>
        <input placeholder="sign ID" type="text" name="sign_Name" tabindex="1" required autofocus/>
      </fieldset>
      <h5>Event Start</h5>
      <fieldset>
        <input type="datetime-local" name="time_eventStart" tabindex="2" required/>
      </fieldset>
      <h5>Event End</h5>
      <fieldset>
        <input type="datetime-local" name="time_eventEnd" tabindex="3" required/>
      </fieldset>
      <fieldset>
        <input placeholder="Event source" type="text" name="event_Source" tabindex="4"/>
      </fieldset>
      <fieldset>
        <input placeholder="Idle source" type="text" name="idle_Source" tabindex="5"/>
      </fieldset>
      <button type="submit">Update</button>
    </form>
  </div>
</body>
</html>

PHP:

<?php
$servername = "localhost";
$username = "root";
$password = "root";
$dbname = "projectSS";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
$sign_Name = $_POST["sign_Name"];
$event_Source = $_POST["event_Source"];
$idle_Source = $_POST["idle_Source"];
$time_eventStart = $_POST["time_eventStart"];
$time_eventEnd = $_POST["time_eventEnd"];

$sql = "INSERT INTO display (sign_Name,event_timeStart,event_timeEnd,event_Source,idle_Source)
VALUES ('$sign_Name','$time_eventStart','$time_eventEnd','$event_Source','$idle_Source')";

if ($conn->query($sql) === TRUE) {
    echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}

$conn->close();
?>

我很难处理 datetime-local 类型,而且我是编程新手。

【问题讨论】:

  • 你现在遇到了什么错误?
  • mysql 需要YYYY-MM-DD 格式化日期。确保您接受该格式的日期或将接受日期的格式更改为 php 中的YYYY-MM-DD。
  • 由于 IE、Firefox 和 Safari 不支持 datetime-local,因此您需要进行一些严格的数据验证(无论如何您都需要这样做......)并确保它在将其发送到数据库之前的正确格式。并且你需要使用prepared statements来避免sql注入。
  • 查看参数化查询
  • 我回显了所有 $_POST 但什么也没收到

标签: php html mysql datetime


【解决方案1】:

datetime-local 它考虑了 24 小时格式,因此如果您选择 07/12/2017 12:00 AM 它会发布 2017-07-12T00:00。

在插入查询中,只需将发布的值放入您的查询中。例如

$_POST['time_eventStart'].

此外,如果您将日期时间打印到您的输入 echo 发布值。例如

&lt;input type="datetime-local" name="time_eventStart" value="&lt;?php echo $_POST['time_eventStart']; ?&gt;" tabindex="2" required="" /&gt;

【讨论】:

    【解决方案2】:

    试试这样的

    $date = '2014-06-06 12:24:48';
    echo date('d-m-Y (H:i:s)', strtotime($date));

    然后保存。

    【讨论】:

    • 请在您的答案中添加解释。
    【解决方案3】:

    只需按照mysql标准更改日期时间格式

    如果您的列 datatype 是 date 下面使用

    $time_eventStart = date('Y-m-d',strtotime($_POST["time_eventStart"]));
    $time_eventEnd = date('Y-m-d',strtotime($_POST["time_eventEnd"]));
    

    如果您的列 datatype 是下面使用的datetime

    $time_eventStart = date('Y-m-d H:i:s',strtotime($_POST["time_eventStart"]));
    $time_eventEnd = date('Y-m-d H:i:s',strtotime($_POST["time_eventEnd"]));
    

    【讨论】:

    • 我使用您的解决方案,但值错误我输入 07/12/2017 12:00 AM 但数据库收到 1970-01-01 00:00:00
    • 只需先转换您的日期,然后将其传递给日期函数,如下所示 $tmp = str_replace('/','-','07/12/2017 11:00 AM'); $time_eventStart = date('Y-m-d H:i:s',strtotime($tmp));
    • 如果我使用字符串没问题,但我想使用我在 html $_POST["time_eventStart"] 中选择的日期时间
    【解决方案4】:

    更改您的查询。您的查询未执行。

    试试这个:

    $sql = "INSERT INTO display (sign_Name,event_timeStart,event_timeEnd,event_Source,idle_Source)
    VALUES ('".$sign_Name."','".$time_eventStart."','".$time_eventEnd."','".$event_Source."','".$idle_Source."')";
    

    【讨论】:

    • 这将产生与 OP 已有的完全相同的字符串。除非你改变了除了字符串连接之外的任何其他东西......
    • @jeroen 也是单个配额内的物质和变量,被视为名称,不会采用该变量的值。
    • 但是 OP 使用双引号。单引号在 mysql 中的值的内部和字符串的一部分。
    • @CodeLღver 你的回答没问题。
    • @LDTuan 您需要在将数据发送到数据库之前验证并重新格式化数据。
    猜你喜欢
    • 2011-04-15
    • 2014-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-03
    • 2019-01-13
    • 2011-08-25
    • 1970-01-01
    相关资源
    最近更新 更多