• Почему не записывается в массив PHP?

    slo_nik
    @slo_nik Куратор тега PHP
    Добрый вечер.
    В последнем случае Вы сканируете вложенную директорию somo-dir0 и получаете файлы, которые находятся в ней.
    При проверке is_file() Вы указываете только имя файла, без пути к нему.
    Поэтому файл не найден и массив не заполняется.
    $files = scandir($dir.'/some-dir0');
    foreach($files as $fileNames){ 
        if($fileNames == '.' || $fileNames == '..') continue;
        if(is_file('some-dir0/' . $fileNames)){ 
          $fileVals[] = $fileNames;
        }
    }
    
    echo '<br/>';			
    print_r($fileVals);
    Ответ написан
    4 комментария
  • MySql ошибка - mysqli_query() expects parameter 1?

    SagePtr
    @SagePtr
    Еда - это святое
    Потому что переменная $connection у вас глобальная, а внутри функции вы обращаетесь к ней, как к локальной. И да, лучше выкинуть эту поповщину и использовать нормальный PDO.
    Ответ написан
    Комментировать
  • Как бы вы поступили?

    @orbit070
    Проект имеет большой потенциал, вероятность того, что он стрельнет - 90%

    Так думает каждый человек, который пилит какой-то проект. Выстреливают 2-5%. Просто статистика.

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

    Гигантов невозможно убить, им можно составить конкуренцию и то лишь временно и при наличии очень больших бюджетов. Даже если вы создаете что-то такое, до чего гиганты не додумались, то как только ваша фишка покажет свою полезность, то все гиганты добавят ее себе и у вас не будет ни одного преимущества перед всем известными гигантами.

    1. Запускать в одиночку, бороться со всеми проблемами на лету

    Поначалу многим кажется, что можно в одиночку тянуть проект, но к сожалению это не так. Я скажу больше: даже элементарно роль разработчика в одиночку не всегда можно тянуть, а вы хотите быть одновременно разработчиком/тестировщиком/админом/маркетологом/менеджером/управленцеми/бухгалтером/юристом/и т.д. Если бы такая формула работала, то в компаниях вместо 15-и зарплат всем этим людям, платили бы одному умельцу, но даже если такой умелец существует, который прожил три жизни и вобрал в себя все эти знания и умения, то все равно ничего не выйдет, ведь в сутках всего 24 часа. В общем это невозможно, как бы вам этого ни хотелось. Я понимаю, что соблазн велик и делить с кем-то потенциально жирный кусок мяса не хочется(делить, потому что денег у вас я как понял нет, значит придется отдавать долю в проекте), но у вас выбора почти нет. История знает единицы случаев, когда кто-то в одиночку запускал успешный бизнес в интернет-пространстве. Просто изучите историю и поймете - почти за всеми известными цифровыми продуктами стоят команды, потому что физически в одиночку это почти невозможно. Я готов руку на отсечение отдать, что если это будет работающий продукт, вы даже роль разработчика собой не закроете, не говоря уже об остальном, потому что там работы не на одного человека. Если вы думаете что админить, девопсить, тестировать, багфиксить, внедрять новый функционал и тд можно в одиночку, то вы очень сильно заблуждаетесь.

    Итого: нужно найти в себе силы и снять розовые очки. Сделали проект - хорошо. Теперь пойдите и найдите 50 человек, которые скажут, что продукт им может быть полезен. Как только они скажут "круто я бы пользовался" - скажите отлично, вот мой сайт, пользуйся. Так вот если из этих 50и человек хотя бы 3 человека заплатят деньги - то поздравляю, вы создали действительно что-то полезное, и польза продукта подтверждена. Теперь берете пару сотен долларов и ищете наиболее дешевые каналы привлечения клиентов - пробуете разные виды рекламы. Если на двести долларов привлекли например 10 платящих клиентов, то один клиент вам обошелся в 20 долларов. При этом например ваш продукт(для примера) стоит 25 долларов, получается экономика сходится - потратили 20 получили 25. Любой инвестор с удовольствием рассмотрит ваш проект и с большой долей вероятности даст денег. Удачи
    Ответ написан
    Комментировать
  • Архитектура таблиц БД для функционала Личных сообщений, так логично?

    @gvalex
    В Chat есть id обоих участников диалога, поэтому в Messages можно хранить только id отправителя (ну, или получателя).
    Ответ написан
    Комментировать
  • В чем основной вред SELECT *?

    Ошибка в том, что задача СУБД вернуть соответствующий запросу результат и только те данные, которые необходимы программе.
    Т.к. СУБД обычно находится на отдельном хосте, запрос со * будет создавать дополнительную нагрузку на сеть, т.к. будет передавать даже те поля, которые не нужны приложению, в свою очередь это вызови большее потребление ресурсов и самим приложением, которому необходимо будет обрабатывать результат запроса с "мусорными" данными. Использование * будет оправдано в случае, когда действительно необходимы все поля запроса или обработка запроса будет выполняться какой-нибудь ORM.
    Ответ написан
    1 комментарий
  • Как в модели БД реализовать динамический список?

    @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
    Можно. Нет, не опасно. Сто раз так делал.
    Главное - не лезьте мокрыми руками туда и не заденьте рукой какую-нибудь плату расширения.
    Ну и пальцем в работающий кулер ткнуть тож неприятно.
    Ответ написан
    Комментировать