За последние 24 часа нас посетили 33583 программиста и 1515 роботов. Сейчас ищут 1003 программиста ...

Проблема с подставкой переменной

Тема в разделе "PHP для новичков", создана пользователем ArtemPetesburg, 3 июн 2018.

  1. ArtemPetesburg

    ArtemPetesburg Новичок

    С нами с:
    11 май 2018
    Сообщения:
    48
    Симпатии:
    2
    Адрес:
    Санкт-Петербург
    Всем еще раз привет, надоел наверное вам уже, но вот встретился с такой проблемой... есть переменная $posty["name"]; С помощью которой выводиться имя из базы данных. Но почему то она не подсавляется в следующую функцию в запрос к базе данных
    Код (Text):
    1. require_once ('db.php');
    2.  
    3.     $p_id = $_GET["name_id"];
    4.    
    5.     $sql = "SELECT * FROM `categores` WHERE id = " . $p_id;
    6.    
    7.     $result = mysqli_query($link, $sql) or die(mysqli_error($link));
    8.    
    9.     $posty = mysqli_fetch_assoc($result);
    10.    
    11.  
    12. echo $posty["name"];  
    13.     $name = $posty["name"];
    14. /*ФК*/
    15.        
    16.     function get_post () {
    17.        
    18.         $name = "head";
    19.        
    20.         global $link;
    21.        
    22.         $sql = "SELECT * FROM `".$name."` ORDER BY `id` DESC";
    23.            
    24.         $result = mysqli_query($link, $sql);
    25.        
    26.         $posts = mysqli_fetch_all($result, MYSQLI_ASSOC);
    27.        
    28.         return $posts;
    29.     }
    30.     $posts = get_post();
    когда обращаюсь просто
    Код (Text):
    1. echo $posty["name"];
    То выводит на экран слово " head" то что и должно быть... а когда делаю вот так
    Код (Text):
    1. $name = $posty["name"];
    то он при запросе к БД выдает ошибку... воз сам запрос когда подставляю ее уже

    Код (Text):
    1. $sql = "SELECT * FROM `".$name."` ORDER BY `id` DESC";
    Notice: Undefined variable: posty in C:\xampp\htdocs\tetst\head2.php on line 41

    Warning: mysqli_fetch_all() expects parameter 1 to be mysqli_result, boolean given in C:\xampp\htdocs\tetst\head2.php on line 49


    Почему он не передает нормальное значение из переменной полученной из БД, в обычную БД?
     
  2. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.597
    Симпатии:
    1.764
    Читаем про глобальные и локальные переменные в PHP. Так и загугли
     
  3. ArtemPetesburg

    ArtemPetesburg Новичок

    С нами с:
    11 май 2018
    Сообщения:
    48
    Симпатии:
    2
    Адрес:
    Санкт-Петербург
    щас прочту
    --- Добавлено ---
    тойсть если сделать ее глобальной в функции то она заработает? А так он получаеться ее просто не видит?
    --- Добавлено ---
    От спасибо, один вопрос а так можно делать?
    Код (Text):
    1. global $link,$name;
    Но в принципе работает все, спасибо!
     
  4. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.597
    Симпатии:
    1.764
    Наверное можно, попробуй :) В серьёзных программах редко встречается много глобальных переменных
     
    ArtemPetesburg нравится это.
  5. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Лучге ооп с синлтоном глобал это совсем дико.
     
  6. ArtemPetesburg

    ArtemPetesburg Новичок

    С нами с:
    11 май 2018
    Сообщения:
    48
    Симпатии:
    2
    Адрес:
    Санкт-Петербург
    Я ооп еще не узучал:)
     
  7. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.857
    Симпатии:
    656
    Объект-соединение с БД нормально держать в глобальной переменной, если не используешь ООП. Но а если охота поизвращаться с избавлением от глоб. видимости, копай в сторону статической локальной переменной.

    Я не до конца понимаю, как соотносится название ф-ции с ее содержимым. И не увидел внутри ф-ции проверку результата запроса.
     
  8. ArtemPetesburg

    ArtemPetesburg Новичок

    С нами с:
    11 май 2018
    Сообщения:
    48
    Симпатии:
    2
    Адрес:
    Санкт-Петербург
    Я уже разобрался, а проверка там не нужна на мой взгляд:) Но спасибо
     
  9. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.857
    Симпатии:
    656
    PHP:
    1. \\ допустим, ошибка
    2.         $result = mysqli_query($link, $sql);
    3. \\ ..здец без всяких «допустим»
    4.         $posts = mysqli_fetch_all($result, MYSQLI_ASSOC);
    Ошибки при выполнении запросов могут появляться даже тогда, когда код с виду правильный, причем их появление будет не постоянным, поэтому их трудно отследить. Надеяться в данном вопросе на одно только глушение ошибок в продакшене неправильно.
     
  10. Sergey_Tsarev

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

    С нами с:
    17 мар 2016
    Сообщения:
    502
    Симпатии:
    105
    PHP:
    1. /*...*/
    2.  
    3. $posty = mysqli_fetch_assoc($result);
    4.  
    5.      
    6.     function get_post ($name) {
    7.      
    8.         global $link;
    9.      
    10.         $sql = "SELECT * FROM `".$name."` ORDER BY `id` DESC";
    11.          
    12.         $result = mysqli_query($link, $sql);
    13.      
    14.         $posts = mysqli_fetch_all($result, MYSQLI_ASSOC);
    15.      
    16.         return $posts;
    17.     }
    18.     $posts = get_post($posty["name"]);
    19.    
    20. /*...*/