За последние 24 часа нас посетил 17631 программист и 1284 робота. Сейчас ищут 1490 программистов ...

Не работает код

Тема в разделе "Сделайте за меня", создана пользователем kobzelik, 2 авг 2016.

  1. kobzelik

    kobzelik Новичок

    С нами с:
    19 июл 2016
    Сообщения:
    15
    Симпатии:
    0
    PHP:
    1. <?php
    2.               'localhost',
    3.             'root',      
    4.             '',  
    5.             'kek_');
    6. $content = mysqli_real_escape_string($link, $_POST['text']);
    7. $id = mysqli_query($link, "SELECT MAX(id) AS id FROM kek;");
    8. $result = mysqli_query($link, "INSERT INTO kek (count, id, content) VALUES ('0', '$id+1', $count);");
    9.  
    10. ?>
    Что с этим делать? Ничего не добавляет в таблицу... Совсем!
     
  2. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Там ещё много чего нужно дописать. Несколько проверок. Потом получить данные, потому что mysqli_query вернёт ресурс, а нужно из него получить цифру.
    В документации есть примеры.
    --- Добавлено ---
    Переменная $content не используется нигде
    --- Добавлено ---
    $count не объявлена
    --- Добавлено ---
    $id+1 так не должно прибавлять, просто текст
     
    kobzelik нравится это.
  3. kobzelik

    kobzelik Новичок

    С нами с:
    19 июл 2016
    Сообщения:
    15
    Симпатии:
    0
    PHP:
    1. <?php
    2.  
    3.               'localhost',
    4.             'root',      
    5.             '',  
    6.             'kek_');
    7. $content = mysqli_real_escape_string($link, $_POST['text']);
    8. $id_ = mysqli_query($link, "SELECT MAX(id) AS id FROM kek;");
    9. $row = mysql_fetch_row($id_);
    10. $id = $row[0];
    11. $result = mysqli_query($link, "INSERT INTO kek (count, id, content) VALUES ('0', id=$id+1, $content);");
    12.  
    13. ?>
    Сделал так , но все равно не работает! Что тут не так?
     
  4. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Всё не так, жди, может кто-то сделает за тебя. Но могу и дальше подсказывать. Нужно?
     
  5. kobzelik

    kobzelik Новичок

    С нами с:
    19 июл 2016
    Сообщения:
    15
    Симпатии:
    0
    @denis01 конечно
    ну если можно
     
  6. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Вот почитай как включить отображение ошибок, по ним уже можно будет понять, что не так
    http://phpfaq.ru/debug
     
  7. kobzelik

    kobzelik Новичок

    С нами с:
    19 июл 2016
    Сообщения:
    15
    Симпатии:
    0
    @denis01 включил , но все равно когда отправляю текст белый экран без ошибок
     
  8. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    @kobzelik странно, может всё криво настроено на сервере
     
  9. kobzelik

    kobzelik Новичок

    С нами с:
    19 июл 2016
    Сообщения:
    15
    Симпатии:
    0
    @denis01 щас попробую на vds и отпишусь
    Мож XAMPP реально глючный
     
  10. kobzelik

    kobzelik Новичок

    С нами с:
    19 июл 2016
    Сообщения:
    15
    Симпатии:
    0
    @denis01 на VDS тоже не работает
    странно
     
  11. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    можно в скрипт добавить phpinfo(); и запустить, там уже искать display errors, должно быть yes
    --- Добавлено ---
    покажи последние изменения
     
  12. kobzelik

    kobzelik Новичок

    С нами с:
    19 июл 2016
    Сообщения:
    15
    Симпатии:
    0
  13. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    После 12 строчки можно сделать:
    PHP:
    1. echo "INSERT INTO kek (count, id, content) VALUES ('0', id=$id+1, $content);";
    Результат в PHPMyAdmin и через него выполнить SQL запрос, чтобы посмотреть нет ли ошибок в нём. Ну и сюда выложи что echo покажет.
     
    kobzelik нравится это.
  14. rodent90

    rodent90 Новичок

    С нами с:
    26 мар 2015
    Сообщения:
    533
    Симпатии:
    37
    Зачем тебе это: $id+1 ? Да еще и дабл-запрос, когда можно это все в одном написать.
    И не проще ли сделать авто-инкремент?
    И вот еще что:
    Запрос не должен заканчиваться точкой с запятой. Данные в запросе должны быть корректно проэкранированы.
    А также должна быть правильно выставлена кодировка (коей у тебя нет), иначе ничего тебя не спасет и ты даже подозревать не будешь.
    Есть еще такой способ добавления:
    PHP:
    1. "INSERT INTO `kek` SET `count`='0', `content`='{$content}'"
     
  15. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Вроде когда я читал, запрос надо было завершать точкой с запятой, когда отменили?
     
  16. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    @mahmuzar запрос заканчивается точкой с запятой в самом языке. Когда ты выполняешь query/exec и тому подобные аналоги различных клиентских библиотек - оно уже выполняет запрос. Если ты в своем запросе использует точку с запятой, то клиент разделит строку на Н+1 запросов где Н - число семиколонов. Ну то есть SELECT 1 FROM table; в консоле mysql выполняет 1 запрос, а в PHP - два.
     
    mahmuzar нравится это.
  17. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Я так понимаю в mysqli поведение пофиксили. В мануале по mysql_query прям есть целое предложение на эту тему. В мануале по mysqli_query - уже нет.
     
  18. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    @Ganzal, спасибо не знал.
    Выполняет один и тот же запрос два раза? или же ожидает что после ';' будет еще один запрос?
     
  19. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Выполняет пустой запрос, который завершается ошибкой. Я в свое время обратил внимание на огромные значения счетчиков запросов и фейлов в статистике СУБД и на странности в поведении своих кодов при обновлениях и выборках. Нашел про семиколон, убрал его везде, и всё стало работать стабильно и предсказуемо. Эх, молодость...
     
  20. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Скорее всего да, я использую PDO, потестил, не замечаю чтобы ошибки валились. У меня всегда стояли точки с запятой после запроса.
    Так получилось что я учить mysql начал с консольки, поэтому наверно вошло в привычку.

    И хотелось бы теперь точно знать, стоит ли мне это дело так оставлять, или же убрать везде точки с запятой?
     
  21. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    @mahmuzar ну если они не нужны по факту - зачем их гонять на сервер?)
     
  22. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    @Ganzal, не плохая привычка)). Это как всегда ставить точку с запятой в js))
     
  23. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Не совсем так. \g и ; это указание консольному клиенту начать выполнение последовательности байт слева как скуэль запроса. Клиентские библиотеки языков и так выполняют запрос с переданным текстовым аргументом или подготовленном на стороне сервера. Зачем в этом запросе выполнять команду выполнения запроса? Семиколон в джаваскрипте не является логическим нарушением. Он там не мешает, но ты при этом не теряешь скил в япах, где семиколон обязателен для разделения команд.
     
  24. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    ага, после твоего поста прочитал про это. Я к тому что поведение PDO нормальное, раз так, значит как ты писал его пофиксили, поэтому спрашивается имеет ли смысл убирать везде ";".
     
  25. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Я тебе выше аргументировал за убрать её из запросов. Зачем она там тебе если она там не нужна? Сама функция уже и есть команда запуска выполнения запроса. Зачем тебе еще одна команда внутри самого запроса? Да, библиотека её скорее всего выпиливает перед трансляцией запроса на сервер, но вопрос-то не в том как оно под капотом работает, в а том что в голове у программиста что он внутри команды пишет команду. Пример из личного опыта: я вот очень люблю писать echo sprintf(...); "А что тебе мешает писать сразу printf?" спросил знакомый. А ведь и правда. Что... Ну как есть слова-паразиты, так есть и конструкции-паразиты видимо. Точка с запятой в тексте аргумента метода выполнения запроса к субд - одно из проявлений такого паразита. ТсЗ в ДЖ - не проявление, потому что практика для других япов. Как-то так.
     
    mahmuzar нравится это.