Вопросы нуба в PDO, PHP и многом другом

LoneSimba

Нубило-всея-планеты
Хорошо, сделаю в query_DB заготовленные запросы для PDO. Но как указать какой из 3 заготовленных нужно использовать? Как то указать тип заготовки параметром? В таком случае надо как то проверять, что pdo используется, что бы не указывать типы запросов при той же mysqli. С подсчетом через PDO разобрался, с mysql как БД rowCount() работает. Но вопросы касательно запроса mysqli::num_rows так и не решены.
 

Фанат

oncle terrible
Команда форума
а если мне, допустим, надо будет подсчитать реальное число пользователей, у которых поле ban содержит false?
Это делается обычным запросом.
к функциям типа num_rows эта задача не имеет никакого отношения.
$query1 = $pdo->prepare("SELECT * FROM users WHERE id= ?");
За такие запросы надо по рукам бить, причем не линейкой, а молотком.
Запрос должен быть только такой:
PHP:
$query1 = $pdo->prepare("SELECT count(*) FROM users WHERE id= ?");
 

Фанат

oncle terrible
Команда форума
Но как указать какой из 3 заготовленных нужно использовать?
Если уж такая блажь ударила в голову, то пиши для каждого отдельный метод.
С подсчетом через PDO разобрался, с mysql как БД rowCount() работает.
Ты русский язык понимаешь вообще в принципе?
 

LoneSimba

Нубило-всея-планеты
Так почитаю сообщения и понимаю, что правильно не решил на своем уровне "знаний" с пдо работать.
 

Фанат

oncle terrible
Команда форума
Ну так уровень знаний надо повышать.
Ты же зачем-то взялся писать этого монстра с первой страницы?
Значит, нужда в получении знаний есть.
Вот и получай. Для этого этот форум и существует.

Для начала сформулируй, чего ты хочешь от своего класса, какие задачи хочешь решать.
После этого будет понятно, как его писать.
 

LoneSimba

Нубило-всея-планеты
В общем, с num_rows разобрался. Если будет еще что, напишу сюда же. Чисто, чтоб темы не плодить свои
 

LoneSimba

Нубило-всея-планеты
ПОЯВИЛСЯ НОВЫЙ ВОПРОС!
Стал прикручивать database.class.php к другим модулям, в одном из них экземпляр класса создаваться отказывается. Собственно, вот код:
PHP:
define('DEFAULT_THEME', 'rc_black');
define('THEME_DIR','../themes/');

require("./database.class.php");
require("../config.php");
$database = new Database($config);

/**
* Class Render
*/
class Render
{
    private $vars;
    public $renderedPage;

    /**
     * Render constructor.
     * @param $mobileDetect
     */
    public function __construct($mobileDetect)
    {
        $this->mobileDetect = $mobileDetect;
    }

    /**
     * Загружает файл шаблона страницы
     * @param string $theme тема, из которой нужно загрузить шаблон
     * @param string $file файл шаблона
     */
    public function getTemplate($theme, $file)
    {
        global $themes;
        $chkd_theme = null;
        $chkd_file = null;

        if(!empty($theme) && in_array($theme, $themes))
        {
            $chkd_theme = $theme;
        }
        else
        {
            $chkd_theme = DEFAULT_THEME;
        }

        if($this->mobileDetect->isMobile() || $this->mobileDetect->isTablet())
        {
            $themeDir = THEME_DIR . '/' . $chkd_theme . '/mobile/';
        }
        else
        {
            $themeDir = THEME_DIR . '/' . $chkd_theme . '/desktop/';
        }

        if(!empty($file) && file_exists($themeDir . $file))
        {
            $chkd_file = $file;
            $this->renderedPage = file_get_contents($themeDir . $chkd_file);
        }
        else
        {
            $this->renderedPage = "<error>No Theme Found</error>";
        }
    }

    /**
     * Создает элемент меню по данным БД
     * @return string $menu элемент меню
     */
    public function generateMenu()
    {
        $m_query = Database::query_DB("SELECT * FROM `menu`");

        $menu = '<ul id="menu">';

        while($m_array = Database::fetch_array_DB($m_query)) {
            $menu .= '<li><a href="' . $m_array['link'] . '">' . $m_array['name'] . '</a>';
        }

        $menu .= '</ul>';

        return $menu;
    }

    /**
     * Получает тему, установленную у пользователя
     * @param string $login имя пользователя
     * @return string $theme название темы
     */
    public function getUserTheme($login)
    {
        if($login!="Offline")
        {
            $t_query = Database::query_DB("SELECT * FROM `users` WHERE `name`='" . $login . "'");
            $t_array = Database::fetch_array_DB($t_query);

            $theme = $t_array['theme'];
        }
        else
        {
            $theme = DEFAULT_THEME;
        }

        return $theme;
    }

    /**
     * Заменяет указанный $key в шаблоне на элемент $var
     * @param string $key ключ, который надо заменить
     * @param string $var элемент, на который производится замена
     */
    public function setElement($key, $var)
    {
        $this->vars[$key] = $var;
    }

    /**
     * Обрабатывает шаблон согласно данных, указанных пользователем с помощью setElement()
     */
    public function render()
    {
        foreach($this->vars as $find => $replace)
        {
            $this->renderedPage = str_replace($find, $replace, $this->renderedPage);
        }
    }
}
Попытался вызывать Database:: но редактор ругается на то, что нестатичную функцию вызываю как статичную. $database внутри класса не обнаруживает, при попытке создать внутри выдает ошибку Unexpected. Просвятите! PS - уж и по поводу сего модуля просветите, сгодится или переделывать с нуля?
 

AnrDaemon

