За последние 24 часа нас посетили 18064 программиста и 1700 роботов. Сейчас ищет 1501 программист ...

Составить запрос из нескольких таблиц join

Тема в разделе "PHP для новичков", создана пользователем _ne_scaju_, 12 фев 2018.

  1. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Обязательно. В коде я исправил минуту спустя, но вы наверно успели прочитать код с моей ошибкой.
    Код 404 - страница не найдена. Т.е. путь указан не верно. Указывайте абсолютный путь, например, от корня сайта (слеш в начале пути)
    --- Добавлено ---
    Если файл уже в корне, то '/function.php'. Если, к примеру, в директории 'my_dir', то '/my_dir/function.php'
     
    _ne_scaju_ нравится это.
  2. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    Файл лежит в корне, добавил слеш в js все ровно ошибка осталось такой же.
    --- Добавлено ---
    Опечатка у меня functions.php название файла)
    Теперь выводится вот что:
     

    Вложения:

    • z1.png
      z1.png
      Размер файла:
      8,4 КБ
      Просмотров:
      3
    • z2.png
      z2.png
      Размер файла:
      3,3 КБ
      Просмотров:
      2
  3. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Судя по всему, данные переданные в функцию плагин не устроили. В плагине есть условие: если есть данные в jsonData, то разбирать их, в противном случае, отрабатывает запрос к файлу events.json, которой прописан по умолчанию. В начале функции выведите в консоль переменную data:
    Код (Javascript):
    1. function initCalendar (data) {
    2.     console.log(data);
    3.    /* остальной код */
    4. }
     
  4. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    Вот что выдает:
     

    Вложения:

    • z3.png
      z3.png
      Размер файла:
      26,8 КБ
      Просмотров:
      3
  5. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Пустой массив. Где-то не правильно отработал сценарий. Проверяйте functions.php. Кстати, вы должны были там учесть две ситуации: когда есть POST-данные и когда их нет. Ведь в первом случае, вы просто подключаете файл на страницу и вызываете определенные функции, а во втором случае (когда Ajax), вызов функций должен быть в самом файле functions.php
     
  6. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    Как все затянуто)
    второй случай вызов функции initCalendar(<?php echo $events; ?>); в файле functions.php этой что ли?
    Вот что я заметил я просто возвращал return $_POST['predmet']; в файле выбора предмета который передавался дальше во вторую функцию.
    Сделал по другому:
    PHP:
    1. function get_predmet()
    2. {
    3.     # если в сессии есть ID юзера, то показываем все его коменты
    4.    if(isset($_SESSION['uid']))
    5.     {
    6.         # сохраняем сессию в переменную
    7.        $uid = $_SESSION['uid'];
    8.  
    9.         # глобальная переменная подключения
    10.        global $pdo;
    11.  
    12.         # выбираем наши предметы из базы и подставляем в селект их
    13.        $checkUser = $pdo->prepare('
    14.            SELECT `tb1`.`id`, `tb1`.`naimenovanie`, `tb2`.`uid`, `tb2`.`rid`
    15.            FROM `predmet` `tb1`
    16.            LEFT JOIN `user_predmet` `tb2`
    17.            ON `tb1`.`id` = `tb2`.`rid`
    18.            WHERE `tb2`.`uid` = ?');
    19.         $checkUser->execute([$uid]);
    20.         $result = $checkUser->fetchAll(PDO::FETCH_ASSOC);
    21.  
    22.         if($result)
    23.         {
    24.             echo '<form action="" method="POST" class="my_class">';
    25.             echo '<select name="predmet">';
    26.             echo '<option>Выберие предмет</option>';
    27.  
    28.             # через массив перебираем наши предметы которые приходят из базы
    29.            foreach ($result as $key => $value)
    30.             {
    31.                 $s = ($value['id'] == $key) ? 'selected': '';
    32.                 printf('<option value="%s" %s>%s</option>', $value['id'], $s, $value['naimenovanie']);
    33.             }
    34.             echo '</select>';
    35.             echo '<input type="submit" value="Выбрать"/>';
    36.             echo '</form>';
    37.  
    38.             # возвращаем id предмета
    39.            return $value['id'];
    40.         }else{
    41.              // вызываем функцию о которой ты говоришь
    42.         }
    43.     }
    44. }
    И что теперь получается у меня в консоле:
    Такое ощущение что ему не нравится как я храню дату и время в базе.
     

    Вложения:

    • q4.png
      q4.png
      Размер файла:
      10 КБ
      Просмотров:
      1
    • q5.png
      q5.png
      Размер файла:
      20,8 КБ
      Просмотров:
      1
  7. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    @_ne_scaju_, я вообще удивляюсь, что у вас там хоть что-то работает )) Если у вас вызывается функция get_predmet() в самом верху документа, то судя по коду, у вас там же и должна выводиться форма, т.е. даже до <!DOCTYPE html> и открытия тега <html>. Кроме того, при Ajax-запросе, если эта же функция вызывается, то форма должна примешиваться к ответу. И по логике, в консоли должна быть ошибка, т.к. JSON-строка + код формы должны вызвать ошибку при парсинге.
    Короче, запаковывайте все ваши файлы и дамп базы в архив и закидывайте сюда, иначе будем долго и нудно ковырять эту тему.
     
  8. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    Я тоже так думал, но обычно на форуме не смотрят что в архиве находится, прикрепил файл.
    По критикуй код по возможности, мне интересно что же не так)
     

    Вложения:

  9. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @Deonis
    Посмотрели файл, какая красота в нем :D
     
  10. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Я смотрел сквозь пальцы и делал вид, что сейчас это самый писк моды. ;) Вы же понимаете, что я не ставил цель переписать ваш код по всем канонам, а только сделать его рабочим.
    Держите
    --- Добавлено ---
    P.S. Дерьмовенький плагин вы нашли... Документации нет, необходимые методы отсутствуют, написан кривенько.
     

    Вложения:

    _ne_scaju_ нравится это.
  11. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @Deonis
    я находил и по лучше плагин, вроде называется fullcalendar, может не парится с ним а взять этот о котором написал, в нем вроде есть документация)
    Сейчас взгляну что вы изменили сразу увижу стиль, спасибо.
     
  12. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    Работает как надо, как я хотел. Отпишусь когда код посмотрю.
    И так:
    session_status интересная функция в первые вижу, возвращает состояние текущей сессии)
    PHP_SESSION_NONE ну и понятно эту константу в первые вижу, тоже почитал что она делает, нужно взять на заметку.
    В ответку спрошу, когда и в каких случаях использовать эту функцию и константу, просто там есть и другие константы)
    Вот что еще в запросе я заметил 'test' AS `type`, у меня в базе нет ни типа ни тест таблиц, от куда значит значения?
    Посмотрел код проанализировал, по сути я тыкался вокруг правильного ответа но так и не сообразил из-за маленькой практики или не знания чего либо, да мне ваш стиль нравится)
    Ну и последнее что хочу сказать, попробуйте выбрать предмет и жмите отправить несколько раз, увидите чудо, запись будет дублироваться, походу где-то нужно добавить очистку.
     
  13. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Экспериментировал. В примерах к плагину, есть файл events.json, там же можно заметить элемент type, вот и хотел посмотреть, на что он влияет.
    Ошибочка. Там ваш стиль с моей примесью ;)
    Ответ я уже озвучил выше:
     
  14. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    Еще одно у меня была кнопочка которая при переходе на главную очищала сессию) вы мне просто дали красивый стиль кнопке при переходе на главную, сессия остается) ну может я оставлю как есть просто кнопку выход еще добавлю)
    У меня в планах еще будет добавить редактировать и удалить запись) Думаю посижу подумаю если что не получится обращусь в эту же тему)
    --- Добавлено ---
    @Deonis
    Убрал 'test' AS `type`, из запроса, потом когда пользователь выбирает предмет и жмет кнопку отправить несколько раз то запись получается типа вида, как обнулить результаты?
     

    Вложения:

    • z7.png
      z7.png
      Размер файла:
      7,5 КБ
      Просмотров:
      1
  15. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    В третий раз повторю, что нет у этого плагина методов, которые расширили функционал до необходимого минимума. Вариант один - дописывать этот функционал самому. Но на это у меня нет ни времени, ни желания.
     
  16. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @Deonis
    а теперь понял) не ну можно просто сделать типа val('') добавить в ajax запрос; что то с пустыми кавычками. Или это к этому не значится) Или придумать условие повторная отправка запрещена, если юзер хочет еще раз отправить форму) или же отредиректить на ту же страницу только с пустым значением.
    Ну хорошо пусть будет так пока)
     
  17. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Можно, пробовал, не катит
     
  18. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    Понятно) может появится еще вариант какой либо отпишусь)
     
  19. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @Deonis
    Все я поставил стили как считаю нужным добавил еще 2 кнопки, выход и календарь, если юзер перешел на главную он может вернутся в календарь нажав на кнопку, логично.
    Подскажи пожалуйста добавления данных по клику на дату в календаре можно реализовать и каким способом это можно сделать?
     
  20. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Обработчиков событий можно установить сколько угодно, если устанавливать не через свойство и не inline. Другой вопрос в том, как вы будете распределять действия: когда нужно по клику показать список уже существующих задач, а когда добавить новую?
     
  21. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @Deonis
    Думаю делать так, если в этот день стоит коммент, то пользователю будет доступно только редактирования события и удаления.
    Если день свободен то можно добавлять коммент.
    Ах да сейчас же по клику загружается список задачи на какой либо день если они есть. Если их нет то можно просто же вызвать модал окно с полями ввода и добавить задачу.
     
  22. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @Deonis
    Либо же можно просто под низом календаря кнопочку добавить событие и дальше проверять занял ли день если да сообщить об этом.
     
    #72 _ne_scaju_, 14 фев 2018
    Последнее редактирование: 14 фев 2018
  23. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Такой вариант более реальный.
     
  24. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @Deonis
    смотри можно что еще сделать, добавить кнопку редактировать тебе открывается список событий которое можно потом будет или удалить или отредактировать, как то представление у меня такое) просто я не знаю как мне вывести кнопку удалить там где выводятся события.
     
  25. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Это надо лезть в код плагина, смотреть где генерируется HTML-код списка и добавлять туда свою кнопку. В кнопку, в data-атрибут, выводить ID задачи.
    HTML:
    1. <button data-id="100500" class="del_task">Грохнуть запись</button>
    Дальше обработчик:
    Код (Javascript):
    1. $(document).on('click', '.del_task', function(){
    2.     var id = $(this).data('id'); // получаем ID задачи и отправляем Ajax-ом для удаления
    3. });