Форма отправки неверной информации в базу данных MySQL - PullRequest
0 голосов
/ 01 мая 2010

Я создал форму, которая отправляет данные в базу данных MySQL, но поля «Дата», «Время», «Год» и «Месяц» постоянно возвращаются к одной и той же дате (1 января 1970 г.), несмотря на тот факт, что при отправке информации в базу данных форма отображает текущую дату, время и т. д. для меня. Я уже установил его так, чтобы поля времени и даты автоматически отображали текущее время и дату. Может кто-нибудь, пожалуйста, помогите мне с этим.

Форма:

    <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>

альтернативный текст http://i42.tinypic.com/2ns4755.jpg

По какой-то причине сообщения отправляются без отметки времени и возвращаются к отметке времени по умолчанию.

Ответы [ 4 ]

1 голос
/ 01 мая 2010

Похоже, что ваша форма дает вашей базе данных очень мало "Тиков". Обратите внимание, что у вас есть с именами = "date" и id = "date" три раза. Это, скорее всего, ваша проблема. Измените эти имена и идентификаторы, используйте месяц, год, дату (в соответствии с вашей «обратной передачей»).

0 голосов
/ 01 мая 2010

Возможно, strtotime не сможет распознать формат, в котором вы отправляете дату.

Попробуйте классический YYYY/MM/DD формат:

 $timestamp = strtotime("$year/$month/$date $time");
0 голосов
/ 01 мая 2010

У вас есть три текстовых поля с именем 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 голосов
/ 01 мая 2010

Похоже, strtotime не понимает формат, который вы ему подаете.
Вместо этого используйте mktime.

В любом случае, вы всегда должны отлаживать свой код, то есть распечатать запрос, чтобы увидеть, если что-то пойдет не так.

Или рассмотрите возможность использования поддерживаемого mysql типа colymn, date или datetime

Вы можете быть озадачены unix timestamp, который является просто столбцом типа time и mysql, который является строкой 2010-05-01 00: 00: 00

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...