не встретил не в одном учебнике функцию eval(); Она есть в справочниках. Но в азах не видел. Сейчас прочту.
Есть учебники для профессионалов, разные методологии, патерны, алгоритмы, тестирование, devops, CVS, deploy.
Проблема в том что половина учебников, не очень. Там тупо азы. Но нашёл интересную книгу, засяду походу на выходные, чтением в запой. Вот её название. php объекты шаблоны и методики программирования 4-е издание Автор Мэтт Зандстра Так а вот и сама книга: клац сюда
и это хорошо. Тебе дают азы. А дальше либо у тебя мозг способен самостоятельно развиваться, искать нужную тебе информацию и технологии, либо ты должен признать себя аутистом и бросить программирование.
Я иногда, себя считаю таковым, до тех пор пока не познаю в чём суть проблемы, но при этом, почему то желание бросать программирования нету. А смысл, уйти работать дворничком ? А толку проработать дворником и просто потом сдохнуть ? Как то звучит удручающе, люди вам так не кажется?).... Мне интересно развитие, надо же после себя хоть что-то в жизни оставить, отсюда и желание развиваться. Но знаешь все дураки смотря от какой точки умности отходить и с чем сравнивать. Даже самый умный полный дурак, и он сам это подтвердит через год своего развития, что год назад был дураком, даже если и сейчас не признает себя дураком, но зато через год в цикле повторится тоже самое. Мне порой кажется, что теория матрицы(Имею введу фильм) вполне реальна Самая умная фраза которую я слышал в жизни это фраза Сократа. Я знаю, что ничего не знаю И честно скажу, я не собираюсь останавливаться даже если мой мозг не способен это переворить, я это переварю обязательно и время покажет Я обязательно сделаю то что оставит свой след в истории, ну надеюсь оставить после себя что нибудь умное, но пока не чего кроме глупости, но время покажет жил я просто так или всё таки нет Я часто возвращаюсь к азам чтобы напомнить себе что не чего не забыл, даже бывает если помню перепроверяю лезу в ман, чтобы точно посмотреть. Я и ищу и пытаюсь сам понять что к чему, что-то не понимаю, я спрашиваю, не потому что не в состоянии сам это понять, а дабы увеличить скорость своего образования, время не так много, а с каждым годом понимаю, что чем старше тем сложнее. Литературы полно, но вопрос в том нужная ли она и актуальная ли, а определить это может только тот кто уже знает И пофигу что пишу безграмотно, зато мыслю правильно, и это меня греет :L Ну надеюсь, я не ошибаюсь. Не хочу ошибится с путём жизни, а то потом будет горестно.
+100500 Бесит когда какой-то сайт, на котором я регаюсь только для того, чтобы один раз чем-то воспользоваться, решает за меня сколько мне символов и какие символы вводить. Я больше на него не собираюсь возвращаться и скрывать мне там нечего, пароля "1" достаточно. --- Добавлено --- А если ещё и с простым паролем типа "1111111" не дает зарегится это ваще жесть.
Как-то так: http://surikat-project.kl.com.ua/ Всего 3 файла. styles.css, index.php, db.php. db.php не выкладываю. Там всего 11 строк. Подключение и проверка. Стили можно найти в исходном коде. --- Добавлено --- Потратил примерно 2,5 часа
1) выкладывай уж и db 2) Выложи плз в виде листинга, чтобы удобно было читать прямо с браузера. Можно тут, оформив через кнопку </>, можно как-то еще. Но, желательно, с подсветкой синтаксиса, да.
Когда пробую регаться с заведомо кривыми данными, вижу вот такое Число не всегда равно 0. Первый раз оно было равно 10. --- Добавлено --- --- Добавлено --- Далее. Использование инпут тайп date - сомнительная затея. Они до сих пор не стандартизированы и везде ведут себя по-разному, а на некоторых мобильных браузерах просто конвертируются в text. И у Хьюстона начинаются проблемы. Три выпадающих списка - день, месяц, год. Проверено, работает. Юзается монстрами от IT повсеместно. --- Добавлено --- Ну и формочка висит чуть выше центра, а не прям по центру, но это третично. В код пока не смотрел, нет времени. Если не считать вылезающие числа и использование date, то заказчик почти принял работу и готов передать ее на ревью.
По коду: 1) Обработка ошибок. Ты заводишь кучу переменных, каждая отвечает за свою ошибку. А потом у тебя PHP: if (isset ($loginEmpty) && $loginEmpty == true) { echo '<div class="alert alert-danger">Логин не должен быть короче 4-х символов!</div>'; } else if (isset ($loginErr) && $loginErr == true) { echo '<div class="alert alert-danger">Логин занят!</div>'; } if (isset ($passEmpty) && $passEmpty == true) { echo '<div class="alert alert-danger">Пароль не может быть короче 4-х символов!</div>'; } if (isset ($repassEmpty) && $repassEmpty == true) { echo '<div class="alert alert-danger">Вы не повторили пароль!</div>'; } else if (isset ($repassErr) && $repassErr == true) { echo '<div class="alert alert-danger">Пароли не совпадают!</div>'; } if (isset ($dateEmpty) && $dateEmpty == true) { echo '<div class="alert alert-danger">Вы не указали дату</div>'; } else if (isset ($dateYong) && $dateYong == true) { echo '<div class="alert alert-danger">Вам нет 5-ти лет!</div>'; } else if (isset ($dateOld) && $dateOld == true) { echo '<div class="alert alert-danger">Вам не может быть больше 150-ти лет!</div>'; } if (isset ($regErr) && $regErr == true) { echo '<div class="alert alert-danger">Ошибка записи в БД! Обратитесь к администратору</div>'; } Можно сделать лучше. Можно вместо кучи переменных завести один-единственный массив $errors. В него, при возникновении ошибки, класть в значение текст ошибки, а в ключ - некий идентификатор ошибки. Либо завести два массива. В одном перечислены все возможные ошибки с заготовленными сообщениями и кодами в качестве ключей. А второй массив - это сборщик возникающих ошибок, собирающий только коды. В конце мы циклом пробегаемся по массиву, собравшему ошибки и, в замисимости от выбранного решения, либо просто выводим сразу значения по ключам, либо выводим значения по ключам из массива с прописанными ранее ошибками. Меньше кода, меньше хардкода, больше гибкости, больше расширяемости, легче поддержка. 2) Проверка занятости логина PHP: $q = $db->query ("SELECT * FROM `users` WHERE `login` = '$login'"); if ($q->num_rows) { $loginErr = true; } Эту проверку можно вообще вынести на уровень логики БД, объявив поле с логинами уникальным. Итого, вместо двух запросов, получаем всего один, который либо вернет успех, либо ошибку нарушения уникальности значения. 3) Проверка на наличие ошибок в ходе работы. У тебя сейчас это PHP: if (!$loginErr && !$loginEmpty && !$passEmpty && !$repassErr && !$repassEmpty && !$dateYong && !$dateOld && !$dateEmpty) Если же сделаешь как я описал в пункте 1, твоя проверка сократится до проверки на пустоту массива-сборщика. Код станет красивее, проще, бла бла бла, все счастливы. 4) Хранение паролей Код (Text): ("INSERT INTO `users` VALUES (NULL, '$login', '".md5(md5($pass))."', '$date', '0')") md5(md5( никуда не годится. В PHP давно есть нативные инструменты для хэширования паролей. Если не хочешь их использовать, то, тогда, хотя бы пользуйся более крепкими хэш-функциями типа whirpool и, обязательно, соли пароли. Почитай, что такое соль, зачем она нужна. Это капец как важно. Вот тебе исчерпывающий материал по этой теме. 5) Верстка. Ты забыл про доктайп. Аяяй. Он нужен даже сегодня. Пусть он всего лишь html, но он нужен. 6) Так писать не обязательно: HTML: <link rel="stylesheet" href="./styles.css"> Можно просто так HTML: <link rel="stylesheet" href="styles.css"> ресурс, указанный "как есть" автоматом считается лежащим на одном уровне со страницей. 7)Хедер на странице обычно всего один, по этому запись HTML: <div class="header"> несколько избыточна. В HTML5 у нас есть новый тег <header></header> для таких нужд. Как-то так. --- Добавлено --- Да, пункт ТЗ отдельный: Кстати, спасибо за напоминание. Надписи должны быть именно такие, @SamyRed.
Если не сложно - объясни ,зачем он нужен? Я, просто, не пойму совсем. --- Добавлено --- Привычка. Так я более уверен в том что все будет работать правильно.
Потому что это нужно для облегчения жизни браузеру и для гарантии корректной обработки твоей верстки, а не по принципу "прокатит или не прокатит". Вникай.
Тоже дело привычки. Мне, например, проще использовать класс. --- Добавлено --- Если это принципиально - ищменю когда буду дома. Была у меня в час ночи идея что это принципиально, но я подумал сделать красивее))
Есть как привык, а есть как правильно. В данном случае правильно использовать либо тег, либо ID. Но не класс.
Ну к заданию это никак не относится) мог вообще без хеширования сделать) --- Добавлено --- А вот за это спасибо. Учту. Я тоже думал, что это не совсем красиво, создавать дофига переменных.
Я писал ранее, что безопасность и качество исполнения - это дефолтные ожидания от кода. Заказчик не должен в ТЗ прописывать, что код должен быть закрыт от инъекций, а пароли грамотно захешированы с использованием соли. Это подразумевается само собой. ТыжспециалистЪ. Тут как бы два этапа - сначала принятие функциональности, от лица "заказчика", а потом уже ревью кода - от лица любого, кто решил заглянуть в код. Без условностей, как есть. Не принимай это как нападки или оскорбления в свой адрес. Принимай как дружеские советы. Их цель - не чтобы у тебя бомбило, а чтоб ты сделал выводы и, быть может, вырос над собой же, но не наступая на такие грабли в реальном мире. В реальном мире такие грабли бьют по лбу стократно больнее, чем форумная критика.
Эта штука выводится, на сколько я помню, постом, или ошибкой БД. Приду домой - посмотрю --- Добавлено --- Ниумею --- Добавлено --- Посмотреть вложение 1010 --- Добавлено --- Далее. Использование инпут тайп date - сомнительная затея. Они до сих пор не стандартизированы и везде ведут себя по-разному, а на некоторых мобильных браузерах просто конвертируются в text. И у Хьюстона начинаются проблемы. Три выпадающих списка - день, месяц, год. Проверено, работает. Юзается монстрами от IT повсеместно. --- Добавлено --- Ну и формочка висит чуть выше центра, а не прям по центру, но это третично. В код пока не смотрел, нет времени. Если не считать вылезающие числа и использование date, то заказчик почти принял работу и готов передать ее на ревью.[/QUOTE] Тоже учту. А насчет вертикального позиционирования - низнаю Точнее, не нашел красивый способ. Нашел какую-то фигню. --- Добавлено --- Посмотреть вложение 1010 --- Добавлено --- Далее. Использование инпут тайп date - сомнительная затея. Они до сих пор не стандартизированы и везде ведут себя по-разному, а на некоторых мобильных браузерах просто конвертируются в text. И у Хьюстона начинаются проблемы. Три выпадающих списка - день, месяц, год. Проверено, работает. Юзается монстрами от IT повсеместно. --- Добавлено --- Ну и формочка висит чуть выше центра, а не прям по центру, но это третично. В код пока не смотрел, нет времени. Если не считать вылезающие числа и использование date, то заказчик почти принял работу и готов передать ее на ревью.[/QUOTE] Тоже учту. А насчет вертикального позиционирования - низнаю Точнее, не нашел красивый способ. Нашел какую-то фигню. ни в коем случае. Критику воспринимаю всегда адекватно ,тем более, ты знаешь по более меня.
https://github.com/SamyRed/surikat-project/ --- Добавлено --- Отображение цифры в начале убрал (Это был вывод длины reg-date, для дебага). --- Добавлено --- Способ вывода ошибок тоже изменил на массив.
Дату тоже изменил на 3 селекта. Не учёл только високосные года, и в каждом месяце у меня 31 день. Но если помучаться, то можно исправить.