@mkramer а если не именованные плесхолдеры, и в execute(['?' => $login]) можно ли так подставлять данные?
@Fell-x27 Все ответ на вопрос нашел в мануале, всем спасибо, будем дерзать дальше))) Извините за глупые вопросы, просто хотел ваши мнения узнать...
Когда хочешь узнать наши мнения, спрашивай не справочную инфу, а что-то, для чего нужен личный опыт. А так, получается, что мы что-то вроде секретарши между документацией и тобой Для этого опыт не нужен, это можно у кого угодно спросить. Или самому в доке прочитать.
@Fell-x27 Согласен. Где можно почитать как правильно работать с js. Вообще это язык тяжёлый для изучения? Либо для начала подкрепить php и mysql надо, а потом за другой язык браться?
learn.javascript.ru. Язык специфический. Но в вебе зачастую обходятся процентами 30 его фитч, так что несложно.
Смотря, что ты будешь делать. Если на уровне "скопипастить сниппет" - то вообще легкий. Если на уровне "ну по условию чот-там поменять на странице" - то не сложнее PHP. Если на уровне "написать библиотеку для многослойного потокового рендеринга, привязанного к стриму с сервера", то придется перестать просто пользоваться JS и начать учиться программировать на нем. И тут уже будут сложности. Язык не просто специфический. Неподготовленному человеку он может голову свернуть нафиг. Он настолько простой, что ппц какой сложный. Это вот самая краткая и полная его характеристика. От его парадигм мозг будет гудеть поначалу. Даже просто вот читать настоящий JS код тяжко. А потом норм. --- Добавлено --- Я всем новичкам вообще всегда советую не начинать с PHP и веба в целом. Сначала надо научиться программированию как таковому. Желательно, хотя бы на C#. В идеале - потискать чистые Си. Алгоритмизация, проектирование, понимание того, как работает машина. А уж потом идти в пых. С правильно поставленной головой и руками. В противном случае может быть беда. Пых очень либерален по отношению к говнокоду и говностилю. На нем очень легко писать всякую дрянь. Не потому, что язык плохой. Язык хороший. Но слишком добрый. А JS так вообще оплот анархии. Язык, на 95% состоящий из рефлекшена. Это аут. Пыха и JS дают свободу, которой надо уметь распоряжаться. А программист-новичок это эдакий дикарь. Если дикаря сначала сунуть в строгие условия с дисциплиной и жесткими менторами и обязательной социализацией(Си), он, через какое-то время, начнет понимать, что такое хорошо, что такое плохо. Потом, если его выпустить на вольные хлеба в большой город (PHP, JS), он найдет себе место, работу, он будет знать, что правильно, а что нет, и как не наломать дров. Если же дикаря сразу сунуть в несковывающую среду, то он, мысля категориями "вижу самку - осеменяю самку", "хочу вещь - беру силой", "хочу погадить - гадю где стою", не обладая культурой, будучи асоциальным, быстро понаделает кучу проблем, в основном себе самому, будучи абсолютно уверенным, что все делает правильно.
слухайте, ребзя а где б почитать что-то про хорошую такую архитектуру распределённых в облаках проектах?
в 95 случаях из 100 можно обойтись не нативным JS, а JQuery где можно даже не думать про кроссбраузерность)) в остальных 5 случаях можно уговорить заказчика что ему это не надо))
Это всё равно нативный JS, только с подключённой библиотекой. И всё равно надо понимать java script, чтоб нормально пользоваться jQuery --- Добавлено --- Это вообще прикол известный - люди подключают какую-нибудь библиотеку, или ставят фреймворк, и думаю, что у них уже не JS или PHP.
а все потому что фрейворков и библиотек много развелось)) у меня друг решил начать учить ПХП)) я ему говорю ты сначала с самим языком разберись)) а он мне такой "неее... я сразу себе поставил codeinteger - потому что это перспективно.. а твой пхп никому не нужен))".. так он и не выучил ничего))
Если хочешь создавать свои проекты, но можно создавать всё на чистом htm, css, js и php, а не гнаться за этим зоопарком (bootstrap, jquery, angular, react, ember, laravel, yii), говорят иногда, если выходит новая версия, то приходится всё переучивать. Зачем забивать голову всяким хламом, например, выучить события из трёх фреймворках, которые делают одно и тоже, лучше выучить события чистого JS, тогда ты можешь быть готов, к любой задачи и не придётся ничего переучивать.
Фреймворки - это не хлам, а решение общих для большинства проектов задач наилучшим способом, сделанное опытными и достаточно сильными программистами. Если не пользоваться чужими фреймворками, то надо написать свои, и скорее всего, получится хуже. Я, кстати, работал с проектом, где изначально был написан свой фреймворк, причём талантливо достаточно написан. Но всё равно, не настолько удобно, как тот же Laravel или Yii. Уметь писать на чистом php, чистом js необходимо, безусловно, чтобы понимать, что собственно делает фреймворк. А потом эти фреймворки экономят очень много времени, и зачастую освобождают тебя от заботы о sql-инъекциях и прочем. Вот, к примеру, как у меня обычно выглядит запрос insert на yii: PHP: \Yii::$app->db->createCommand()->insert("tableName", ["a" => $_GET["a"], "b" => $_GET["b"]])->execute(); Заметь - никакого кода подготовки запроса, никакого экранирования, никаких биндов, всё на себя взял фреймворк. Я могу думать только о моей задаче. --- Добавлено --- Angular, React - это вообще другая парадигма, фактически, не просто библиотеки.
@mkramer В данном коде для меня вообще не понятен запрос, я лучше стандартным PDO методом запросы делать буду))) Ибо мне он будет больше понятен, да и вообще до такого уровня написания кода, надо еще учится)
Тебе я фреймворки и не предлагаю, новчику они ни к чему Хотя ничего сложного конкретно в этом коде нету - просто SQL за меня генерируется библиотекой, а внутри там в итоге тот же PDO Фреймворки - отличная штука, но до них нужно дорасти.
@mkramer Да я знаю что ты мне не предлагаешь фреймворк, да и мне еще рано изучать их. Я лучше понемногу буду идти шаг в шаг изучая php и mysql в PDO обвертке)))
Хочу спросить про подготовку запроса prepare. У меня был такой код PHP: $idQuest = trim(htmlspecialchars(strip_tags($questionId))); $setRename = trim(htmlspecialchars(strip_tags($name))); $sql = "UPDATE question SET `user_name` = '".$setRename."' WHERE id = '".$idQuest."'"; $setName = $this->db->prepare($sql); $setName->execute(); Мне рекомендовали, переделать его, с применением bindValue и я сделал так PHP: $idQuest = $questionId; $setRename = $name; $sth = $this->db->prepare("UPDATE question SET `user_name` = :setRename WHERE id = :idQuest"); $sth->bindValue(':setRename', $setRename, PDO::PARAM_STR); $sth->bindValue(':idQuest', $idQuest, PDO::PARAM_INT); $sth->execute(); Чем же он лучше?
Во достали все этим тупым сниппетом... Тому, кто его пустил гулять по нету, надо кое-куда раскалённую кочергу запихать. http://phpfaq.ru/mysql/slashes - читать полностью до просветления. И @Dimon2x, ты хоть задумайся, что делает каждая функция в этой цепочке. Особенно - ну нахрена вызывать htmlspecialchats, если уже сделали strip_tag
Ты как всегда не о том. Бояться, что данные украдут - правильно. От SQL-инъекций мы защищаемся именно поэтому. Но, надо же понимать, что делаешь. Фрагмент кода, который я процитировал у @Dimon2x никого ни от чего не защищает, только портит данные, которые ввёл пользователь. А вот второй фрагмент - это правильный код
Было так PHP: function addQuestion($name, $email, $text, $cat) { $dataQuestion = []; $input_name = trim(htmlspecialchars(strip_tags($name))); $dataQuestion[]=$input_name; $input_email = filter_var($email, FILTER_VALIDATE_EMAIL); if($input_email === false) { echo 'Введи правильно email'; die(); } $dataQuestion[]=$input_email; $input_text = trim(htmlspecialchars(strip_tags($text))); $dataQuestion[]=$input_text; if((int)$cat > 0) { $input_cat = (int)$cat; $dataQuestion[] = $input_cat; } else { echo 'Выберите категорию'; } if(count($dataQuestion) === 4) { $date = date("Y-m-d H:i:s"); $sql = "INSERT INTO question (name, cat_id, user_name, data, status, answer, user_email) VALUES( '".$dataQuestion[2]."', '".$dataQuestion[3]."', '".$dataQuestion[0]."', '".$date."', '0', '". null ."', '".$dataQuestion[1]."' )"; $newQuestion = $this->db->prepare($sql); $newQuestion->execute(); echo 'Вопрос появится, после того, как на него ответит администратор'; } } я это передал на это PHP: function addQuestion($name, $email, $text, $cat) { $input_email = filter_var($email, FILTER_VALIDATE_EMAIL); if($input_email === false) { echo 'Введи правильно email'; die(); } $date = date("Y-m-d H:i:s"); $sql = "INSERT INTO question (name, cat_id, user_name, data, status, answer, user_email) VALUES( :name, :cat, :userName, :date, '0', '". null ."', :email )"; $sth = $this->db->prepare($sql); $sth->bindValue(':name', $text, PDO::PARAM_STR); $sth->bindValue(':cat', $cat, PDO::PARAM_INT); $sth->bindValue(':userName', $name, PDO::PARAM_STR); $sth->bindValue(':date', $date, PDO::PARAM_INT); $sth->bindValue(':email', $input_email, PDO::PARAM_STR); $sth->execute(); die ('Вопрос появится, после того, как на него ответит администратор'); } Теперь так лучше?
@Dimon2x Можно и так сделать запрос, будет похож: PHP: $sql = "INSERT INTO question (name, cat_id, user_name, data, status, answer, user_email) VALUES (:name, :cat, :userName, :date, 0, '". null ."', :email )"; $sth = $this->db->prepare($sql); $sth->execute(['name' => $text, 'cat' => $cat, 'userName' => $name, 'date' => $date, 'email' => $input_email]); И код тоже в безопасности как твой второй вариант, мне так кажется, ну хай профессионалы оценят