Как вывести в сообщении alert данные из database.php

ara05ru

Новичок
Добрый день дорогие друзья ! У меня есть вот такой табель по сотрудникам.
1393
И если создать такой же табель заново этого же месяца и добавить туда повторно этого же сотрудника и указать "8" допустим 1-го числа, то всплывает окно "Конфликт с данными в другом табеле". то есть в один день нельзя в разных табелях ставить "8". Это проверка осуществляется с помощью ajax.php и функцией в database.php. А сообщение соответственно выводит js. Так вот задача такая, чтобы выводилось сообщение "Конфликт с данными в другом табеле <название объекта или табеля>" (название объекта или табеля одно и тоже). Понимаю что разобраться в чужом коде не легко, но хотелось бы получить от вас хоть какую нибудь подсказку в каком направлении думать. Ниже привел все нужные куски кода:
database.php
PHP:
public function check_tabdata($tabemplid, $checkday, $cval){
        // Получаем tab id и даные из таблицы tabempl по этому id
        $tab = $this->get_tabempl($tabemplid);
        // print_r($tab);
        // далее получаем значение в таблице tables и искомый месяц
        $tab1 = $this->get_tab($tab['tab_id']);
        // print_r($tab1);
        $needmonth = $tab1['month'];
        // echo("needmonth:".$needmonth);
        //получаем все строки из таблицы tabempl с нужным empl_id
        $tabs = $this->find_tab_empl(0, $tab['empl_id'], 0);
        // print_r($tabs);
        // затем все строки из таблицы tables  этого сотрудника с нужным месяцем
        foreach ($tabs as $tb) {
            $tab2 = $this->get_tab($tb['tab_id']);
            // print_r($tab2);
            if ($tab2['month'] == $needmonth and $tb['id'] !=  $tabemplid) {
                $tabdata = $this->find_tab_data($tb['id']);
                //if (($tabdata[$checkday] == 'О') and ($cval == 'О')){
                    //return false;
                    //exit();
                //}
                if ($tabdata[$checkday] == '8' and $cval == '8')
                    return FALSE;
}
        }
        return true;
 
 
    }
ajax.php
PHP:
if (!$db->check_tabdata($id, $cname, $val)){
    echo "errduplicate";
    exit();
}
edit.js
JavaScript:
$.ajax({
                url: '/ajax/edittabemldataajax.php',
                type: 'POST',
                data: {val: newVal, id: id, cname: cname, days:d},
                cache: false,
                success: function(res){
                    if (!res ) {
                        alert('Ошибка при добавлении данных');
                        location.reload();
                    }
                    else if (res == 'errdiffdate') {
                        alert('Запрещено редактирование позднее 3 дней либо наперёд!');
                        location.reload();
                    }
                    else if (res == 'errduplicate') {
                        alert('Конфликт с данными в другом табеле');
                        location.reload();
                    }
                                        else{
                                          
                                            pushSumm(res);
                                        }
                                      
                },
                error: function(){
                    alert('Error!');
                },
            });
 

ara05ru

Новичок
пожалуйста кто нибудь посоветуйте в каком направление думать
 

ksnk

прохожий
Для начала - нужно научится получать больше, чем одно значение в виде ответа ajax. Например - получать json вместо одного строкового значения
Тогда обработчик ajax может выглядеть как-то так
JavaScript:
...
    success: function(resjson){
    var res, data;
        try {
            var data=JSON.parse(resjson);
            if(data.res) res=data.res;
        } catch (e) {
            res=resjson;data={};
        }
        if (!res ) {
        ...
    
        if(res=='errduplicate'){
                alert('Конфликт с данными в другом табеле '+(data.reason||''));
        }
Потом - нужно научится получать сопутствующую информацию из процедуры check_tabdata/ Так как это какой-то класс, то в том классе можно завести переменную, к примеру error_reason, в выводить строковое объяснение ошибки в нее.
PHP:
...
if ($tabdata[$checkday] == '8' and $cval == '8') {
    $this->error_reason= 'Что-то много восьмерок';
    return FALSE;
}
Ну и наконец выдавать все это хозяйство клиенту
PHP:
if (!$db->check_tabdata($id, $cname, $val)){
    echo utf8_encode(json_encode(['res'=>"errduplicate", 'reason'=>$db->error_reason]));
    exit();
}
 

ara05ru

Новичок
при совпадении "8" появилась такое сообщение. что это значит ?
{"res":"errduplicate","reason":"\u0427\u0442\u043e-\u0442\u043e \u043c\u043d\u043e\u0433\u043e \u0432\u043e\u0441\u044c\u043c\u0435\u0440\u043e\u043a"}
 

ara05ru

Новичок
только почему то все время начало появляться сообщение "ошибка добавления данных". а при совпадении "8" сообщение "Конфликт с данными в другом табеле"
 

ksnk

прохожий
Копать в сторону "отладка php". Удобно и практично отлаживать именно локальную версию сайта - копать в сторону "Open server" и "как настроить <<мой любимый редактор>> для отладки php".
Если все меры неприменимы и/или не принесли результатов в разумный срок - нужно искать программистов.
Мои телепатические способности на данный момент исчерпаны...
 

ara05ru

Новичок
JavaScript:
$.ajax({
                url: '/ajax/edittabemldataajax.php',
                type: 'POST',
                data: {val: newVal, id: id, cname: cname, days:d},
                cache: false,
                success: function(resjson){
                    //var data = JSON.parse(resjson);
                  //console.log(data);
                var res, data;
                    try {
                        var data=JSON.parse(resjson);
                        if(data.res) res=data.res;
                    } catch (e) {
                        res=resjson;data={};
                    }
                    /*if (!res ) {
                        alert('Ошибка');
                        location.reload();
                    }*/
                    else if (res == 'errdiffdate') {
                        alert('Запрещено редактирование позднее 3 дней либо наперёд!');
                        location.reload();
                    }
                    else if(res=='errduplicate'){
                         alert('Конфликт с данными в другом табеле '+(data.reason||''));
                    }
                                        else{
                                            
                                            pushSumm(res);
                                        }
                                        
                },
                error: function(){
                    alert('Error!');
                },
            });
если вот этот кусок закомментировать, то ясное дело что ошибка не выходит. но это не самое правильное решение проблемы.
 

ksnk

прохожий
Нужно ответить на вопросы
- не выдает ли сервер пустые ответы, Если выдаетт - исправить
- правильно ли отрабатывает кусок с парсингом json. Если неправильно - исправить.
Это и будет называться словом "отладка"
 
Сверху