За последние 24 часа нас посетили 9014 программистов и 676 роботов. Сейчас ищут 177 программистов ...

Работа с базой данных

Тема в разделе "JavaScript и AJAX", создана пользователем kda7979, 15 апр 2019.

  1. kda7979

    kda7979 Новичок

    С нами с:
    15 апр 2019
    Сообщения:
    2
    Симпатии:
    0
    Есть код на JS, нужно заставить его работать с базой данных MySQL.

    Что есть на JS:
    массив цифровых данных (год, месяц, день), пользователь на конкретный день может повесить комментарий, при этом комментарий может быть только один от любого из пользователей.
    регистрации в программе нет, пользователи не идентифицируются.

    Логика программы:
    Пользователь выбирает год и месяц - идёт загрузка с базы всех уже записанных туда дней выбранного месяца и года. На стороне пользователя выбираю не занятые комментарием дни и показываю ему. При выборе конкретного свободного дня он пишет комментарий и этот день уходит в базу на добавление с дополнительной проверкой не успел ли кто на мгновение раньше уже это сделать.
    Соответственно при следующем цикле этот день уже не показывается пользователю, так как он уже занят.

    Как я вижу:
    В MySQL создаю таблицу с полями G,M,D,C
    на JS вешаю два события.
    - первое передаёт серверу данные G,M - сервер ищет в базе совпадения и в ответ отдаёт массив B(i)=[G,M,D,C]
    - второе передаёт серверу строку [G,M,D,C] - сервер проверяет нет ли записей по полям [G,M,D] и если нет то записывает в базу полученную строчку в ответ отдаёт информацию об успехе/сбое записи.

    Просьба:
    - подскажите пожалуйста достаточно ли в таблице этих полей или нужно её создавать иначе?
    - как лучше передать серверу данные по событиям (желательно пример)
    - как получить от сервера ответ по событиям (если сервер массив передать не может то в каком виде придёт вся отобранная информация)
    - если не сложно то как должен выглядеть серверный файл на PHP (скелетно, различные проверки на соответствие пришедших данных требуемым я сам буду добавлять) важно чтобы он правильно подключил базу, мог туда записать полученную строку и сделать выборку строк из базы по параметрам.

    Спасибо))
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    6.447
    Симпатии:
    1.210
    Достаточно, но назвать лучше year, month, day и comment
    Может передать массив. JSON, PHP-функция json_encode.
    Если без перезагрузки страницы, то способ один, называется ajax. А дальше ты выбираешь, либо на чистом JS возишься с XMLHttpRequest, в сети уйма примеров, https://learn.javascript.ru/ajax либо пользуешь библиотеки типа jQuery или axios, или ещё, их дофига, опять же есть по ним дока с примерами. Я предпочитаю путь с библиотеками

    PHP:
    1. $db = new mysqli("localhost", "user", "password", "database");
    2. $db->set_charset("utf8");
    3. // А дальше делаешь свои запросы
    https://secure.php.net/manual/ru/book.mysqli.php
     
  3. kda7979

    kda7979 Новичок

    С нами с:
    15 апр 2019
    Сообщения:
    2
    Симпатии:
    0
    Да, создаю таблицу в базе с полями year, month, day и comment
    На событии JS вешаю код вида:
    Код (Text):
    1.  
    2. A = 2019;
    3. B = 4;
    4. C = 15;
    5. D = 'комментарий'
    6.     function F() {
    7.         $.ajax({
    8.             type: "POST",
    9.         url: "BAZA.php",
    10.         data: {"A": A, "B": B, "C": C, "D": D},
    11.         cache: false,        
    12.             success: function(response){
    13.             //здесь обработка отклика
    14.             }
    15.         });
    16.     return false;
    17.     }
    В PHP получаю данные в виде:
    Код (Text):
    1.  
    2. $A = $_POST['A'];
    3. $B = $_POST['B'];
    4. $C = $_POST['C'];
    5. $D = $_POST['D'];
    подключаюсь к базе
    Код (Text):
    1. $mysqli = new mysqli($db_host,$db_user,$db_password,$db_base);
    теперь надо проверить как-то наличие в базе записи с параметрами $A,$B,$C
    какой командой это нужно делать?
    и если такой ещё нет, то добавляю запись в таблицу:
    Код (Text):
    1.  
    2. $mysqli->query("INSERT INTO ".$db_table."(year, month, day, comment) VALUES ('$A','$B','$C','$D')");
    и непонятно если я JS передам только два параметра :
    Код (Text):
    1.  
    2. A = 2019;
    3. B = 4;
    4.     function F() {
    5.         $.ajax({
    6.             type: "POST",
    7.         url: "BAZA.php",
    8.         data: {"A": A, "B": B},
    9.         cache: false,        
    10.             success: function(response){
    11.             //здесь обработка отклика
    12.             }
    13.         });
    14.     return false;
    15.     }
    как дать понять серверу (BAZA.php) что их добавлять не надо а по ним нужно сортировать и передавать совпадения по строкам?
     
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    6.447
    Симпатии:
    1.210
    О, кстати, ещё в базе можно создавать один столбец `date` с типом date, и хранить там все три компонента. Это эффективнее и создаёт возможности для выборок в будущем.
    Два пути даёт именно MySQL:
    1. Запросить select-ом, и посмотреть, вернётся что-то или нет
    2. Поставить на поля уникальный ключ, и вставлять командой insert ignore, которая не вставит данные, если уже есть данные в ключе.

    Пересказывать вам в постах руководство по MySQL никто не станет, надеюсь, вы понимаете