За последние 24 часа нас посетили 17573 программиста и 1716 роботов. Сейчас ищут 1809 программистов ...

Мой первый сайт на PHP

Тема в разделе "PHP для новичков", создана пользователем Dimon2x, 29 май 2017.

  1. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @mkramer
    а если не именованные плесхолдеры, и в execute(['?' => $login]) можно ли так подставлять данные?
     
  2. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Да прочитай ты уже документацию наконец.
     
    denis01 нравится это.
  3. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @Fell-x27
    Все ответ на вопрос нашел в мануале, всем спасибо, будем дерзать дальше)))
    Извините за глупые вопросы, просто хотел ваши мнения узнать...
     
  4. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Когда хочешь узнать наши мнения, спрашивай не справочную инфу, а что-то, для чего нужен личный опыт. А так, получается, что мы что-то вроде секретарши между документацией и тобой :)
    Для этого опыт не нужен, это можно у кого угодно спросить. Или самому в доке прочитать.
     
    _ne_scaju_ нравится это.
  5. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @Fell-x27
    Согласен. Где можно почитать как правильно работать с js. Вообще это язык тяжёлый для изучения?
    Либо для начала подкрепить php и mysql надо, а потом за другой язык браться?
     
    #30 _ne_scaju_, 30 май 2017
    Последнее редактирование: 30 май 2017
  6. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    learn.javascript.ru. Язык специфический. Но в вебе зачастую обходятся процентами 30 его фитч, так что несложно.
     
    Fell-x27 нравится это.
  7. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Смотря, что ты будешь делать. Если на уровне "скопипастить сниппет" - то вообще легкий. Если на уровне "ну по условию чот-там поменять на странице" - то не сложнее PHP. Если на уровне "написать библиотеку для многослойного потокового рендеринга, привязанного к стриму с сервера", то придется перестать просто пользоваться JS и начать учиться программировать на нем. И тут уже будут сложности. Язык не просто специфический. Неподготовленному человеку он может голову свернуть нафиг. Он настолько простой, что ппц какой сложный. Это вот самая краткая и полная его характеристика. От его парадигм мозг будет гудеть поначалу. Даже просто вот читать настоящий JS код тяжко. А потом норм.
    --- Добавлено ---
    Я всем новичкам вообще всегда советую не начинать с PHP и веба в целом. Сначала надо научиться программированию как таковому. Желательно, хотя бы на C#. В идеале - потискать чистые Си. Алгоритмизация, проектирование, понимание того, как работает машина.

    А уж потом идти в пых. С правильно поставленной головой и руками.

    В противном случае может быть беда. Пых очень либерален по отношению к говнокоду и говностилю. На нем очень легко писать всякую дрянь. Не потому, что язык плохой. Язык хороший. Но слишком добрый. А JS так вообще оплот анархии. Язык, на 95% состоящий из рефлекшена. Это аут.

    Пыха и JS дают свободу, которой надо уметь распоряжаться. А программист-новичок это эдакий дикарь. Если дикаря сначала сунуть в строгие условия с дисциплиной и жесткими менторами и обязательной социализацией(Си), он, через какое-то время, начнет понимать, что такое хорошо, что такое плохо. Потом, если его выпустить на вольные хлеба в большой город (PHP, JS), он найдет себе место, работу, он будет знать, что правильно, а что нет, и как не наломать дров.

    Если же дикаря сразу сунуть в несковывающую среду, то он, мысля категориями "вижу самку - осеменяю самку", "хочу вещь - беру силой", "хочу погадить - гадю где стою", не обладая культурой, будучи асоциальным, быстро понаделает кучу проблем, в основном себе самому, будучи абсолютно уверенным, что все делает правильно.
     
    machetero нравится это.
  8. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    слухайте, ребзя
    а где б почитать что-то про хорошую такую архитектуру распределённых в облаках проектах?
     
  9. Алекс8

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

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    в 95 случаях из 100 можно обойтись не нативным JS, а JQuery где можно даже не думать про кроссбраузерность)) в остальных 5 случаях можно уговорить заказчика что ему это не надо)) :D
     
  10. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    Это всё равно нативный JS, только с подключённой библиотекой. И всё равно надо понимать java script, чтоб нормально пользоваться jQuery
    --- Добавлено ---
    Это вообще прикол известный - люди подключают какую-нибудь библиотеку, или ставят фреймворк, и думаю, что у них уже не JS или PHP.
     
  11. Алекс8

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

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    а все потому что фрейворков и библиотек много развелось)) у меня друг решил начать учить ПХП)) я ему говорю ты сначала с самим языком разберись)) а он мне такой "неее... я сразу себе поставил codeinteger - потому что это перспективно.. а твой пхп никому не нужен))"..
    так он и не выучил ничего))
     
  12. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    Ой, такая дурная поделка. Столкнулся недавно с ним...
     
  13. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    Всем спасибо, для начала надо под учить php а потом браться за другие языки которые интересуют.
     
  14. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.210
    Симпатии:
    185
    Если хочешь создавать свои проекты, но можно создавать всё на чистом htm, css, js и php, а не гнаться за этим зоопарком (bootstrap, jquery, angular, react, ember, laravel, yii), говорят иногда, если выходит новая версия, то приходится всё переучивать. Зачем забивать голову всяким хламом, например, выучить события из трёх фреймворках, которые делают одно и тоже, лучше выучить события чистого JS, тогда ты можешь быть готов, к любой задачи и не придётся ничего переучивать.
     
  15. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    Фреймворки - это не хлам, а решение общих для большинства проектов задач наилучшим способом, сделанное опытными и достаточно сильными программистами. Если не пользоваться чужими фреймворками, то надо написать свои, и скорее всего, получится хуже. Я, кстати, работал с проектом, где изначально был написан свой фреймворк, причём талантливо достаточно написан. Но всё равно, не настолько удобно, как тот же Laravel или Yii.

    Уметь писать на чистом php, чистом js необходимо, безусловно, чтобы понимать, что собственно делает фреймворк. А потом эти фреймворки экономят очень много времени, и зачастую освобождают тебя от заботы о sql-инъекциях и прочем. Вот, к примеру, как у меня обычно выглядит запрос insert на yii:
    PHP:
    1. \Yii::$app->db->createCommand()->insert("tableName", ["a" => $_GET["a"], "b" => $_GET["b"]])->execute();
    Заметь - никакого кода подготовки запроса, никакого экранирования, никаких биндов, всё на себя взял фреймворк. Я могу думать только о моей задаче.
    --- Добавлено ---
    Angular, React - это вообще другая парадигма, фактически, не просто библиотеки.
     
  16. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @mkramer
    В данном коде для меня вообще не понятен запрос, я лучше стандартным PDO методом запросы делать буду)))
    Ибо мне он будет больше понятен, да и вообще до такого уровня написания кода, надо еще учится)
     
  17. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    Тебе я фреймворки и не предлагаю, новчику они ни к чему :) Хотя ничего сложного конкретно в этом коде нету - просто SQL за меня генерируется библиотекой, а внутри там в итоге тот же PDO :) Фреймворки - отличная штука, но до них нужно дорасти.
     
  18. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @mkramer
    Да я знаю что ты мне не предлагаешь фреймворк, да и мне еще рано изучать их. Я лучше понемногу буду идти шаг в шаг изучая php и mysql в PDO обвертке)))
     
  19. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.210
    Симпатии:
    185
    Хочу спросить про подготовку запроса prepare.

    У меня был такой код

    PHP:
    1. $idQuest = trim(htmlspecialchars(strip_tags($questionId)));
    2. $setRename = trim(htmlspecialchars(strip_tags($name)));
    3. $sql = "UPDATE question SET `user_name` = '".$setRename."' WHERE id = '".$idQuest."'";
    4. $setName = $this->db->prepare($sql);
    5. $setName->execute();
    Мне рекомендовали, переделать его, с применением bindValue

    и я сделал так

    PHP:
    1. $idQuest = $questionId;
    2. $setRename = $name;
    3. $sth = $this->db->prepare("UPDATE question SET `user_name` = :setRename WHERE id = :idQuest");
    4. $sth->bindValue(':setRename', $setRename, PDO::PARAM_STR);
    5. $sth->bindValue(':idQuest', $idQuest, PDO::PARAM_INT);
    6. $sth->execute();
    Чем же он лучше?
     
  20. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    Во достали все этим тупым сниппетом... Тому, кто его пустил гулять по нету, надо кое-куда раскалённую кочергу запихать.

    http://phpfaq.ru/mysql/slashes - читать полностью до просветления.

    И @Dimon2x, ты хоть задумайся, что делает каждая функция в этой цепочке. Особенно - ну нахрена вызывать htmlspecialchats, если уже сделали strip_tag
     
  21. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @mkramer
    Он боится что данные украдут :D наверное :D
     
  22. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    Ты как всегда не о том. Бояться, что данные украдут - правильно. От SQL-инъекций мы защищаемся именно поэтому. Но, надо же понимать, что делаешь. Фрагмент кода, который я процитировал у @Dimon2x никого ни от чего не защищает, только портит данные, которые ввёл пользователь. А вот второй фрагмент - это правильный код
     
  23. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.210
    Симпатии:
    185
    Было так

    PHP:
    1. function addQuestion($name, $email, $text, $cat) {
    2.        
    3.         $dataQuestion = [];
    4.        
    5.         $input_name = trim(htmlspecialchars(strip_tags($name)));
    6.         $dataQuestion[]=$input_name;
    7.        
    8.         $input_email = filter_var($email, FILTER_VALIDATE_EMAIL);
    9.         if($input_email === false) {
    10.             echo 'Введи правильно email';
    11.             die();
    12.         }
    13.         $dataQuestion[]=$input_email;
    14.        
    15.         $input_text = trim(htmlspecialchars(strip_tags($text)));
    16.         $dataQuestion[]=$input_text;
    17.        
    18.         if((int)$cat > 0) {
    19.             $input_cat = (int)$cat;
    20.             $dataQuestion[] = $input_cat;
    21.         }
    22.        
    23.         else {
    24.             echo 'Выберите категорию';
    25.         }
    26.    
    27.         if(count($dataQuestion) === 4) {
    28.             $date = date("Y-m-d H:i:s");
    29.             $sql = "INSERT INTO question (name, cat_id, user_name, data, status, answer, user_email) VALUES(
    30.                                                                            '".$dataQuestion[2]."',
    31.                                                                            '".$dataQuestion[3]."',
    32.                                                                            '".$dataQuestion[0]."',
    33.                                                                            '".$date."',
    34.                                                                            '0',
    35.                                                                            '". null ."',
    36.                                                                            '".$dataQuestion[1]."'
    37.                                                                            )";
    38.             $newQuestion = $this->db->prepare($sql);
    39.             $newQuestion->execute();
    40.             echo 'Вопрос появится, после того, как на него ответит администратор';                                                          
    41.         }
    42.     }
    я это передал на это

    PHP:
    1. function addQuestion($name, $email, $text, $cat) {
    2.         $input_email = filter_var($email, FILTER_VALIDATE_EMAIL);
    3.         if($input_email === false) {
    4.             echo 'Введи правильно email';
    5.             die();
    6.         }
    7.        
    8.         $date = date("Y-m-d H:i:s");
    9.        
    10.         $sql = "INSERT INTO question (name, cat_id, user_name, data, status, answer, user_email) VALUES(
    11.                                                                            :name,
    12.                                                                            :cat,
    13.                                                                            :userName,
    14.                                                                            :date,
    15.                                                                            '0',
    16.                                                                            '". null ."',
    17.                                                                            :email
    18.                                                                            )";
    19.        
    20.         $sth = $this->db->prepare($sql);
    21.         $sth->bindValue(':name', $text, PDO::PARAM_STR);
    22.         $sth->bindValue(':cat', $cat, PDO::PARAM_INT);
    23.         $sth->bindValue(':userName', $name, PDO::PARAM_STR);
    24.         $sth->bindValue(':date', $date, PDO::PARAM_INT);
    25.         $sth->bindValue(':email', $input_email, PDO::PARAM_STR);
    26.         $sth->execute();
    27.        
    28.         die ('Вопрос появится, после того, как на него ответит администратор');                                                          
    29.        
    30.     }
    Теперь так лучше?
     
  24. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Так безопаснее
     
  25. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @Dimon2x
    Можно и так сделать запрос, будет похож:
    PHP:
    1. $sql = "INSERT INTO question
    2. (name, cat_id, user_name, data, status, answer, user_email)
    3. VALUES
    4. (:name, :cat, :userName, :date, 0, '". null ."', :email )";
    5. $sth = $this->db->prepare($sql);
    6. $sth->execute(['name' => $text, 'cat' => $cat, 'userName' => $name, 'date' => $date, 'email' => $input_email]);
    И код тоже в безопасности как твой второй вариант, мне так кажется, ну хай профессионалы оценят
     
    #50 _ne_scaju_, 1 июн 2017
    Последнее редактирование: 1 июн 2017