За последние 24 часа нас посетили 54986 программистов и 1748 роботов. Сейчас ищут 832 программиста ...

Непонимаю в чем ошибка... Помогите

Тема в разделе "PHP для новичков", создана пользователем Cyrius, 20 ноя 2016.

  1. Cyrius

    Cyrius Активный пользователь

    С нами с:
    3 июл 2016
    Сообщения:
    98
    Симпатии:
    4
    PHP:
    1. $_GET['id'] = $cat;
    2.  
    3. $result = mysql_query("SELECT * FROM `articles` WHERE categoryid=$cat")or die(mysql_error());
    4. $array = mysql_fetch_array($result)or die(mysql_error());
    5. echo $array;

    на этот код он ругается так - 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
     
  2. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    @Cyrius, запрос выполняется в PhpMyAdmin?
     
  3. alexforce2

    alexforce2 Активный пользователь

    С нами с:
    25 дек 2013
    Сообщения:
    71
    Симпатии:
    12
    Надо проверить, что храниться в переменной $cat.
    Или лучше вывести на странице сам запрос
    PHP:
    1. echo "SELECT * FROM `articles` WHERE categoryid=$cat";
    Потом пробовать скормить полученный запрос mysql.
     
  4. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    нужно переменную $cat взять в одинарные кавычки. Вот так '$cat'. и всё должно заработать. Даже с моим практически отсутствующим знанием английского отлично понятно, что ругань направлена на синтаксис в первой строке запроса к БД.

    P. S. Модераторы уже отчаялись ругаться на подобные названия тем, ибо бесполезно.
    --- Добавлено ---
    А первой строке кода не нужно местами поменять то, что рядом со знаком "=" ?
     
  5. alexforce2

    alexforce2 Активный пользователь

    С нами с:
    25 дек 2013
    Сообщения:
    71
    Симпатии:
    12
    Тут не всё так однозначно, если судить по названию колонки "categoryid", то это числовая колонка, а в поисковом условии числа заключать в кавычки не обязательно. Там, скорее всего, переменная $cat равна NULL или какой-то строке.
     
  6. Cyrius

    Cyrius Активный пользователь

    С нами с:
    3 июл 2016
    Сообщения:
    98
    Симпатии:
    4
    Изменил код, напечатал массив ГЕТ, он не пустой. А при выполнении кода
    PHP:
    1. var_dump($_GET);
    2. $_GET['id'] = $cat;
    3. echo "<br>"."SELECT * FROM `articles` WHERE categoryid=".$_GET["id"];
    показывает это
    [​IMG]
     
  7. Anhk

    Anhk Активный пользователь

    С нами с:
    13 дек 2015
    Сообщения:
    219
    Симпатии:
    11
    у тебя на второй строке элемент id суперглобального массива $_GET перезаписывается значением переменной $cat
    проверяй её
     
  8. Cyrius

    Cyrius Активный пользователь

    С нами с:
    3 июл 2016
    Сообщения:
    98
    Симпатии:
    4
    И еще, если заменить в запросе идентификатор на цифру, то при выполнении кода, он выводит просто надпись ARRAY ... Напечатал вардампом этот массив я получаю все данные из него как положено.. ТО есть они там присутствуют. Почему он их не выводит нормально, а заменяет словом array?
    Код (Text):
    1. $res = mysql_query("SELECT FROM `articles` WHERE categoryId=2");
    2. $art = mysql_fetch_array($res);
    --- Добавлено ---
    в ней null... Странно.
    --- Добавлено ---
    Убрал я полностью переменную $cat и суперглобальный массив начал работать нормально.. Видимо я просто намудрил почем зря. Спасибо что помогли решить этот вопрос
     
  9. Anhk

    Anhk Активный пользователь

    С нами с:
    13 дек 2015
    Сообщения:
    219
    Симпатии:
    11
    про mysql_fetch_array почитай детальнее
    и да, как бы... юзать mysqlI или PDO
    --- Добавлено ---
    эта ф-я возвращает тебе массив, с которым ты далее и должен работать.
    типа $tmp = mysql_fetch_array($res); echo $tmp['elementMassiva'];
     
  10. Cyrius

    Cyrius Активный пользователь

    С нами с:
    3 июл 2016
    Сообщения:
    98
    Симпатии:
    4


    У меня опять проблема, не понимаю в чем суть.. Вот код по добавлению статьи:
    PHP:
    1. echo "<pre>";
    2. var_dump($_POST);
    3. echo "</pre>";
    4.     if(!empty($_POST['name_m'])){
    5.      mysql_query("INSERT INTO `articles` (`categoryId`,`title`,`summary`,`content`,`publicationDate`) VALUES (".$_POST['id'].",".$_POST['name_m'].",".$_POST['summary'].",".$_POST['text'].",".date('d-m-Y').")",$db)or die("Ошибка при добавлении новой статьи - ".mysql_error());}
    Вот то что он пишет после отправки формы и выполнении кода
    [​IMG]

    Зарание спасибо
     
  11. alexforce2

    alexforce2 Активный пользователь

    С нами с:
    25 дек 2013
    Сообщения:
    71
    Симпатии:
    12
    Во первых, надо смотреть sql который собирается
    PHP:
    1. echo "INSERT INTO `articles` (`categoryId`,`title`,`summary`,`content`,`publicationDate`) VALUES (".$_POST['id'].",".$_POST['name_m'].",".$_POST['summary'].",".$_POST['text'].",".date('d-m-Y').")";
    Во вторых, при вставке в sql не цифровых значение, эти значения надо обрамлять кавычками
    Код (Text):
    1. INSERT INTO `articles` (`title`, `content`) VALUES ('Title Example', 'Content Example');
    такой код работать не будет
    Код (Text):
    1. INSERT INTO `articles` (`title`, `content`) VALUES (Title Example, Content Example);
    В тертьих, твой код подвержен sql инъекциям, не надо пользоваться ни mysql_*, ни mysqli_* функциями, надо использовать PDO
     
  12. Anhk

    Anhk Активный пользователь

    С нами с:
    13 дек 2015
    Сообщения:
    219
    Симпатии:
    11
    чем mysqli не годится?
     
  13. alexforce2

    alexforce2 Активный пользователь

    С нами с:
    25 дек 2013
    Сообщения:
    71
    Симпатии:
    12
    хотел сказать, что если учиться, то лучше уж изучать более современные подходы - PDO. как мне кажется
     
  14. Cyrius

    Cyrius Активный пользователь

    С нами с:
    3 июл 2016
    Сообщения:
    98
    Симпатии:
    4
    PDO?
     
  15. ArsNet

    ArsNet Новичок

    С нами с:
    24 май 2016
    Сообщения:
    288
    Симпатии:
    24
    Адрес:
    Владивосток
    В запросе $cat возьмите в одинарные ковычки, чтобы получилось `categoryid`='$cat'.

    И что-то не совсем понятно зачем вы в глобальную переменную $_GET['id'] заносите значение переменной $cat.
    Это кокой-то хитрый ход? Посвятите пожалуйста если не трудно.
     
  16. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    ИМХО больше похоже на хитрое непонимание происходящего.
     
  17. ArsNet

    ArsNet Новичок

    С нами с:
    24 май 2016
    Сообщения:
    288
    Симпатии:
    24
    Адрес:
    Владивосток
    А че тут понимать?

    1. $_GET['id'] = $cat;

    2. $result = mysql_query("SELECT * FROM `articles` WHERE categoryid=$cat")or die(mysql_error());
    3. $array = mysql_fetch_array($result)or die(mysql_error());
    4. echo $array;

    Смысл в $_GET['id'] заносить $cat?
    Если ее получить через ссылку: http://blablabla.bla/index.php?id=$cat;

    При переходе по ссылке и получим, что $_GET['id'] = $cat;
    Мне не понятно зачем в начале кода это делать. Яб понял если бы было записано:
    $cat = $_GET[id];
    Это понятно что ловим глобальную переменную и заносим ее значение в переменную $cat, а вот в обратной записи смысла вообще не вижу.
     
  18. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Слушай, а я думал для вывода массива, print_r или var_dump нужно использовать.
     
  19. ArsNet

    ArsNet Новичок

    С нами с:
    24 май 2016
    Сообщения:
    288
    Симпатии:
    24
    Адрес:
    Владивосток

    Я вот про это:
    $_GET['id'] = $cat
    Мне не понятно зачем в начале кода это делать. Яб понял если бы было записано:
    $cat = $_GET[id];

    Про занесение в глобальную переменную обычной переменной, а не про выборку с базы. Там то все понятно.
     
  20. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Вы не правы, не только pdo является современным.
    Mysqli вполне современный метод работы с базой данных на php.
    Цитирую с источника все сущего для web http://secure.php.net/manual/ru/
    "Внимание! Данное расширение устарело, начиная с версии PHP 5.5.0, и удалено в PHP 7.0.0. Используйте вместо него MySQLi или PDO_MySQL."
    --- Добавлено ---
    @ArsNet А цитирование не видел есть кнопочка ?) Я думал это ты написал так. :)
    --- Добавлено ---
    @ArsNet Да у чувака проблемы с пониманием логики и не хватка знаний ему бы взять открыть мануал и почитать )
     
  21. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    Я имел в виду автора, который куда то пропал...
     
  22. ArsNet

    ArsNet Новичок

    С нами с:
    24 май 2016
    Сообщения:
    288
    Симпатии:
    24
    Адрес:
    Владивосток
    Я думаю что вот так вот будет запись правильнее:

    1. Код (Text):
      1. $cat = $_GET['id'];
      2.  
      3. $result = mysql_query("SELECT * FROM `articles` WHERE `categoryid`='$cat'");
      4. $array = mysql_fetch_array($result)or die(mysql_error());
      5. echo $array['id'];
    А то, что что у вас написано по моему это глупость какая-то. Вы засовываете в переменную $_GET['id'] значение переменной $cat (Подозреваю что она до этого объявлена так и не была). Хотя тут тоже странно почему РНР в током случае не ругается что переменная не известна.

    Получается Вы присваиваете значение переменной в GET но делаете выборку с базы все равно по чему то по переменной $cat.
    Первое что надо иметь при программировании это логику. По вашему коду я наблюдаю полное ее отсутствие (прошу прощения если оскорбил, но факт остается фактом). Посмотрите на свой код потом на тот что я вам написал, сравните и подумайте где логика и кокой код логичнее.

    Если нету в коде логики то это не код а набор операторов и бессмысленной писанины. Учитесь рассуждать логично.

    И раз уж вы начали использовать в запросе к MySQL `` то используйте их для всех имен столбцов таблицы, а значения переменных выделяйте ''.
     
  23. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    :D Ты наверно хотел сказать print_r или var_dump?)
     
  24. ArsNet

    ArsNet Новичок

    С нами с:
    24 май 2016
    Сообщения:
    288
    Симпатии:
    24
    Адрес:
    Владивосток
    Да это пофигу как выводить значение зависит от поставленной задачи смотря что вывести необходимо. Главное чтобы суть человеку была понятна
     
  25. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    [​IMG]
    Теперь чтобы показать массив будем использовать echo. Ломай систему ( echo Array() ). Боюсь только конституция php будет против.