2013-02-11 8 views
0

У меня есть простая форма, которая имеет скрытое поле со значением:вставка даты в базу данных MySQL

<?php echo date('Y-m-d'); ?> 

Когда я отправить форму через мой PHP обработки сценария все на форме переходит в базу данных, кроме Дата.

вот мой SQL:

$sql = "INSERT INTO wp_reminders (dateofentry, ipaddress, type) VALUES ('$_POST[dateofentry]','$_POST[ipaddress]' ,'$_POST[type]')"; 

Когда я вторят дату на странице обработки она показывает отлично.

У меня есть установка колонки в моей базе данных со следующим:

dateofentry date NOT NULL 

Любые идеи, если есть что-то не так с выше?

+0

добавить var_dump $ _POST – user20232359723568423357842364

+2

Ваш код уязвим для [SQL injection] (http://php.net/manual/en/security.database.sql-injection.php). Вам необходимо использовать соответствующий метод вашей библиотеки базы данных, чтобы избежать ваших данных перед тем, как сделать запрос. –

+0

В коде, который вы опубликовали, нет ничего неправильного. Я предлагаю вам откликнуться на '$ sql', чтобы помочь в отладке проблемы. Это будет сужаться там, где проблема, то есть, если это проблема с литералом даты, указанным в инструкции SQL, или SQL-запрос в порядке, и проблема на стороне сервера MySQL. – spencer7593

ответ

-1

Вы должны использовать этот синтаксис для создания SQL-запроса:

$sql = "INSERT INTO wp_reminders (dateofentry, ipaddress, type) VALUES ('".addslashes($_POST['dateofentry'])."','".addslashes($_POST['ipaddress'])."' ,'".addslashes($_POST['type'])."')";

В вашем примере, вы не упаковке.Размеры ключа индекса с кавычками ...

И вы действительно не должны 'Поместите переменную php в строку, лучше ее конкатенировать.

+2

Пожалуйста, не отправляйте ответы, которые являются огромными дырами в безопасности. Вы должны * никогда * вставлять '$ _POST' данные непосредственно в строку запроса. Конкатенация против интерполяции даже не проблема, она не «лучше» вообще. Они такие же. – tadman

+1

Кто-то уже говорил о безопасности, проще объяснить ошибку, не добавляя сложности в мое объяснение. Более того, мой ответ касается его проблемы, чтобы помочь ее исправить, а не научить его быть в безопасности. Нет периода. –

+1

приведенный выше код предназначен исключительно для тестирования, и он просто хотел бы узнать, есть ли у кого-нибудь проблемы, а не быть задетыми в мои навыки кодирования. – danyo

0

Любые даты, вставленные в MySQL, должны соответствовать one of the formats that MySQL can parse или должны быть преобразованы. ISO 8601 - предпочтительный формат, обычно YYYY-MM-DD HH:MM:SS.

Если вы использовали PDO:

$sql = "INSERT INTO wp_reminders (dateofentry, ipaddress, type) VALUES (:dateofentry, :ipaddress, :type)"; 
$statement = $pdo->prepare($sql); 
$statement->bindParam(":dateofentry", strtotime(date("Y-m-d H:i:s")), PDO::PARAM_STR); 
$statement->bindParam(":ipaddress", $_POST['ipaddress'], PDO::PARAM_STR); 
$statement->bindParam(":type", $_POST['type']), PDO::PARAM_STR); 
$statement->execute(); 

Если вы не ожидающую форму, чтобы занять очень много времени, чтобы обработать, это может иметь смысл поставить дату на момент создания запроса. Если нет, вы всегда можете поместить этот strtotime в свою форму.

Смежные вопросы