Не уходит запрос в БД

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
6
Реакции
1
Здравствуйте.
Кто может найти ошибку , в чем она заключается?

для одностраничного сайта нужно модуль ОТЗЫВЫ СДЕЛАТЬ с оценкой.

PHP:
<?php
    if (!DEFINED('sait'))
        exit(header('Refresh: 0; URL=http://' . $_SERVER['SERVER_NAME'] . '/404'));
    if ($go) {
        sys::noauth();
        if (isset($_POST) && !empty($_POST)) {
            if (!isset($_POST['text'])) {
                sys::outjs(array(
                    'e' => 'Необходимо заполнить все поля'
                ));
            }
            if (!$_POST['text']) {
                $pesp = '<h3 class="red">Ошибка - заполните все поля</h3>';
            }
            if ($_POST['text'] and $_POST['ocenka']) {
                $users = $user['login'];
                $date  = date("y-m-d");
                $sql->query('INSERT INTO `response` set `text`="' . sys::bbc($_POST['text']) . '", `date`="' . $date . '", `autor`="' . $users . '", `ocenka`="' . $_POST['ocenka'] . '", `status`="0", `uid`="' . $user['id'] . '"');
                sys::outjs(array(
                    'e' => 'Отзыв добавлен на модерацию!<meta http-equiv="refresh" content="5;">'
                ), $nmch);
            } else {
                $pesp = '<h3 class="red">Ошибка - заполните все поля</h3>';
            }
            sys::outjs(array(
                'resp' => $pesp
            ));
        }
    }
    $status = explode("_", $request);
    $sql->query('SELECT `id` FROM `response`');
    $aPage = sys::page($page, $sql->num(), $cfg['response_page']);
    sys::page_gen($aPage['ceil'], $page, $aPage['page'], 'response');
    $sql->query('SELECT * FROM `response` where status=1 ORDER BY `id` DESC LIMIT ' . $aPage['num'] . ', ' . $cfg['response_page']);
    while ($resp = $sql->get()) {
        $html->get('get', 'sections/response');
        $html->set('id', $resp['id']);
        $html->set('name', htmlspecialchars_decode($resp['name']));
        $html->set('text', htmlspecialchars_decode($resp['text']));
        $html->set('autor', $resp['autor']);
        $html->set('date', $resp['date']);
        if ($resp['ocenka'] == 1) {
            $html->set('ocenka', 'like');
        } else {
            $html->set('ocenka', 'dislike');
        }
        if ($resp['ocenka'] == 1) {
            $html->set('ocenka_title', 'Положительнай отзыв');
        } else {
            $html->set('ocenka_title', 'Отрицательный отзыв');
        }
        global $cfg;
        $file = 'upload/avatars/' . $resp['uid'] . '.';
        $link = $cfg['http'] . 'upload/avatars/' . $resp['uid'] . '.';
        if (file_exists(ROOT . $file . 'jpg'))
            $html->set('ava', '/upload/avatars/' . $resp['uid'] . '.jpg');
        elseif (file_exists(ROOT . $file . 'png'))
            $html->set('ava', '/upload/avatars/' . $resp['uid'] . '.png');
        elseif (file_exists(ROOT . $file . 'gif'))
            $html->set('ava', '/upload/avatars/' . $resp['uid'] . '.gif');
        else
            $html->set('ava', $cfg['http'] . 'template/images/avatar.png');
        $html->pack('response');
    }
    
    $html->get('all', 'sections/response');
    $html->set('list', isset($html->arr['response']) ? $html->arr['response'] : '');
    $html->set('pages', isset($html->arr['pages']) ? $html->arr['pages'] : '');
    $html->pack('main');
?>

Код:
CREATE TABLE IF NOT EXISTS response (
`id` int(11) NOT NULL,
  `name` varchar(50) NOT NULL,
  `text` text NOT NULL,
  `autor` int(11) NOT NULL,
  `ocenka` int(11) NOT NULL,
  `status` tinyint(1) NOT NULL,
  `date` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
 
--
-- Индексы сохранённых таблиц
--
 
--
-- Индексы таблицы `response`
--
ALTER TABLE `response`
 ADD PRIMARY KEY (`id`);
 
--
-- AUTO_INCREMENT для сохранённых таблиц
--
 
--
-- AUTO_INCREMENT для таблицы `response`
--
ALTER TABLE `response`
MODIFY `id` INT(11) NOT NULL AUTO_INCREMENT;


Ошибка заключается в том что при добавлении отзыва пишет что комментарий отправился на МОДЕРНИЗАЦИЮ, но запись в БД не произведена ну...

В чем может быть ошибка? что я не углядел? кому не сложно поправьте =)
 
