Как вставить даты, выбранные из раскрывающихся списков, в таблицу mySQL с помощью php?

Когда у вас есть 5 раскрывающихся списков для выбора даты (Y, m, d, H, i), как вы вставляете выбранную дату и время в один столбец таблицы mySQL в качестве даты и времени, используя PHP5?

Я знаю, что их нужно объединить в строку, например:

$DateTime="$Year-$Month-$Day $Hour:$Minute:00";

а затем, возможно, используйте strtotime:

$Date=date('Y-m-d H:i:s', strtotime($DateTime)) ;

но где мне объявить переменные и как мне встроить их в запрос, например:

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "details")) {

$insertSQL = sprintf("INSERT INTO sessions (Location1, Location2, Date)
 VALUES (%s, %s, $s)",

                       GetSQLValueString($_POST['Location1'], "text"),
                       GetSQLValueString($_POST['Location2'], "text"),
                       GetSQLValueString($_POST[' ???? '], "date"));

person Brainache    schedule 10.04.2009    source источник


Ответы (4)


Вы также можете изучить функцию mktime(): http://ca.php.net/mktime

Затем вам просто нужно объявить переменную даты, например:

$date = mktime($_POST['H'],$_POST['i'],0,$_POST['m'],$_POST['d'],$_POST['Y']);

$location1 = mysql_real_escape_string( $_POST['Location1'];
$location2 = mysql_real_escape_string( $_POST['Location2'];

$insertSQL = "INSERT INTO sessions (Location1, Location2, Date) VALUES ('$location1', '$location2', $date)";

mysql_query( $insertSQL );

ИЗМЕНИТЬ:

Или, используя формат sprintf, который вы используете:

$date = mktime($_POST['H'],$_POST['i'],0,$_POST['m'],$_POST['d'],$_POST['Y']);  

$insertSQL = sprintf("INSERT INTO sessions (Location1, Location2, Date)
     VALUES (%s, %s, $s)",
    
                           GetSQLValueString($_POST['Location1'], "text"),
                           GetSQLValueString($_POST['Location2'], "text"),
                           GetSQLValueString($date, "date"));

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

person PHPexperts.ca    schedule 10.04.2009

Создайте служебную функцию, которая преобразует «режим отображения» в режим MySQL, она пригодится в нескольких других проектах в будущем.

Дата — возвращает строку, отформатированную в соответствии с заданной строкой формата.

MkTime – получение временной метки Unix для даты.

Strtotime – анализирует текстовое описание даты и времени на английском языке в отметку времени Unix.

person Jon Winstanley    schedule 10.04.2009

MySQL предоставляет функцию, облегчающую вам эту задачу. FROM_UNIXTIME(). Я бы использовал mktime(), чтобы получить вашу дату в отметке времени, так как это намного меньше, чем strtodate, поскольку вы знаете части даты, нет необходимости анализировать ее как строку.

Ниже приведен самый простой подход, который я могу придумать:

$date = mktime($_POST['H'], $_POST['i'], 0, $_POST['m'], $_POST['d'], $_POST['Y']);

$location1 = mysql_real_escape_string( $_POST['Location1'];
$location2 = mysql_real_escape_string( $_POST['Location2'];

$insertSQL = "INSERT INTO sessions (Location1, Location2, Date) VALUES ('$location1', '$location2', FROM_UNIXTIME($date))";

Я предполагаю, что GetSQLValueString — это пользовательская функция Dreamweaver (я только слышал о ней). Я уверен, что вы можете принять это в свою реализацию.

person Kieran Hall    schedule 11.04.2009
comment
Если MySQL, даты и время всегда следуют одному и тому же порядку - сначала самая большая единица, затем следующая по величине, вплоть до наименьшей (т.е.: год, месяц, дата, час, минуты, секунды), зачем использовать mktime, который даст мне неправильный формат, т.е. (s, i, H, m, d, Y)??? запутался - person Brainache; 11.04.2009
comment
По сути, поле datetime похоже на то, как вы описываете, однако функция mktime возвращает временную метку UNIX и поэтому более переносима. Функция FROM_UNIXTIME принимает в качестве аргумента временную метку и преобразует ее в формат даты и времени, поэтому вам не нужно этого делать. - person Kieran Hall; 12.04.2009

Спасибо всем, кто пытался помочь - ответ был намного проще (думаю, светлый момент! LOL). Просто нужно было объявить переменные сообщения как:

$_POST['startDate'] ="$Год-$Месяц-$День $Час:$Минута:00";

Нет необходимости в преобразовании времени, так как он уже в формате Mysql (YEY!)

person Brainache    schedule 15.04.2009