Задать вопрос
  • Как в модели БД реализовать динамический список?

    @MAGistr_MTM
    Учусь программировать
    Вам нужно ManyToMany
    Ответ написан
    Комментировать
  • Для чего в MVC модель?

    irishmann
    @irishmann
    Научись пользоваться дебаггером
    Комментировать
  • Как получить товар с несколькими картинками?

    @grinat
    Если через джойны, то вернётся столько записей сколько картинок. Юзай орм, если свой велосипед, то первый запрос обычный селект, запоминаешь id, и вторым запросом дергаешь картинки через product_id IN. Если любитель потрахаться то есть разные concat, оконные функции, можно просто свою процедуру написать
    Ответ написан
    2 комментария
  • Как получить товар с несколькими картинками?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Мой вам совет - не гонитесь за крутизной а ля "я выбрал все одним запросом", в данном случае это не лучшее решение, как ни странно. Я не знаю как у вас организованна работа с коллекциями объектов, в моем случае любой объект наследуемый от базового(итем, брэнд, пост, юзер...) имеет поле $haveImages, и при формировании коллекции объект коллекции получает все id выборки в отдельный массив, а массив выбранных и инициализированных данными объектов имеет индексы равные id объекта. После чего проверяется, если у объекта $haveImages = true; вызывается метод appendImages(), который уже делает выборку по картинкам где objectid in( ... ) и по результатам раскидывает их в объект $images(это коллекция картинок) каждому объекту из коллекции итемов (или юзеров или чего другого). В итоге каждый объект имеет в составе коллекцию изображений.
    Ответ написан
    2 комментария
  • Можно ли запустить php приложение на хостинге для сайта?

    402d
    @402d
    начинал с бейсика на УКНЦ в 1988
    цены на VPS от 49 руб в месяц.
    Вам жалко 200-300 рублей на тестовый период ?
    Ответ написан
    Комментировать
  • Как сверстать меню такого плана?

    iiiBird
    @iiiBird Куратор тега Вёрстка
    Пока ты спишь - твой конкурент совершенствуется
    Ответ написан
    Комментировать
  • PHP, регистрация, проверка полей?

    @user49981
    login.html
    <form action="login.php" method="post">
        <input type="text" name="login" id="login"/>
        <input type="password" name="password"/>
        <input type="text" name="form_login" hidden readonly/>
        <input type="submit">
    </form>


    login.php
    <?php
    
    include 'validation.php';
    include 'database.php';
    include 'functions.php';
    
    if (formSubmit('form_login')) {
        if (formValid(['login', 'password'], [VALIDATE_LOGIN, VALIDATE_PASSWORD])) {
            if(isUserExist('login', 'password')) {
                echo "hi";
            }
        }
    }


    functions.php
    <?php
    function formSubmit(string $formName)
    {
        if (array_key_exists($formName, $_POST)) {
            return true;
        }
        return false;
    }
    
    function formValid(array $fields, array $filters)
    {
        for ($i = 0; $i < count($filters); $i++) {
            if(!preg_match($filters[$i], filter_input_array(INPUT_POST)[$fields[$i]])) {
                return false;
            };
        }
        return true;
    }
    
    function isUserExist($loginPostField, $passwordPostFiled, $allowDisabled = true) {
        $login = filter_input_array(INPUT_POST)[$loginPostField];
        $password = filter_input_array(INPUT_POST)[$passwordPostFiled];
        if(userExistInDatabase($login, $password)) {
            return true;
        }
        return false;
    }
    
    function userExistInDatabase($login, $password)
    {
        $mysqli = new \mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
        if ($mysqli->connect_errno) {
            echo 'error:' . __METHOD__ . " : " . __LINE__; die;
        }
        $sql = "SELECT id FROM users WHERE login = $login AND password = " . password_hash($password, PASSWORD_BCRYPT);
        if (!$result = $mysqli->query($sql)) {
            echo 'error:' . __METHOD__ . " : " . __LINE__; die;
        }
        if ($result->num_rows === 1) {
            return true;
        }
        return false;
    }


    database.php
    <?php
    define('DB_HOST', '...');
    // ...


    validation.php
    <?php
    define('VALIDATE_LOGIN', '/^(\w{3,12})$/');
    // ...
    Ответ написан
    1 комментарий
  • PHP, регистрация, проверка полей?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    1) нет смысла хэшить пароли для сравнения, тем более не нужно использовать hash для шифрования паролей, есть специальные функции для этого.
    2) Для логина используются проверки регулярками, в соответствии с вашими условиями(длинна, символы, латиница, тире...) + наличие такого логина в базе(на занятость)
    3) нормальные сервисы требуют емэйл для подтверждения регистрации.
    4) как верно заметил BD_ l3ftoverZ!, правильнее создать вначале пустой массив ошибок, а затем его в конце проверить, если он пуст - все ок, если есть ошибки - передать в представление и вывести в форму регистрации.
    Ответ написан
    1 комментарий
  • Где взять реальные примеры кода использования ооп в веб-сервисах?

    1) Бери фреймворк (Ларву или симфони) и пиши на нем свой веб-сервис. В этих фреймворках (особенно в симфани) в базе используются паттерны проектирования, которые показывают тебе, как нужно использовать ООП.

    2) Прочитай книгу по паттернам проектирования (Хеал фест паттерны - на обложке девочка с косичками) - это раскроет тебе глаза.

    3) В реальности большая часть работы - это наследование от абстрактных классов (чаще всего, которые предоставляет тебе фреймворк), сборка классов с помощью DI (композиция) и все =)
    Ответ написан
    3 комментария
  • Где взять реальные примеры кода использования ооп в веб-сервисах?

    @netcore
    Есть группа людей которые не понимают в программировании ничего, но у них есть идея, понимание как работает продукт, и деньги (но это вторично)
    Назовем эту группу людей бизнес

    Продукт этого бизнеса - сайт новостей. Возьмем как пример сайт новостей, потому что это по сути тот же блог.
    Есть программист который понимает как автоматизировать действия этой идеи и оцифровать поведение продукта

    Сначала бизнес описывает боль которую решает продукт
    В чем боль? Бизнес раньше продавал газеты, а теперь хочет свою интернет газету.
    1. Они не хотят тратить деньги на печать, а просто делать посты новостей и статьи.
    2. Они не хотят платить деньги на транспортные расходы развозить газеты, а делать рассылки на электронную почту
    3. Они хотят получать обратную связь (комментарии)
    этого достаточно для примера.

    В идеале бизнес заказывает дизайн. Как это должно выглядеть.
    В идеале есть еще и пордакт менеджер который знает UML, но это влажные фантазии, по этому примем что есть бизнес и есть программист.

    Затем описываются сущности этого продукта и действующие лица в этом продукте
    Что мы можем понять из этого? Какие у нас есть сущности?
    1. пост - новость или статья на сайте.
    1.1. На этом этапе выясняем у бизнеса в чем отличие новости от статьи.
    Бизнес говорит: у новости (например) есть только одна картинка, текст.
    У статьи есть так же текст но картинок может быть несколько, так же не может быть комментариев.
    Бизнес забыл про то что в дизайне есть еще и дата, тут уже додумывает сам программист взглянув на макеты.
    В итоге у нас получается одна абстрактная модель Post и две ее реализующие: Article и News.

    public abstract class Post
        {
            protected Post(string text, int writerId)
            {
                Text = text;
                CreationDate = DateTime.Now;
                WriterId = writerId;
            }
    
            public int Id { get; set; }
            public string Text { get; private set; }
            public DateTime CreationDate { get; private set; }
            //Идентификатор писателя статьи\новости
            public int WriterId { get; private set; }
    
            //Автоматически подтягиваемая из базы модель писателя через ORM по WriterId
            public virtual Writer Writer { get; set; }
    
        }
    
        public class Article : Post
        {
            public Picture[] Pictures { get; private set; }
    
            public Article(string text, int writerId, Picture[] pictures) : base(text, writerId)
            {
                Pictures = pictures;
            }
        }
    
        public class News : Post
        {
            public Picture Picture { get; }
            
            //Массив комментариев к посту
            // private set -- говорит о том что массив инкапсулирован
            // и управлять массивом можно только через метод AddComment
            public List<Commentary> Commentaries { get; private set; }
    
            public News(string text, int writerId, Picture picture) : base(text, writerId)
            {
                Picture = picture;
            }
    
            public void AddComment(Commentary commentary)
            {
                Commentaries.Add(commentary);
            }
        }


    Далее у нас есть ролевые модели и у каждого своя бизнес логика.
    2. Подписчик - получатель новостей. Бизнес хочет что бы каждый зареганый юзер автоматически стал подписчиком. Такого в реальном мире не будет, нельзя, но для примера норм.
    3. Писатель - тот кто пишет статьи\новости.

    Две эти модели отличаются между собой только ролью и наличием у подписчика поля email. По этому приведем вот такие ООП модели

    public abstract class User
        {
            public int Id { get; set; }
            public string Username { get; private set; }
            public string Role { get; private set; }
            
            protected User(string role, string username)
            {
                Role = role;
                Username = username;
            }
        }
    
        public class Subscriber : User
        {
            public string Email { get; private set; }
            
            public Subscriber(string username, string email) : base(nameof(Subscriber), username)
            {
                Email = email;
            }
        }
    
        public class Writer : User
        {
            public Writer(string username) : base(nameof(Writer), username)
            {
            }
        }


    Поле пароль опущено, тут много чего опущено для простоты восприятия.

    3. Комментарий - обратная связь от юзера в посте. При чем хочу заметить от ЮЗЕРА, бизнес говорит что писать могут как и подписчик так и писатель

    public class Commentary
        {
            public int Id { get; set; }
            public string CommentText { get; private set; }
            public int UserId { get; private set; }
            
            public virtual User User { get; private set; }
            
            public DateTime CommentCreationDate { get; private set; } 
            
            public Commentary(int userId, string commentText)
            {
                UserId = userId;
                CommentText = commentText;
                CommentCreationDate = DateTime.Now;
            }
        }


    Вот - хоть и примитивно и немного неправильно (а то щас налетят пет программисты) но мы описали модели, абстрагировали одинаковые поля в абстрактные классы. Инкапсулировали поля и добавили методы которые описывают как работает класс. Инициализация полей происходит только в конструкторах. Работа с полями только с предоставленными для этого методами.

    Прошу прощения что не PHP, но C# тоже C подобный, так что проблем с чтением на уровне моделей быть не должно.

    Одна из функций ООП -- что бы программисты понимали бизнес.
    Ну и человеку прозе описывать поведение реального мира объектами и как эти объекты между собой взаимодействуют.
    Есть целые методологии разработки ПО такие как DDD, где вообще ядро кода пишется на копароративном языке и жестко соблюдаются правила названия моделей и описания алгоритмов бизнес процессов бизнеса. Код получается самодокументированным. Были случаи когда ядро по DDD писали даже на русском, потому что бизнес большой, а новичкам, кто приходил кодить в фирму, было быстрее и проще вкатиться в понимание прикладной практики бизнеса и понять по коду как бизнес устроен на разных слоях.
    Ответ написан
    1 комментарий
  • MySql ошибка - mysqli_query() expects parameter 1?

    xEpozZ
    @xEpozZ
    Веб-разработчик
    Используйте PDO
    Ответ написан
    Комментировать
  • Можно ли отключать/подключать кулеры компьютера к материнской плате не выключая компьютер (4pin PWM)?

    Zoominger
    @Zoominger Куратор тега Компьютеры
    System Integrator
    Можно. Нет, не опасно. Сто раз так делал.
    Главное - не лезьте мокрыми руками туда и не заденьте рукой какую-нибудь плату расширения.
    Ну и пальцем в работающий кулер ткнуть тож неприятно.
    Ответ написан
    Комментировать