В этой теме было размещено решение! Перейти к решению.
Сообщения
207
Реакции
420
Помог
10 раз(а)
Я тебе ещё в Телеграмме сказал, что подставлять параметры напрямую в запрос - плохая идея. Там же спросил, что за тип используется у объекта $sql, но ответа так и не получил.
И инсерт делается по другому:
SQL:
INSERT INTO
  `table_name`
(`column1`, `column2`, ..., `columnX`)
VALUES
('Value1', 'Value2', ..., 'ValueX');
 
Сообщения
2,491
Реакции
2,790
Помог
61 раз(а)
И инсерт делается по другому:
На самом деле INSERT INTO table SET field=value также валидный запрос

Plejerka, У вас нет ни одной обработки ошибки. Откуда нам знать что у вас там не так. Проверяйте прошел ли запрос успешно. Если нет логгируйте ошибку.


P.S.
Всегда будет истина. isset вернет false только если переменная не обьявлена или равна null. $_POST суперглобальный массив который всегда равен массиву (даже если он пустой)
 
Сообщения
6
Реакции
1
fantom,
так в обработчике я уверен что все правильно...
мне главное нужно помочь в составлении таблицы самой.

C++:
CREATE TABLE IF NOT EXISTS response (
`id` int(11) NOT NULL,
`name` varchar(50) NOT NULL,
`text` text NOT NULL,
`autor` int(11) NOT NULL,
`ocenka` int(11) NOT NULL,
`status` tinyint(1) NOT NULL,
`date` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Индексы сохранённых таблиц
--

--
-- Индексы таблицы `response`
--
ALTER TABLE `response`
ADD PRIMARY KEY (`id`);

--
-- AUTO_INCREMENT для сохранённых таблиц
--

--
-- AUTO_INCREMENT для таблицы `response`
--
ALTER TABLE `response`
MODIFY `id` INT(11) NOT NULL AUTO_INCREMENT;
 
Сообщения
207
Реакции
420
Помог
10 раз(а)
в обработчике я уверен что все правильно
запись в БД не произведена
Если запись не отправляется, значит ошибка всё же произошла, и Вам надо её хоть как-то залоггировать, чтобы было, от чего опираться.
 
Сообщения
82
Реакции
83
Помог
5 раз(а)
Plejerka, это как понять? У тебя явно не проходит INSERT, как говорит CrazyHackGUT , тебе надо выяснить причину. Что есть $sql тоже не понятно. Половины кода нет, дебаг инфы тоже, поэтому тут как с серверами - экстрасенсы отдыхают =)
Если все же это вроде как PDO, у него есть обработка ошибок, которая подскажет где что не так.
 
Сообщения
207
Реакции
420
Помог
10 раз(а)
oxoTHuk, это точно не PDO. У него методов num() и get() нет, как минимум. У MySQLi тоже. Это скорее всего какая-то очередная библиотека работы с базой.
 
Сообщения
2,491
Реакции
2,790
Помог
61 раз(а)
так в обработчике я уверен что все правильно...
Вы точно уверены? Я нашел где у вас ошибка. Даже две. И они именно в запросе и структуре таблицы. Но я всегда считал что умение дебага важнее знания языка. Потому считаю что все же нужно логировать ошибку запроса.

Если кратко ошибки:
Поле name NOT NULL, что оззначает что оно обьязательное при инсерте. Ошибка Field 'name' doesn't have a default value
Поле `date` int(11) NOT NULL, что означает что оно число. Какого лешого вы вставляете строку. $date = date("y-m-d");

P.S. Больше искать ошибки за вас мне лень. Если вы не научитесь дебагу, то эт оваши личные пробелемы и программирование мяко говоря не ваша стихия.
 
Сообщения
6
Реакции
1
Если кратко ошибки:
Поле name NOT NULL, что оззначает что оно обьязательное при инсерте. Ошибка Field 'name' doesn't have a default value
Спасибо за помощь в данной ошибке...
получилось у меня, запись идет в БД ,Но
когда я пишу отзыв он записывается в бд, потом в админ панели я его одобряю и он меняет STATUS с 0 на 1 (одобрен) .
И вот тут возникаем у меня ступор
1) почему он его не выводит на страницу
2) у меня в инсерт написано autor который подтягивает $users тоесть ЛОГИН пользователя но этого не получается... в чем может быт еще ошибка.

по поводу логов и тд ни чего у меня не получилось сделать (если вкл лигирование действий) в БД не зайти
 
Сообщения
2,491
Реакции
2,790
Помог
61 раз(а)
Plejerka, у меня не включается телефон. Как починить?
Я надеюсь моя аналогия вам будет понятней и четко отобразит суть вашего вопроса. Я знать не знаю как у вас там все внутри устроено. Я написал, что мне больше не интересно заниматся вангованием. Научитесь дебажить.
 
