проблема с отметкой времени

У меня есть несколько сценариев, и в таблице базы данных я установил значение int (25) и отметку времени

У меня есть сценарий создания темы, а затем я создаю тему, в которой вставляется дата и время в таблицу меток времени (dato).

Но почему-то мой сценарий комментариев не вставляет время: S и то же самое, что я использую: S.

Вот мой сценарий

    if(isset($_POST['opret_kommentar']))
{
 $indhold = $_POST['indhold'];
 $godkendt = "ja";

 $mysql = connect();
 $stmt = $mysql->prepare("INSERT INTO forum_kommentare (fk_forum_traad, brugernavn, indhold, dato, godkendt) VALUES (?,?,?,?,?)") or die($mysql->error);
 $stmt->bind_param('issis', $traadID, $_SESSION['username'], $indhold, $dato, $godkendt) or die($mysql->error);
 $stmt->execute();
 $stmt->close();

 $svar = mysqli_insert_id($mysql); 

 header("location: forum.traad.php?traadID=$traadID&kategoriID=$kategoriID&#$svar");

}

Вот мой сценарий создания темы, чтобы вы могли видеть то же самое, что и я: S

    if(isset($_POST['send'])) {

 $kategoriID = $_GET['kategoriID'];
    $overskrift = $_POST['overskrift'];
    $indhold    = $_POST['indhold'];
 $godkendt   = "ja";

    $mysql = connect();
    $stmt = $mysql->prepare("INSERT INTO forum_traad (overskrift, indhold, fk_forum_kategori, brugernavn, dato, godkendt) VALUES (?,?,?,?,?,?)") or die($mysql->error);
 $stmt->bind_param('ssisis', $overskrift, $indhold, $kategoriID, $_SESSION['username'], $dato, $godkendt) or die($mysql->error);
 $stmt->execute();
 $stmt->close();

 $traadID = mysqli_insert_id($mysql);

  header("location: forum.traad.php?traadID=$traadID&kategoriID=$kategoriID");

}#Lukker isset send

Вот мой SQL

СОЗДАТЬ ТАБЛИЦУ, ЕСЛИ НЕ СУЩЕСТВУЕТ forum_kommentare (id int (11) NOT NULL AUTO_INCREMENT, fk_forum_traad int (11) NOT NULL,
brugernavn text NOT NULL, indhold mediumtext NOT NULL, dato timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENTgodkendtTIMESTAMP (_ 4) НЕ NULL ПО УМОЛЧАНИЮ 'ja',
ПЕРВИЧНЫЙ КЛЮЧ (id)) ENGINE = MyISAM DEFAULT CHARSET = latin1 AUTO_INCREMENT = 4;

--

- Дамп данных для tabellen forum_kommentare


--

- Структур-дамп для таблиц forum_traad

СОЗДАТЬ ТАБЛИЦУ, ЕСЛИ НЕ СУЩЕСТВУЕТ forum_traad (id int (11) NOT NULL AUTO_INCREMENT, overskrift text NOT NULL, indhold mediumtext NOT NULL, fk_forum_kategori int (11) NOT NULL, brugernavn text NOT NULL, dato timestamp NOT NULL ПО УМОЛЧАНИЮ CURRENT_TIMESTAMP ONgodkendtTIMESTAMP при обновлении godkendtTIMESTAMP при обновлении _20 varchar (4) NOT NULL DEFAULT 'ja', PRIMARY KEY (id)) ENGINE = MyISAM DEFAULT CHARSET = latin1 AUTO_INCREMENT = 3;

- - Дамп данных для таблиц forum_traad

Надеюсь, кто-нибудь может мне помочь :/


person Simon    schedule 16.07.2010    source источник


Ответы (2)


Помимо вашего кода, который должен быть правильно отформатирован, чтобы его можно было прочитать, я настоятельно рекомендую вам использовать поле даты MySQL, а не метку времени.

Так что измените этот запрос на этот:

// notice that the date is inserted by MySQL with the NOW() operator
$stmt = $mysql->prepare("INSERT INTO forum_traad (overskrift, indhold, fk_forum_kategori, brugernavn, dato, godkendt) VALUES (?,?,?,?,NOW(),?)") or die($mysql->error);

Почему вам следует использовать поле даты MySQL вместо отметки времени?

Диапазон DATETIME ... от 1000-01-01 00:00:00 до 9999-12-31 23:59:59.

Диапазон TIMESTAMP ... '1970-01-01 00:00:01' UTC до '2038-01-19 03:14:07'

Мало того, у вас также есть множество встроенных функций MYSQL для работы с DATETIME, например INTERVAL, что позволит вам делать великие дела.

// easy pull all comments values from within a range
SELECT * FROM your_table
WHERE your_date_field = DATE_SUB('2001-01-01 12:12:12' + INTERVAL 15 DAYS;

Если вам действительно нужно работать с отметками времени на PHP, вы можете получить их в реальном времени на SQL следующим образом:

// converts a DATETIME field real time to timestamps
SELECT UNIX_TIMESTAMP(your_date_field)
FROM your_table (...)
And when you pull them out just format them anyway you like using strftime. Example bellow.

// pull a date from MySQL and format them to a custom format
// %A -> full weekday | %B -> full month name | %d -> month day | %Y - year 1999
$sql = "SELECT title, name, UNIX_TIMESTAMP(date) as timestamp
        FROM your_table
        WHERE your_limits";
$result = mysql_fetch_assoc(mysql_query($sql));
echo strftime("%A, %B %d, %Y", $result['timestamp']);

У меня уже было рассмотрели вопрос в той же теме, поэтому вы можете найти в этой ветке дополнительные ответы.

Надеюсь, это поможет!

person Frankie    schedule 16.07.2010

Более дешевым и веселым решением было бы ...

$stmt = $mysql->prepare("INSERT INTO forum_traad (overskrift, indhold, fk_forum_kategori, brugernavn, godkendt) VALUES (?,?,?,?,?)") or die($mysql->error);

Только не устанавливайте столбец дато. Первый (крайний левый) TIMESTAMP столбец любой таблицы будет автоматически установлен на текущую дату и время при вставке или обновлении строки.

person Brian Hooper    schedule 16.07.2010