Продвинутый новичок
Выбери что-нибудь одно.
Либо ты в файле объявляешь класс, либо ты в файле делаешь работу.
Как сейчас, у тебя очевидная проблема, но из-за того, что у тебя в файле помойка, ты её не в состоянии увидеть.
 

LoneSimba

Нубило-всея-планеты
Выбери что-нибудь одно.
Либо ты в файле объявляешь класс, либо ты в файле делаешь работу.
Как сейчас, у тебя очевидная проблема, но из-за того, что у тебя в файле помойка, ты её не в состоянии увидеть.
мой сайт работает на https://1drv.ms/u/s!AhUWidfO9frUgRf13_QBwK7Dfsxm более года. писал в течение недели, порядка 70% списано с учебника. с сайтом никаких проблем. и да, тот код даже я не прочту, хоть и писал его я. либо что-то конкретное пиши, либо не пиши вовсе. меня на форуме mcmodding.ru за комменты как твой банили. ps - вот сайт: russiancraft.su
 

LoneSimba

Нубило-всея-планеты
ребят, как Фанат отметил выше, "Ну так уровень знаний надо повышать.
Ты же зачем-то взялся писать этого монстра с первой страницы?
Значит, нужда в получении знаний есть.
Вот и получай. Для этого этот форум и существует." Он прав. Если бы я не хотел чужого мнения - на форум бы не пошел. Но пришел сюда за знаниями, а не вашим навыком обливания всего и вся грязью. Не имей я желания совершенствовать этого монстра, я бы скачал Jooloma какой-нибудь и сидел бы на нем. Или webMCR, благо опыт работы с ним есть. И сидел бы на МСР, да только больше половины функций нафиг не нужны, а форум к нему за 1к рублей выложен. Потому и взялся за свое. То, что выложил раньше не поддалось улучшению, и уже почти год я маюсь с этим монстром. Могу гит скинуть, там все есть. И старые варианты, которые тоже работали. https://github.com/VovaMaster/RCE вот. Я пришел за помощью, а не обсером.
 

LoneSimba

Нубило-всея-планеты
http://www.cyberforum.ru/php-oop/thread1079398.html копался по сети, по ссылке до текста предлагают в классе, где нужно использовать БД(в моем случае) нужно создать static переменную и через static функцию в переменную записать экземпляр. Я подумывал просто функции БД объявить static, но в сети не нашел ничего, что могло бы указать, стоит так делать или нет.
 

AnrDaemon

Продвинутый новичок
Ты флажок-то на аватаре смени… Такие претензии мне привычнее слышать от американцев.
Это у них, если ты не пресмыкаешься и не лебезишь, значит задница и тролль.
То, что ты понимаешь, что упёрся со своим текущим подходом в потолок - это хорошо.
А вот то, что ты не понимаешь, что потолок можно пробить, только сменив подход, это плохо.
 

LoneSimba

Нубило-всея-планеты
Ты флажок-то на аватаре смени… Такие претензии мне привычнее слышать от американцев.
Это у них, если ты не пресмыкаешься и не лебезишь, значит задница и тролль.
То, что ты понимаешь, что упёрся со своим текущим подходом в потолок - это хорошо.
А вот то, что ты не понимаешь, что потолок можно пробить, только сменив подход, это плохо.
флажок с гаватара висит, а других файлов на компе с размером 200х200 и размером <9.5кб у меня на компе не существует. Сменив подход? Ок. Только укажи конкретно. Я, знаешь ли(хотя откуда), расплывчатые намеки не воспринимаю. Либо прямо говори, что и где не так, либо не говори вовсе. Учится негде этому даже в Москве, либо я этих мест не знаю(кроме МГУ, где курсы 5к стоят и те по С++, докуда из Строгина надо еще добратся). Книги-самоучители тоже плохо воспринимаю, и видео из той же категории.
 

AmdY

Пью пиво
Команда форума
Книги-самоучители тоже плохо воспринимаю, и видео из той же категории.
Может взять нормальную книгу, а не самоучитель языка за 24 часа? Почитай документацию на http://php.net/manual/ru/language.oop5.php
Но не жди, что здесь тебе будут давать готовые ответы на элементарные вопросы, у форума формат не такой, он для тех, кто старается думать сам и учится воспринимать книги.
 

Фанат

oncle terrible
Команда форума
Про рендер уже сказали, а Database - это ад.
Возьми хотя бы мой примитивный PDO wrapper
PHP:
$theme = DB::run("SELECT theme FROM `users` WHERE `name`=?", [$login])->fetchColumn();
получится и короче, и без инъекций, а главное - работает.
 
Последнее редактирование:

LoneSimba

Нубило-всея-планеты
Может взять нормальную книгу, а не самоучитель языка за 24 часа? Почитай документацию на http://php.net/manual/ru/language.oop5.php
Но не жди, что здесь тебе будут давать готовые ответы на элементарные вопросы, у форума формат не такой, он для тех, кто старается думать сам и учится воспринимать книги.
я и не брал такую. около месяца ушло. я и живое общение не воспринимаю, так как людей не терплю.
 

AmdY

Пью пиво
Команда форума
Плохо читал, раз не знаешь разницу между статичной функцией и обычной. Плюс не знаешь про глобалы, раз не понимаешь почему не видно $database, хотя в методе выше кто-то подсказал использовать global $themes;
Перечитай всё ещё раз или сколько там понадобится.
И ты упоминал джумлу. Её можешь не использовать, но посмотреть не мешало бы, раз уж занялся велосипедостроением.

И всем плевать любим ли мы живое общение и как воспринимаем книги и учебное видео, это наши личные проблемы, которые не могут служить оправданием.
 
Сверху