#javascript #php #jquery #ajax #jquery-ui-datepicker
#язык JavaScript #php #jquery #аякс #jquery-пользовательский интерфейс-datepicker
Вопрос:
Я пытаюсь получить даты из базы данных с помощью PHP. Который будет выделен в окне выбора даты. Для этого я сделал sql
запрос для получения дат, как показано ниже.
HTML Date: lt;input type="text" id="datepicker"gt;
// Static dates // An array of dates var eventDates = {}; eventDates[ new Date( '08/07/2016' )] = new Date( '08/07/2016' ); eventDates[ new Date( '08/12/2016' )] = new Date( '08/12/2016' ); eventDates[ new Date( '08/18/2016' )] = new Date( '08/18/2016' ); eventDates[ new Date( '08/23/2016' )] = new Date( '08/23/2016' );
lt;scriptgt; $(function() { // An array of dates var eventDates = {}; lt;?php $sql = "SELECT * from `table` WHERE `value` gt; 0"; $result = $connect-gt;query($sql); while($row = $result-gt;fetch_assoc()) { ?gt; eventDates[new Date('lt;?php echo $date = $row['date']; ?gt;')] = new Date( 'lt;?php echo $date = $row['date']; ?gt;'); lt;?php } ?gt; // datepicker $('#datepicker').datepicker({ beforeShowDay: function(date) { var highlight = eventDates[date]; if (highlight) { return [true, "event", 'Tooltip text']; } else { return [true, '', '']; } } }); }); lt;/scriptgt;
Итак, в приведенном выше коде я зациклил все даты, имеющие value gt; 0
. В котором должны быть напечатаны все даты, но это не так. Я проверил запрос, и он отлично работает в отдельном файле PHP. Это перекликается со всем, что есть у даты value gt; 0
.
Я не уверен, что это правильный метод для извлечения даты из базы данных и передачи ее в datepicker. Существует другой метод, использующий JSON, но я не знаком с этим методом, так как не работал с JSON.
Какие изменения я могу внести, чтобы извлечь даты из базы данных и выделить их в списке дат?
Комментарии:
1. Вы проверили, как на самом деле выглядит завершенный Javascript?
2. @ADyson На нем отображается пустая страница. Если я заменю
sql
запрос статическими датами вручную, он покажет выделенные даты в окне выбора даты.3. Нет, я имею в виду, проверьте сгенерированный Javascript в исходном коде вашего браузера. И проверьте консоль на наличие ошибок.
4. @ADyson получил ошибку
Uncaught Error: Call to a member function fetch_assoc() on bool
в Javascript иRefused to execute script from 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.css' because its MIME type ('text/css') is not executable, and strict MIME type checking is enabled.
в консоли.5. На самом деле это ошибка PHP (которая в конечном итоге была выведена в середине Javascript). Это означает, что ваш запрос не удался, поэтому не на чем было вызывать fetch_assoc. Включите отчет об ошибках mysqli, чтобы узнать точную ошибку
Ответ №1:
Я отформатировал дату в YY/MM/DD
от YY-MM-DD
. Поскольку формат даты выбора даты таков YY/MM/DD
. Если вы используете второй формат, -
он не будет показывать вывод.
Вот исправленный код скрипта:
lt;scriptgt; $(function() { // An array of dates var eventDates = {}; lt;?php $sql = "SELECT * from `table` WHERE `value` gt; 0"; $result = $connect-gt;query($sql); while( $final=$result-gt;fetch_assoc() ) { ?gt; eventDates[new Date('lt;?php $orgDate = date($final['date']); $date = str_replace('-"', '/', $orgDate); $newDate = date("Y/m/d", strtotime($date)); echo $newDate ?gt;')] = new Date( 'lt;?php $orgDate =date($final['date']); $date = str_replace('-"', '/', $orgDate); $newDate = date("Y/m/d", strtotime($date)); echo $newDate ?gt;' ); lt;?php } ?gt; // datepicker $('#start').datepicker({ dateFormat: "yy-mm-dd", beforeShowDay: function(date) { var highlight = eventDates[date]; if (highlight) { return [true, "event", 'Tooltip text']; } else { return [true, '', '']; } } }); }); lt;/scriptgt;