Сообщения
6
Реакции
1
fantom, а как включить этот дебаж ваш,
ваш ответ, в ГУГЛИ посмотри так там говна больше чем инфы полезной... для этого форумы и придумали (типо вы в роле учителя)
вот и расскажите или ткните на ту информацию где мне ее найти
 
Сообщения
2,491
Реакции
2,790
Помог
61 раз(а)
Plejerka, самый простой и банальный способо на каждом шагу выводить переменные или результаты через var_dump
18 Апр 2019
Еще нашел оч древнюю но наверно самую полезную когда либо написаную статью. Жаль сайт уже не доступен, а в кэше гугла она сохранилась не совсем в первоизданном виде (HTML тэги внутри). Но все же настоятельно рекомендую к прочтению
http://webcache.googleusercontent.com/search?q=cache:http://phpfaq.ru/debug
 
Сообщения
6
Реакции
1
fantom,
либо я что-то не так понял в статье или вот что получилось

object(mysql)#2 (5) { ["sql_id"]=> object(mysqli)#4 (19) { ["affected_rows"]=> int(1) ["client_info"]=> string(6) "5.5.60" ["client_version"]=> int(50560) ["connect_errno"]=> int(0) ["connect_error"]=> NULL ["errno"]=> int(0) ["error"]=> string(0) "" ["error_list"]=> array(0) { } ["field_count"]=> int(2) ["host_info"]=> string(25) "Localhost via UNIX socket" ["info"]=> NULL ["insert_id"]=> int(0) ["server_info"]=> string(6) "5.6.43" ["server_version"]=> int(50643) ["stat"]=> string(137) "Uptime: 9938 Threads: 1 Questions: 79520 Slow queries: 0 Opens: 201 Flush tables: 1 Open tables: 161 Queries per second avg: 8.001" ["sqlstate"]=> string(5) "00000" ["protocol_version"]=> int(10) ["thread_id"]=> int(14390) ["warning_count"]=> int(0) } ["sql_connect"]=> bool(true) ["query"]=> bool(false) ["query_id"]=> object(mysqli_result)#5 (5) { ["current_field"]=> int(0) ["field_count"]=> int(2) ["lengths"]=> array(2) { [0]=> int(4) [1]=> int(10) } ["num_rows"]=> int(1) ["type"]=> int(0) } ["mysqlerror"]=> string(0) "" }

object(mysql)#2 (5) { ["sql_id"]=> object(mysqli)#4 (19) { ["affected_rows"]=> int(-1) ["client_info"]=> string(6) "5.5.60" ["client_version"]=> int(50560) ["connect_errno"]=> int(0) ["connect_error"]=> NULL ["errno"]=> int(1064) ["error"]=> string(146) "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1" ["error_list"]=> array(1) { [0]=> array(3) { ["errno"]=> int(1064) ["sqlstate"]=> string(5) "42000" ["error"]=> string(146) "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1" } } ["field_count"]=> int(1) ["host_info"]=> string(25) "Localhost via UNIX socket" ["info"]=> NULL ["insert_id"]=> int(0) ["server_info"]=> string(6) "5.6.43" ["server_version"]=> int(50643) ["stat"]=> string(137) "Uptime: 9810 Threads: 1 Questions: 78589 Slow queries: 0 Opens: 201 Flush tables: 1 Open tables: 161 Queries per second avg: 8.011" ["sqlstate"]=> string(5) "00000" ["protocol_version"]=> int(10) ["thread_id"]=> int(14207) ["warning_count"]=> int(0) } ["sql_connect"]=> bool(true) ["query"]=> bool(false) ["query_id"]=> bool(false) ["mysqlerror"]=> string(0) "" }
18 Апр 2019
fantom,
спасибо помогло во многом... смог сделать модуль ОТЗЫВЫ сайта.
тема закрыта
18 Апр 2019
не знаю на сколько правильно сделал, но работает а главное кк мне надо =)

в запросе изменил вот эти строчки.
Код:
$status = explode("_", $request);
    $sql->query('SELECT `id` FROM `response`');
    $aPage = sys::page($page, $sql->num(), $cfg['response_page']);
    sys::page_gen($aPage['ceil'], $page, $aPage['page'], 'response');
    $sql->query('SELECT * FROM `response` where status=1 ORDER BY `id` DESC LIMIT ' . $aPage['num'] . ', ' . $cfg['response_page']);
    while ($resp = $sql->get()) {
НА
Код:
    $status = explode("_", $request);
    $sql->query('SELECT * FROM (SELECT `id`, `text`, `autor`, `date`, `ocenka` FROM `response` where status=1 ORDER BY `date` DESC LIMIT 30) t ORDER BY `date` ASC;');
 
Статус
В этой теме нельзя размещать новые ответы.

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу