Фсьо. Мадыратары плахие. Закриваити тему. Низя тут обсуждать табуляцию. Фу, каки фсе хто апсуждал табуляцию. Ф бан фсих и миня и мадирав!!!
Нет, такого требования, в общем-то нет. Делать надо так, чтобы работало. Несколько файлов? Значит несколько файлов. Одна точка входа с роутингом? Значит одна точка входа с роутингом. По сайтику: 1) "Вы зарегесрированны" ну...это конечно дело не связанное с программированием, но "регистрация" пишется через "И" и "Т", а в суффиксе в данном случае нужна одна "Н". 2) И да, положение не по центру страницы, а это оговорено в ТЗ отдельно. 3) После регистрации пользователь ожидает, что его перенаправит на сайт и уже будет выполнен вход. Это тоже отдельно прописано в ТЗ: 4) Огромного числа "0" нет, а должно быть. См выше. 5) Ты же просто ограничил выбор года. А про 150 лет не просто так было сказано. Это задачка, а не реальный проект. Она не про здравый смысл, она про решение проблем. Конкретно в данном случае - на работу с датами. А еще на обработку входящих данных. Ты удивишься, но на сервере есть учетка с логином oldman. у которой год рождения -1000. Ограничение ввода в форме не является защитой. Это лишь удобство для пользователя, не более того. Никогда не доверяй входящим данным. Что интересно, при попытке регистрации с завышенной датой, ты обрабатываешь этот момент. 6) Не сочти за придирку, но в ТЗ "Too old" и "Too young". Суть в том, что то, что написано в ТЗ, является догмой. Даже если похоже на балаган. Заказчик так просит, что поделать.. Попросит на иврите, значит надо на иврите. Пока так. Это желательно поправить, код пока не прошу.
Код (Text): <?php if (isset($_POST['возраст'])<'5'){ echo"ты еще ребенок"; } if (isset($_POST['возраст'])>'155'){ echo"вам поздно"; }else{ <a href="z4.php">+1</a></a>} ?> Подскажите почему не работает этот кусок? .Спасибо.
отладка/debug http://phpfaq.ru/debug https://netbeans.org/kb/docs/php/debugging_ru.html https://php.ru/forum/threads/howto-...i-po-shagam-i-s-kartinkami.58974/#post-474550
Потому что логики в нём ноль. Логики в нём 0, поскольку Он ожидает что из формы придёт возраст, а по ТЗ должна прийти дата рождения. Результат операции isset(), которая возвращает true или false, на кой-то чёрт сравнивается со строковой константой '5', а потом её же результат - с строковой константой '155' Даже если убрать isset, сравнение строки со строкой (а в $_POST тоже строки) даст неожиданный результат, поскольку при сравнении строк '2' > '155', в отличие от сравнения чисел, где 2 < 155 (разница видна, надеюсь) Вывод - задание от Суриката вам делать рановато. Разберитесь с основами.
@mkramer, я пишу не для того чтобы выпендрится или чтобы быстро сдать задание за счет кого то. Это нужно лично мне. Учу самостоятельно, преодолевая трудности. Может и взял на себя непомерное, но мне жизненно необходимо форсировать обучение, поэтому просьба , если есть желание подсказывать по существу( без ироний и т.д). Я частично разобрался с ошибками. Вот код переделанный. Но все равно он не так работает как надо. Не могу понять . Код (Text): <?php if (isset($_POST['age']) && $_POST['age']<5){ echo"ты еще ребенок"; } if (isset($_POST['age']) && $_POST['age']>150){ echo"вам поздно"; }else{ echo'<a href="z4.php">+1</a>'; } ?> одновременно с "ты еще ребенок"выпадает +1, ну и перебрасывает на эту страницу, чего не должно быть.
ну у тебя два ифа. Один отрабатывает. Конец первого ифа. А вот потом - отдельно второй отрабатывает, но попадает не в then, а в else часть. Но он же сам по себе существует. Вот и...
@Сергей.Ш ну не по вам задачка, что можно сказать по коду ещё? Почитайте книжку. К тому же, придумываете что-то, а не делаете то ТЗ, которое @Fell-x27 просил (вводится дата рождения, а программа самостоятельно высчитывает возраст). Потом, не надо писать сразу на PHP, нарисуйте блоксхему, на ней было бы видно, куда какие else надо ставить. Вообще, с этой задачки надо не начинать, ей надо завершать обучение. Фактически, если человек её более-менее правильно выполнил, он уже знает всё, что необходимо, по меньшей мере по PHP (как делается аутентификация и авторизация, как работать с базой, как обрабатывать формы и т.п.). Если до этой задачки не решён ряд элементарных, то начиная с неё вы не форсируете, вы замедляете обучение. Вот задачи уровня "только начал разбираться с php" (особенно, если до этого не было опыта на других языках, которого, честно говоря, по вашим ошибкам не видно): http://www.itmathrepetitor.ru/zadachi-po-php/ --- Добавлено --- Да, по коду. Здесь уже много раз говорили: успешная отработка POST-запроса должна заканчиваться редиректом, а не выводом чегой-то в браузер пользователю. Это не обсуждается, это надо делать просто потому, что "так надо" (предотвращает повторную отправку данных, если пользователь нажмёт кнопку "обновить" в браузере) --- Добавлено --- Потом, ваша цепочка ифов никак не решает поставленной задачи, поскольку если скрипт только запущен, и на него не отправлены никакие данные, он радостно выдаст кнопку +1, даже если его исправить, как советует Игорь (поскольку isset($_POST["age"]) вернёт false, оба if-а не сработают. В общем ещё раз, начинайте с блоксхемы, а не кода.
Это вот, порой, рождает когнитивный диссонанс, мол, а что же делать, если результатом POST-запроса должен быть какой-то осмысленный ответ сервера, изменение на страничке здесь и сейчас, который не получить без этого запроса? Ответом является следующее: в таком случае вам нужен не POST, а GET-запрос. Названия POST и GET переводятся с английского. POST надо использовать, если для передаваемых данных применимо понятие "состояние". GET - если не применимо. Грубо, POST - это все, что должно быть сохранено, запощщено на сервер. Что будет обработано и к чему будет доступ и после редиректа. У чего есть состояние. GET-ами же мы посылаем stateless-инфу. Какие-то триггеры, идентификаторы, что-то такое, что страница должна обработать здесь и сейчас. В таком случае хранилищем состояния является, по-хорошему, адресная строка браузера. При обновлении страницы результат не будет меняться, страница будет той же, что и была, хотя при этом изменений на сервере нет - только реакция на GET-запрос. GET - получить. Ты как бы говоришь серверу, "дай мне то, что ты обычно даешь при таких вот входящих параметрах".
mkramer, Fell-x27 Спасибо, законспектировал ваши дельные советы ,спасибо за ссылку с задачками. Буду разбираться, надеюсь не раз вернусь к вашему форуму.
Главное, если будете решать, не поленитесь и начните именно с пункта 1. Начиная с пункта 10 там есть задачи уже достаточно высокого профессионального уровня. Задачи пункта 1 можно прорешать за 1-2 дня, в принципе (это по поводу "форсировать обучение")
Добрый вечер. Нашел вашу задачу через гугл, решил попробовать свои силы. http://teachphp.h1n.ru - вот пример. Ссылки на исходники: 1) index.php - https://gist.github.com/HeuPoH/04e1bf24f118163331a43a56c0b19bb6 2) reg.php - https://gist.github.com/HeuPoH/ad5e1f149c44125f3177ff1a31ccd9e6 Код в head.php PHP: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html xmlns = "http://www.w3.org/1999/xhtml" xml:lang = "ru"> <head> <meta http-equiv = "Content-Type" content = "text/html; charset = utf-8"> </head> <body> <div align = "center"> <?php session_start(); ?> Код в core.php Код (Text): <?php $conf = parse_ini_file('config.ini', true); $mysqli = mysqli_connect($conf['mysqli_host'],$conf['mysqli_user'],$conf['mysqli_password'],$conf['mysqli_database']) or mysqli_error($mysqli); ?> У кого есть время и знания, прошу оцените проделанную работу. А да, с css не дружу, поэтому стилей вообще нет(
Ну у тебя не по центру, это уже немного нарушение ТЗ. Но не сильное. Теперь более тонкая критика. Что хорошо: всё правильно экранировано, насколько я увидел (может кто-то заметит), традиционного бреда по htmlspecialchars в качестве защиты от инъекции нету. htmlspecialchars использован, как полагается при выводе Везде после отработки POST стоят редиректы Что мне не понравилось: Очень неаккуратное форматирование кода, нету отступов после каждой { Возраст логично проверять после того, как проверил, что введена конкретная дата Не понял, зачем был использован токен при регистрации. Так, ненужное поле, ничего не даёт. Теперь о самой проверке: PHP: if($date[2] - $_POST['year'] < 5 && $date[1] >= $_POST['month'] && $date[0] >= $_POST['day']) $err[] = 'Вы слишком молоды'; elseif($date[2] - $_POST['year'] > 150 && $date[1] >= $_POST['month'] && $date[0] >= $_POST['day']) $err[] = 'Вы слишком стары'; if(checkdate($_POST['month'], $_POST['day'], $_POST['year']) == FALSE) $err[] = 'Неверная дата'; Вроде работает, но лучше всё-таки использовать стандартные функции php по работе с датами - там уже выверены все алгоритмы
Вот она - слава. Все, теперь ко мне на кривой кобыле не подъехать, а обращаться можно исключительно "Мсье Сурикат" По делу: 0) То, что написано выше. 1) Таки не по центру, и форма как будто скопирована у предыдущего исполнителя "до винтика". 2) Для таких вещей, при редиректе используй метку в куки или GET_запросе, которая, при отрисовке страницы, скажет браузеру, что нужно маякнуть о проблемах. Это распространенная практика. 3) PHP: unset($_SESSION['u_id']); unset($_SESSION['u_token']); session_destroy(); Раз уж ты уничтожаешь сессию, убивать переменные в ней перед этим, не стоит. Ты все равно потом делаешь перенаправление, при следующем вызове переменные и так умрут. 4) Хеширование пароля лучше сделать с использованием password_hash и password_verify. 5) Ну и надписи не по ТЗ, заказчик придирается. В остальном все, в принципе, ок --- Добавлено --- P.S. Прикрутить чтоль каким-то боком ООП к заданию, а то пробел в этом плане имеется. Хотя, с другой стороны, оно, как таковое, тут и не особо нужно.. Да и слишком обширная тема для проверок знаний.
Ну...на самом деле, для простейшей веб-разработки того, что есть в задаче - с избытком. Тут же только набор кейсов. А их решение - на совести авторов. Рекурсии, замыкания, генераторы это уже другая лига. И тут уже нужны чисто упражнения на данный инструментарий. Обход деревьев там, или реализация фабрик хитровыбоенных. Специфичные все же вещи. Где-то на сайте были обсуждения сериализованных представлений множеств, там вот просто раздолье для подобного рода инструментария. Упаковка деревьев в тот же Materialized Path с последующим восстановлением и пересчетом, например. Но это все тонкости знания языка. А текущая задачка - чисто на "сайтостроение".
Спасибо за ответ, если не трудно можете привести какой нибудь правильно оформленный код или ссылку типа ГОСТа? на счет токена, в начальной версии у меня выход был в отдельном файл, и токен я передавал через гет, и в файле выхода я проверял токен, который передался через гет и токен юзера в базе. Остальные замечания буду исправлять) Спасибо еще раз