【问题标题】:Form Submitting Incorrect Information to MySQL Database向 MySQL 数据库提交错误信息的表单
【发布时间】:2019-07-25 11:08:34
【问题描述】:

我创建了一个将数据提交到 MySQL 数据库的表单,但日期、时间、年份和月份字段不断恢复到完全相同的日期(1970 年 1 月 1 日),尽管当我将信息提交到数据库时该表格向我显示当前日期、时间等。我已经设置了它,以便时间和日期字段自动显示当前时间和日期。有人可以帮我解决这个问题。

表格:

    <html>

<head>
<title>Ultan's Blog | New Post</title>
<link rel="stylesheet" href="css/newposts.css" type="text/css" />
</head>

<body>
<div class="new-form">
<div class="header">
<a href="edit.php"><img src="images/edit-home-button.png"></a>
</div>
<div class="form-bg">
<?php
if (isset($_POST['submit'])) {

    $month = htmlspecialchars(strip_tags($_POST['month']));
    $date = htmlspecialchars(strip_tags($_POST['date']));
    $year = htmlspecialchars(strip_tags($_POST['year']));
    $time = htmlspecialchars(strip_tags($_POST['time']));
    $title = htmlspecialchars(strip_tags($_POST['title']));
    $entry = $_POST['entry'];

        $timestamp = strtotime($month . " " . $date . " " . $year . " " . $time);

    $entry = nl2br($entry);

    if (!get_magic_quotes_gpc()) {
        $title = addslashes($title);
        $entry = addslashes($entry);
    }

    mysql_connect ('localhost', 'root', 'root') ;
    mysql_select_db ('tmlblog');

$sql = "INSERT INTO php_blog (timestamp,title,entry) VALUES ('$timestamp','$title','$entry')";

    $result = mysql_query($sql) or print("Can't insert into table php_blog.<br />" . $sql . "<br />" . mysql_error());

    if ($result != false) {
        print "<p class=\"success\">Your entry has successfully been entered into the blog. </p>";
    }

    mysql_close();
}
?>

<?php
$current_month = date("F");
$current_date = date("d");
$current_year = date("Y");
$current_time = date("H:i");
?>

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">

<input type="text" name="month" value="<?php echo $current_month; ?>" />
<input type="text" name="date" value="<?php echo $current_date; ?>" />
<input type="text" name="year" value="<?php echo $current_year; ?>" />


<input type="text" name="time" id="time" size="5"value="<?php echo $current_time; ?>" />

<input class="field2" type="text" id="title" value="Title Goes Here." name="title" size="40" />

<textarea class="textarea" cols="80" rows="20" name="entry" id="entry" class="field2"></textarea>

<input class="field" type="submit" name="submit" id="submit" value="Submit">

</form>
</div>
</div>
 </div>
 <div class="bottom"></div>
 <!-- //End Wrapper!-->  
</body>

</html>

</html>

由于某种原因,提交的帖子没有时间戳,并且正在恢复为默认时间戳。

【问题讨论】:

    标签: php mysql forms


    【解决方案1】:

    听起来您的表单为您的数据库提供了非常少的“滴答声”。请注意,您有一个 with name="date" 和 id="date" 三次。这很可能是您的问题。更改这些名称和 ID,使用月份、年份、日期(根据您的“回发”)。

    【讨论】:

    • 我已经更新了这个问题,请查看新信息...请帮助。
    【解决方案2】:

    您有三个名为 date 的文本框。由于未设置$_POST['month']$_POST['year']strtotime() 无法找出正确的时间戳,SQL 查询如下所示:

    INSERT INTO php_blog (timestamp,title,entry) VALUES ('','Title Goes Here.','')
    

    将输入元素的名称更改为您的 PHP 代码所期望的名称:

    <input type="text" name="month" value="<?php echo $current_month; ?>" />
    <input type="text" name="date" value="<?php echo $current_date; ?>" />
    <input type="text" name="year" value="<?php echo $current_year; ?>" />
    

    完成此操作后,strtotime() 将能够解析日期并将正确的值插入到查询中。

    INSERT INTO php_blog (timestamp,title,entry) VALUES ('1272738360','Title Goes Here.','')
    

    【讨论】:

    • 我已经更新了这个问题,请查看新信息...请帮助。
    • 但是您没有修复表单。修复它后,我在我的机器上运行了你的代码并生成了正确的时间戳。
    • 我没有修复这里的代码,我添加了一张图片,显示它如何提交时间戳“0”。我在我的电脑上修复了代码。我已经更新了表单,但它仍然没有以正确的时间戳提交到我的博客。
    • 我重写了整个页面,但包含了您的解决方案,这解决了问题。谢谢迈克!
    【解决方案3】:

    可能是strtotime 无法识别您提交日期的格式。

    尝试经典的YYYY/MM/DD 格式:

     $timestamp = strtotime("$year/$month/$date $time");
    

    【讨论】:

    • 我已经更新了这个问题,请查看新信息...请帮助。
    • @ThatMacLad 是的,1970 年 1 月 1 日是时间戳 0。您是否尝试过我的建议或其他建议之一?
    • 我已经尝试了之前的所有建议。您的建议似乎将默认时间戳设置为 2010 年 7 月 23 日。
    • @ThatMacLad 可能是strtotime 错误地解释了输入。最安全的方法是上校 Shrapnel 概述的mktime
    • @ThatMacLad 你在 7 月 23 日得到什么输入数据?
    【解决方案4】:

    看起来 strtotime 不理解您提供给它的格式。
    请改用mktime

    无论如何,您必须始终调试您的代码,即打印出查询以查看是否有任何问题。

    或者考虑使用mysql支持的类型colymn,date或者datetime

    您可能会混淆 unix timestamp,它只是数字和 mysql 时间戳类型列,它是 2010-05-01 00:00:00 的字符串

    【讨论】:

    • 我已经尝试过了,但现在它仍然显示当前日期和时间,但提交为 2010 年 7 月 23 日。
    • @ThatMacLad 您的数据库中有什么类型的时间戳字段?如果不是int,则不应在此处存储 unix 时间戳
    • 我已经更新了这个问题,请查看新信息...请帮助。
    猜你喜欢
    • 1970-01-01
    • 2021-08-15
    • 2015-10-24
    • 2015-10-17
    • 1970-01-01
    • 1970-01-01
    • 2011-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多