【问题标题】:PHP: Inserting date into a tablePHP:将日期插入表格
【发布时间】:2014-08-17 11:51:52
【问题描述】:

我的表“列表”包含一个字段:“日期时间”类型的“考试日期”。 该表中的日期按以下结构格式化:“2014-08-31 21:45:47”(yyyy-mm-dd hh:ii:ss)。 在我的输入表单中,日期按以下方式分配:

<input id="exam_date" name="exam_date" type="datetime" placeholder="<?php echo date('d-m-y H:i:s'); ?>">

为了查看我添加到代码中的值分配:

$myDate = trim($_POST['exam_date']);
echo trim($_POST['exam_date']);

在显示屏上,我看到按以下结构插入的日期:31-08-14 21:45:47。 我将新值插入表的代码是:

<?php
date_default_timezone_set('xxx');
$dbcon = @mysqli_connect ('xxx', 'xxx', 'xxx', 'test') OR die ('Could not connect to MySQL: ' . mysqli_connect_error () ); 
mysqli_set_charset($dbcon, 'utf8');
if (isset($_POST['exam_date']))
{
 $myDate = trim($_POST['exam_date']);
 echo $myDate ;
 $q = "INSERT INTO list (exam_date) VALUES ($myDate)"; 
 $result = @mysqli_query ($dbcon, $q); 
 if($result)
 {
   echo "record added";
 }
 else
 {
   echo "no record added !";
 }
}
?>
<form action="add_date.php" method="post">
<input id="exam_date" name="exam_date" type="datetime" placeholder="<?php echo date('y-m-d H:i:s'); ?>">
<input id="submit" type="submit" name="submit" value="Register">
</form>

当我运行它时,我得到:“没有添加记录”,当我检查表格时,我发现确实没有添加任何记录。 我相信无法添加记录的原因是日期结构的差异:表的结构和输入的结构。 我可以将表中的日期结构更改为“dd-mm-yy hh:ii:ss”吗? 有没有办法将输入结构从“dd-mm-yy hh-ii-ss”转换为“yyyy-mm-dd hh:ii:ss”? 谢谢!

【问题讨论】:

标签: php datetime


【解决方案1】:

此代码更安全,因为它使用准备好的语句http://php.net/manual/en/mysqli.prepare.php

永远不要相信用户输入的变量!

注意提交按钮上的name="",我们正在检查表单是否已提交

始终正确关闭您的表单inputs/&gt;

时区.. https://www.youtube.com/watch?v=-5wpm-gesOY

如果你想INSERT 用户输入datetime 试试这个:

add_date.php:

<?php
date_default_timezone_set('xxx');
$link = mysqli_connect("localhost", "my_user", "my_password", "db_name");
mysqli_set_charset($link, 'utf8');
if (isset($_POST['register'])) {

    $myDate = $_POST['exam_date'];

    /* check connection */
    if (mysqli_connect_errno()) {
        printf("Connect failed: %s\n", mysqli_connect_error());
        exit();
    }

    if ($stmt = mysqli_prepare($link, "INSERT INTO list (exam_date) VALUES (?)")) {

        /* bind parameters for markers */
        mysqli_stmt_bind_param($stmt, "s", $myDate);

    /* execute query */
    if(mysqli_stmt_execute($stmt)) {
        echo "record added";    
    }
    else {
        echo "no record added !";   
    }
        /* close statement */
        mysqli_stmt_close($stmt);
    }
    /* close connection */
    mysqli_close($link);
}

表格:

<form action="add_date.php" method="post">
<input id="exam_date" name="exam_date" type="datetime" value="<?php echo date('y-m-d H:i:s'); ?>" />
<input id="submit" type="submit" name="register" value="Register" />
</form>

【讨论】:

  • 谢谢,运行您的代码后,我的显示器上没有显示任何内容。"if ($stmt = mysqli_prepare($link, "INSERT INTO list (exam_date) VALUES ($myDate)")) " did' t 产生“真实”我认为...
  • 您没有在查询中使用变量, ?是你的变量,你绑定它..
【解决方案2】:

请告诉我你为什么要使用

date_default_timezone_set()

if you dont need that than just simply run this query 
if ($_SERVER['REQUEST_METHOD']=="POST")
{
    $query="INSERT INTO id (date) Values (now())";
    $result=  mysqli_query($con, $query)or die(mysqli_error($con));
if($result)
{
    echo 'success';
}
else {
    echo 'failed';
}

【讨论】:

  • 忘记删除@,但删除@后行为相同。
  • date_default_timezone_set 用于默认日期值。我不能插入“now()”,因为这是一个计算每月工作时间的页面。用户可能不知道如何将开始日期和小时分配给结束日期+小时,而我现在不知道,所以我通过提供默认日期+小时来提供帮助,这样用户所要做的就是更改给定的日期.如何在我不知道的表中插入日期。你的建议很好,只是我不明白..
【解决方案3】:

感谢所有试图帮助我的人。 我在“youtube”上找到了这段代码:

<!doctype html>
<html lang=en>
<head>
    <title>Insert Date</title>
    <meta charset=utf-8>
</head>
<body>
<?php
    $raw = "2014 08 18 17 45 00"; 
    $xplod = explode(' ', $raw);
    print_r($xplod);
    $string=$xplod[0].'-'.$xplod[1].'-'.$xplod[2].' '.$xplod[3].':'.$xplod[4].':'.$xplod[5];
    echo "<br/>$string";
    $date = date("y-m-d H:i:s", strtotime($string));
    echo "<br/> $date";
    $dbcon = @mysqli_connect ('xxx', 'xxx', 'xxx', 'test') 
        OR die ('Could not connect to MySQL: ' . mysqli_connect_error () ); 
    mysqli_set_charset($dbcon, 'utf8');
    $q = "INSERT INTO list VALUES ('$date')"; 
    $result = @mysqli_query ($dbcon, $q); 
    if ($result)
    {
        echo "record added";
    }
    else
    {
        echo "record not added";
    }
?>
</body>
</html>

对于像我这样的初学者来说,这是令人满意的。

【讨论】:

  • 此代码对SQL注入开放请再看我的回答
  • 无疑是我问题的最终答案。我将我的代码解释为您的代码模式并且它有效。非常感谢 !我还会观看您为时区添加的 youtube 视频。
猜你喜欢
  • 2012-01-01
  • 2012-08-10
  • 1970-01-01
  • 2012-08-20
  • 2011-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多