2015-04-03 4 views
0

Я застрял на одном и том же вопросе некоторое время. Хотя я уверен, что этот вопрос должен существовать где-то, ни один из ответов, которые я исследовал, и не пытался работать, это странно.PHP string to MySQL date

Вот мой код:

if(isset($_POST['date'])){ 
    $date=$_POST['date']; 
    echo $date; //outputs 2015-04-09 
    $date = date("Y-m-d", strtotime($date)); //Dropped quotation marks. before it was '$date' 
    $res = mysqli_query($cxn, "SELECT * 
           FROM Reservations; 
           WHERE ResDate=$date);") 
        or die ("Couldn't execute query."); 
    while($row = mysqli_fetch_assoc($res)){ 
     extract($row); 
     echo "Reservation Number: $ResNo<br>Member ID: $MNo<br>VIN: $VIN<br>Reservation Date: $ResDate<br>Reserved Pick-Up Time: $ResTime<br>Pick-Up Address: $PickUpAddress<br>"; 
     echo "________________________________________<br>"; 
    } 
} 

Проблема заключается в WHERE ResDate=$date. Я пытаюсь сделать $ date в тип DATE в MySQL. Вот некоторые другие способы, я попытался (я бы пропустил несколько)

WHERE ResDate=STR_TO_DATE('$date', '%m-%d-%Y') (также попыталась дата $ без ' ')

WHERE ResDate='$date' (также попыталась дата $ без'')

WHERE ResDate=CONVERT(DATETIME, '$date') (также пытались $ дата без «„)

WHERE ResDate=CAST('$date' AS DATE) (также пытались дату $ без“»)

Для всех вышеперечисленных вариантов, я получил „не удалось выполнить запрос.“ У меня заканчиваются идеи .. любая помощь? Заранее спасибо.

UPDATE: Вот код со страницы перед:

$dates = mysqli_query($cxn, "SELECT ResDate 
          FROM Reservations") 
       or die ("Couldn't execute query."); 

$dateArray = array(); 
array_push($dateArray, '<option>' . "Choose Date" . '</option>'); 
while($row = mysqli_fetch_assoc($dates)){ 
    extract($row); 
    array_push($dateArray, '<option>' . "$ResDate" . '</option>'); 
} 

Так $ ResDate из базы данных должны быть переданы на следующую страницу, я думаю ..

+1

сначала правильный запрос $ res = mysqli_query ($ cxn, "SELECT * FROM 'Reservations' WHERE' ResDate' = '$ date' ") –

+2

whats значение' $ _POST ['date'] '? – Ghost

+0

нет одиночных кавычек вокруг 'strtotime()'. – Daan

ответ

0

Есть несколько проблем, как синтаксис связанных. У вас есть дополнительный ) в вашем запросе, а $date не следует указывать в функции date(). Попробуйте это:

if (isset($_POST['date'])) { 
    $date = date("Y-m-d", strtotime($_POST['date'])); 
    $res = mysqli_query($cxn, "SELECT * 
           FROM Reservations 
           WHERE ResDate = '" . $date . "'") 
        or die ("Couldn't execute query."); 
+0

Я попробовал точно то же самое и поставил 'echo $ date;' сразу после '$ date = date (" Ymd ", strtotime ($ date));' (выходы 2015-04-09), но все равно 't work .. – user3763711

+0

извините .. исправлена ​​закрывающая цитата. должен работать сейчас – billynoah

+0

Да, это работает! Спасибо! Это умный способ объединить их вместе, извлеченные уроки – user3763711

1

Предполагая $_POST['date'] установлен правильно, (один из) ваша ошибка (ы) здесь:

$date = date("Y-m-d", strtotime('$date')); 

с single quotes, переменные не расширены, так что это решает Ли terally $date, вместо значения в $_POST['date']. Потеряйте одиночные кавычки в strtotime, и вы должны быть установлены.

Это и:

  1. вам нужны кавычки $date в запросе.
  2. В вашем запросе у вас есть паралич с точкой с запятой после Reservations.
  3. Вы бездомная закрывающая скобка после $date

В подобных случаях, это хорошая практика, чтобы echo или войти запрос, прежде чем выполнить его, так что вы можете увидеть, что на самом деле идет на сервер. Кроме того, чтение сообщения об ошибке с сервера может помочь.

+0

Это не единственная причина, по которой это не сработает. – Daan

+0

@ Даан, что еще там? –

+1

Сделайте еще один хороший взгляд на запрос, особенно на ';' after Reservations. – Daan

0

ваш запрос неправильно изменить запрос к

SELECT * 
FROM Reservations 
WHERE ResDate='$date' 

Вы забыли добавить '' на сегодняшний день $

1

Просто измените эту строку

$date = date("Y-m-d", strtotime('$date')); 

К этому

$date = date("Y-m-d", strtotime($date)); 

И это

$res = mysqli_query($cxn, "SELECT * FROM Reservations 
           WHERE ResDate=$date);") 
        or die ("Couldn't execute query."); 

Для этого

$res = mysqli_query($cxn, "SELECT * FROM Reservations 
           WHERE ResDate=".$date.";") 
        or die ("Couldn't execute query."); 
+0

Или лучше, вообще потеряйте кавычки, добавьте ничего, кроме времени выполнения. –

+0

@BartFriederichs: Я думаю, что в PHP это время синтаксического анализа, а не время выполнения. – hakre

+0

Или даже лучше, потеряйте лишний '."); "... что это там делает? – billynoah

0

Assumming, что дата, полученная от PHP будет находиться в «ДМГ» вы можете использовать следующий код:

$tDate = DateTime::createFromFormat('d-m-Y', $_POST['date']); 
$date = $tDate->format('Y/m/d'); 


Обратите внимание, это требует PHP версии 5.3 или более поздней версии

Подробнее см. В руководстве по эксплуатации http://php.net/manual/en/class.datetime.php