За последние 24 часа нас посетили 62092 программиста и 1592 робота. Сейчас ищут 944 программиста ...

Как быстро освоить PHP

Тема в разделе "PHP для новичков", создана пользователем fenix_63, 16 мар 2015.

  1. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    mysqli_set_charset
     
  2. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Я же ссылку дал на нужную функцию в документации :) Без указания кодировки опасно работать. Но и указывать надо правильно. Указывать через запрос - неправильно.

    В книгах указывается запросом либо потому что автор не в курсе фич mysqli_, либо потому что книга была написана до того, как в php завезли mysqlnd-адаптер, который позволяет пользоваться этими вот командами нативно. До его появления этой функциональности у mysqli_ не было. Но к тому моменту, когда mysql_ еще не сдох, но уже стал deprecated, это все давно доехало.
    --- Добавлено ---
    ini-файлы это уже не просто текстовичок. Это конкретная структура данных со своим синтаксисом. Пихать что-то левое в ini-файл такое же преступление как пихать что-то левое, например, в xml_файл. Для INI-файлов в пыхе даже встроенный парсер есть, читающий их и разбирающий на массив.
    А ты не гадай. Ты читай в документации, сколько, чего, как и почему, а, главное, кто, принимает. Там все написано. У PHP доументация вообще чуть ли не образцово-показательная, на которую должны равняться остальные языки. Лаконичная, удобная, логично оформленная, отвечающая на все вопросы, да еще сдобренная комментариями сообщества. Не пользоваться ею - преступление.
     
  3. Aleksanbr_77

    Aleksanbr_77 Новичок

    С нами с:
    31 янв 2016
    Сообщения:
    115
    Симпатии:
    5
    @Fell-x27 учел все сделанные мне замечания, сделал изменения в коде, только остался один момент
    но когда я тестировал и обновлял страницу, то повторной отправки не было. Все равно сделал было редирект, но тогда перестал отображаться массив $error в котором записан результат проверок, в частности на возраст, даже если объявлять его как global. В результате не выводилось сообщение Too young! Too old! и переписал снова как было, но хоть и нет редиректов -странички обновляются без проблем! А вот при нажатии на Backspace, просит повторную отправку!
    https://github.com/77Alleksandr77/task

    http://annutka.tk/task
     
  4. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    upload_2017-5-14_19-15-43.png
    Вот так быть не должно. Ну форму с ошибками я не всегда сам редиректю, как раз, чтобы отобразить ошибки без мучений с сессией, хотя @Fell-x27 считает, что и в этом случае должен быть редирет. Но в случае успеха - обязательно редиректить
    Ну так надо же понимать, что такое редирект. Это новый, подчистую, запуск скрипта, конечно все переменные в нём новые. Для таких вещей в php есть сессии, не только для регистрации. Туда можно и ошибки сложить
     
    Aleksanbr_77 нравится это.
  5. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    А еще можно редиректить на гет-запрос, как делают почти все в этом вашем интернете, включая тех, кто этот интернет на своей спине тащит.
     
    Aleksanbr_77 нравится это.
  6. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Ну это смотря какая форма. 20 полей, из них 10 введены вдруг с ошибкой - чтой-то больно много гета
     
  7. Aleksanbr_77

    Aleksanbr_77 Новичок

    С нами с:
    31 янв 2016
    Сообщения:
    115
    Симпатии:
    5
    я думал взять массив сессий, но посчитал что это неправильно и решил тут описать эту проблему, а раз его можно использовать в этих целях то gut
    @mkramer
    да, в фарфоксе выскакивает, я проверял в опере, считал что и в гугле тогда тож все будет ок, а по картинке вижу что нет, не ок, хотя хром и опера практически одно и тоже! а в опере просто счетчик мотает, но без окошек! не проверял когда вход выполнен!
    --- Добавлено ---
    ИНТЕРНЕТ НАШ!
     
  8. Aleksanbr_77

    Aleksanbr_77 Новичок

    С нами с:
    31 янв 2016
    Сообщения:
    115
    Симпатии:
    5
    @Fell-x27 я до вчерашнего дня, и начиная с февраля месяца, лежал в больнице! сейчас еще на больничном нахожусь, жду комиссию ВТЭК, возможно получу группу инвалидности, еще не известно, на работе меня не уволили- не могут пока я на больничном, но если получу группу то придется уходить с работы. Поэтому поставил себе цель как можно быстрее освоить PHP что бы можно было иметь хоть какой то заработок, но смотрю знать надо очень много, а эффективнее всего учиться на подобных заданиях. Могли бы вы меня немного "поднатоскать" в этом плане? и какой объём знаний должен быть, что бы брать в работу какие то не очень сложные ТЗ.
     
  9. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    @Aleksanbr_77, php в объёме мануала на php.net, JavaScript в объёме мануала learn.javascript.ru, HTML и CSS на приличном уровне (обычно на мелких заказах ты сам себе и фронт и бэкенд разработчик), MySQL - хотя бы наиболее часто используемые запросы (досконально, честно говоря, я сам не знаю, и пока не попадалось задач, где бы это сильно помешало).

    Потом, надо освоить одну-две из самых популярных CMS (WordPress, ModX, Joomla, Drupal), один-два популярных фреймворка (рекомендую Yii2 или Laravel). Но это уже можно в процессе работы.
    --- Добавлено ---
    WordPress, кстати, хорош в плане начала фриланс-карьеры. Я начинал с плагинов для WordPress
     
    Aleksanbr_77 нравится это.
  10. Aleksanbr_77

    Aleksanbr_77 Новичок

    С нами с:
    31 янв 2016
    Сообщения:
    115
    Симпатии:
    5
    А сами заказы можно и тут подбирать или для этого есть ресурсы с большим выбором?
     
  11. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Ну тут фриланс-заказов не так много. А объявы о работе в основном для высокого уровня. Но в интернете огромное количество фриланс-бирж, выбирай на вкус
    --- Добавлено ---
    http://www.itmathrepetitor.ru/zadachi-po-php-rabota-s-bazojj-dannykh-mysql/ - вот тебе задачи для тренировок
     
    Aleksanbr_77 нравится это.
  12. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Лерн хорош для обучения, а вот именно в качестве документации я бы посоветовал документацию от Мозиллы. Она очень хороша и исчерпывающа. Если чего-то нет на лерне или где еще, это есть на MDN.
     
    Aleksanbr_77 и mahmuzar нравится это.
  13. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    +
    Я сам использую доку от мозиллы.
     
  14. Aleksanbr_77

    Aleksanbr_77 Новичок

    С нами с:
    31 янв 2016
    Сообщения:
    115
    Симпатии:
    5
  15. AnonimS

    AnonimS Новичок

    С нами с:
    8 дек 2016
    Сообщения:
    88
    Симпатии:
    9
    Доброго времени суток! Наконец дошел до этого задания. Вчера с утра начал и по чуть-чуть делал в перерывах. Взял за основу для модуля регистрации/авторизации каркас из мануала в сети и доработал его до данной задачи. Комментарии специально не читал, чтобы не сознать у себя шаблон, а написать именно самому. Там есть ключ защиты, так и не понял зачем он, но решил оставить. Хотел поначалу все сделать в объектно-ориентированным стиле, ну в ООП я пока не силен, поэтому так и оставил процедурный, может сейчас переделаю в ООП, но я пока не понимаю что именно тут будут объекты, в это и уперся. Создавать объект, где есть только одна функция не вижу смысла, поправьте, если я ошибаюсь. Возникли трудности с датами, по началу хотел использовать date(), но потом все таки решил воспользоваться объектом. Не могли бы прокомментировать, есть ли тут уязвимости, может где-то есть грубые ошибки, чтобы в последующим их избежать. По некоторым пунктам я немного отошел от задания, например 5, после регистрации надо авторизоваться, после этого появиться 2 кнопки +1 и выход, на +1 подгружается скрипт счетчика, если надо четко как в задании, то могу переделать. Рука уже потихоньку набивается. Спасибо за практику!
     

    Вложения:

    • test.zip
      Размер файла:
      15,3 КБ
      Просмотров:
      1
  16. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    @AnonimS, выложи на github, и подними на бесплатном хостинге, как здесь уже принято. Качать не охота.
     
  17. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    красауэлла жи есть :)
    а что за сайт в корне?
    --- Добавлено ---
    а в чем прикол?
     
    Aleksanbr_77 нравится это.
  18. Aleksanbr_77

    Aleksanbr_77 Новичок

    С нами с:
    31 янв 2016
    Сообщения:
    115
    Симпатии:
    5
    Также, тестовое ТЗ.
     
  19. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    В том, чтоб в гете передавать номер ошибки и реагировать на него при отрисовке страницы. Тоже практикуется многими, включая гуглы, мэловарни, фейсбуки и тд.

    @Aleksanbr_77 и @AnonimS а с вами уже вечером тогда, после работы погляжу, что да как.
     
    TeslaFeo нравится это.
  20. AnonimS

    AnonimS Новичок

    С нами с:
    8 дек 2016
    Сообщения:
    88
    Симпатии:
    9
    Хорошо, вот выложил. Только там на бесплатном хостинге бывает вылетает 500-я ошибка, но обновляю и все хорошо, на локальном сервере все летает.

    https://github.com/AnonimDev/test

    http://testphp777.hostei.com
     
  21. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    @AnonimS, вот этот бред нафига. Ещё и в такой последовательности:
    PHP:
    1. $data = htmlspecialchars($data, ENT_QUOTES); // Преобразовать спец. символы в html-сущности
    2. $data = htmlentities($data); // Ещё раз преобразовать, вдруг c первого раза не справились
    3. $data = strip_tags($data); // Убрать теги из строки без тегов (ведь мы преобразовали спец. символы в сущности)
    https://github.com/AnonimDev/test/blob/master/assets/php/bd.php#L10 - строки 10 и 13 можно в одну.

    Для пароля сейчас есть password_hash, password_verify.

    После header("Location: ") лучше всегда ставить die (или exit)

    https://github.com/AnonimDev/test/blob/master/assets/php/show.php#L16 - нахрена?
    --- Добавлено ---
    htmlspecialchars и htmlenities отличаются, конечно, слегка. Но смысла вызывать одну за другой вообще 0
    --- Добавлено ---
    По вёрстке - требование о центре экрана даже близко не соблюдено.
     
  22. Aleksanbr_77

    Aleksanbr_77 Новичок

    С нами с:
    31 янв 2016
    Сообщения:
    115
    Симпатии:
    5
    благодарю!
    осталось одно замечание
    еще так и не исправил
     
  23. AnonimS

    AnonimS Новичок

    С нами с:
    8 дек 2016
    Сообщения:
    88
    Симпатии:
    9
    Не совсем понимаю тогда как будет выглядеть функция security_input(), если правильно? Я просто раньше изучал это момент, про фильтрацию вводимых данных и остановился на этом, потом везде так пишу, теперь понимаю, что это не правильно, когда практика приходит. Про password_hash, password_verify я почитаю, спасибо и исправлю. Show.php тут не нужен, это остаток от каркаса, подредактирую. По верстке не дочитал, извиняюсь, поправки тоже внесу. Спасибо за комментарий.
     
  24. Grigorie1990

    Grigorie1990 Новичок

    С нами с:
    2 май 2017
    Сообщения:
    7
    Симпатии:
    0
    Добрый день!
    Я недавно выполнял тестовое задание на вакансию стажера. Оно весьма похоже на приведенное Fell-x27 задание. В срок не уложился и туда не взяли. Планирую доделать. Буду признателен за критику по заданию. Ищу стажировку по php или питону.

    --- Базовая функциональность -----------------------------------------------------------------------------------------
    1) Сделать форму обратной связи.
    На странице должны быть показаны все оставленные отзывы, под ними форма: Имя, E-mail, текст сообщения, кнопки "Предварительный просмотр" и "Отправить".
    Отзывы можно сортировать по имени автора, e-mail и дате добавления (по умолчанию - по дате, последние наверху).Также должна быть валидация.
    2) Предварительный просмотр должен работать без перезагрузки страницы.
    3) Сделать вход для администратора (логин "admin", пароль "123"). Администратор должен иметь возможность редактировать отзыв. Измененные отзывы в общем списке выводятся с пометкой "изменен администратором".
    4) К отзыву можно прикрепить картинку.
    Картинка должна быть не более 320х240 пикселей, при попытке залить изображение большего размера, картинка должна быть пропорционально уменьшена до заданных размеров. Допустимые форматы: JPG, GIF, PNG.
    5) У администратора должна быть возможность модерирования.
    Т.е. на странице администратора показаны отзывы с миниатюрами картинок и их статусы (принят/отклонен).
    Отзыв становится видимым для всех только после принятия админом. Отклоненные отзывы остаются в базе, но не показываются обычным пользователям. Изменение картинки администратором не требуется.

    В приложении нужно с помощью чистого PHP реализовать модель MVC (PHP-фреймворки использовать нельзя).
    Верстка на bootstrap. Помните, что аккуратность - это один из главных критериев оценки тестового.

    Приложение нужно развернуть на любом бесплатном хостинге, чтобы можно было посмотреть его в действии.
    Скопируйте в корневую папку проекта наш онлайн-редактор dayside (https://github.com/boomyjee/dayside)
    Таким образом редактор будет доступен по url <ваш проект>/dayside/index.php
    -----------------------------------------------------------------------------------------------------------------------------------------

    Я частично выполнил задание. Результат находится http://testtask111.zzz.com.ua Ссылка на Dayside http://testtask111.zzz.com.ua/index_2.php

    Что я сделал:
    - ввод задачи с соответствующими полями и запись в базу данных(картинки хранятся в папке uploads);
    - проверку информации (имя, имейла);
    - подключение к базе данных и сохранения данных в столбцы (id, name, email, task, picture);
    - админский вход (admin, 123), при входе дается ссылка на страницу с постраничным выводом заданий из базы данных;
    - пагинация

    Что не сделал:
    - отметку о выполнении задания;
    - возможность редактирования текста задания;
    - проверку размера картинки 320*240 заменил на 5мб;

    Спасибо за ответы!
     
  25. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Надо где-то тему закреплённую сделать в новичках. Всё просто:
    1. При работе с базой вызывается экранирующая функция для всех данных или используются подготовленные запросы. Больше ничего при добавлении в базу делать не нужно
    2. При выводе все пользовательские данные оборачиваются в htmlspecialchars или htmlentities - именно при выводе, в базе всё должно лежать в том виде, в котором это ввёл пользователь