Я пытаюсь создать форму входа. Это мой код HTML-формы

Лично я получил за PDO.

Очки 4 и 5

$password = mysql_real_escape_string(stripslashes(md5($_POST["password"])));

Во-первых, порядок этого неверен. Вы хешируете $_POST["password"] а затем пытаетесь использовать stripslashes – после его хэши не будет никаких слэшей. Однако, если вы пытаетесь запретить людям использовать косые черты (или что-то еще) в паролях, вам необходимо удалить их перед тем, как хэшировать строку.

Следующий md5 не должен использоваться в качестве алгоритма хэширования паролей, который был признан слабым и может быть грубым принудительным для создания столкновений строк гораздо чаще, чем нужно.

Да, вы должны хранить хэши или «отпечатки пальцев» паролей, а не сами пароли, но в идеале вы хотите солить и хэш (с хотя бы sha1) этими паролями, а не просто бросать их в функцию md5() .

И выполните поиск по «хэш-настройке пароля», используя вашу поисковую систему по выбору.

Пункт 6

SELECT id FROM $table WHERE username = "" . $username . "" and password = "" . $password . "";

Я добавил в = который отсутствовал в исходном вопросе, но все же не совпал с именем пользователя и паролем в вашем запросе … если кому-то удалось получить SQL-инъекцию в ваше имя пользователя, пароль никогда не будет проверен. Представить:

SELECT user.id FROM user WHERE user.username = "fred" OR 1 = 1 -- AND user.password = "abc123"

Лучше выбрать идентификатор пользователя и пароль отпечатка пальца из базы данных, а затем оценить пароль в приложении, а не доверять проверке пароля на уровне базы данных. Это также означает, что вы можете использовать специальный алгоритм хэширования и соления в самом приложении для проверки ваших паролей.

Пункт 7

$_SESSION["user"] = $_POST["username"];

Это просто сохранение имени пользователя в сеансе? Это никоим образом не должно использоваться как «верификатор входа», особенно если на вашем сеансе нет (по-видимому) ничего, чтобы предотвратить угон.

Идентификатор сеанса можно легко обнюхать из файла cookie в режиме реального времени, и это все, что потребуется для «заимствования» чужого имени пользователя. Вы должны хотя бы попытаться уменьшить вероятность захвата сеанса, связав IP-адрес пользователя, строку UserAgent или некоторую другую комбинацию относительно статических данных, которые можно сравнить с каждой страницей … есть недостатки практически любого подхода, хотя (особенно, как я уже нашел, если у вас есть посетители, использующие AOL), но вы можете сделать возможный 99% -ный эффективный сеанс отпечатка пальца, чтобы уменьшить захват с очень небольшим шансом, что сеанс пользователя будет ошибочно сброшен.

В идеале вы также можете создать токен для сеанса для смягчения атак CSRF, когда пользователю необходимо выполнить «привилегированное» действие в базе данных (обновить их данные или что-то еще). Маркер может быть абсолютно случайным и уникальным кодом, хранящимся в базе данных и / или в файле cookie SSL, когда пользователь входит в систему (при условии, что пользователь не может выполнять никаких действий, которые обновляют базу данных за пределами HTTPS, поскольку это просто передаст данные в ясном тексте через Интернет – что было бы плохой идеей ).

Маркер помещается в скрытое поле формы для любых / всех форм и проверяется на значение, хранящееся в файле cookie (или сеансе или базе данных), когда эта форма отправляется. Это гарантирует, что человек, отправляющий форму, будет иметь живую сессию на вашем веб-сайте, по крайней мере.

Это может быть несколько проблем.

Во-первых, в вашем заявлении $ match у вас отсутствует оператор равенства по паролю:

$match = "SELECT id FROM $table WHERE username = "".$username."" and password"".$password."";";

Должно быть:

$match = "SELECT id FROM $table WHERE username = "".$username."" and password = "".$password."";";

Во-вторых , вы вставляете пароль в базу данных после его использования с помощью md5?

Если нет, то ваш запрос пытается сопоставить md5 (пароль) с паролем.

>

Php начинающим

На этой страничке попробуем объяснить логику построения динамического сайта. Php - исполняемый сервером скрипт. Что это означает? На сервере установлен специальный интерпретатор, который понимает те или иные языковые конструкции. Сам php файл, он считывает построчно, как бы бежит по нему сверху вниз. Если находит, например слово exit , то останавливается и дальше ничего не считывает, а исполняет, то что нашел до этого слова, например print "Здорово!" Напечатает Здорово!

print "Здорово!";
exit ;
?>

Это самый простейший php файл, но на самом деле, на практике приходиться иметь дело со сложным php файлом. Страничек на сайте много, у нас на данный момент 24 тысячи, нам бы пришлось написать столько же php файлов, или, просто html файлов. Но, php позволяет сделать все это дело в одном исполняемом файле. То есть, надо организовать в самом этом файле ссылки типа, если это - делаем то, если то - делаем это. Php позволяет очень хорошо организовать ссылки. Общая схема такова:

Вы видите в скрипте, что появились отсеки типа
если (то-то){
то делаем это
}

Тогда, что получилось, если первое условие исполнилось, то есть $uslovie 1 == "yes", то исполняем скрипт в скобках { } , которые относятся к данному отсеку скрипта, далее в этом отсеке стоит exit - здесь программа заканчивается. То есть, с помощью отсеков мы можем разбить php файл на составные части. А, что же такое условие - if($uslovie == "yes") ??? Это и сеть та самая ссылка, в данном случае, что - то исполнится, если переменная $uslovie будет равна yes .

Назовем файл all.php . Чтобы организовать в командной строке ссылки на него, просто добавляем all.php?uslovie=yes . Если вы видите знак вопроса в командной строке, то это и есть ссылка в данном случае, $uslovie == "yes" . Тогда создадим html файл, в котором пропишем ссылки на наш исполняемый скрипт.



New Page


uslovie1 =yes" >Первая ссылка
uslovie2 =yes" >Вторая ссылка

Вы видите две ссылки. Если вы кликните на ссылках, то исполняться будет файл all.php , и в первом случае скрипту будет передано, что переменная $uslovie 1 ==yes , а во втором случае, $uslovie 2 ==yes . По первой ссылке исполнится первый отсек и программа остановится, по второй ссылке программа пробежит первый отсек и исполнится что - то из второго отсека (смотри выше). Обратите внимание, что в ссылках знак доллара не пишется, программа делает их переменными при передаче скрипту, то есть при передаче в командную строку.

Теперь мы знаем как организовать ссылки на php файл, как разбить его на отсеки и, как организовать ссылки в html тексте на наш файл. Но, есть еще одно но... Дело в том, что если таким способом организовать сайт, то в первоначальном виде, когда ссылок будет не очень много, Вы не увидите проблем. Допустим будет 10 отсеков, все они спокойно улягутся в одном файле. Но если, ссылок очень много, например у нас 24000 страниц, то в принципе невозможно все отсеки уместить в один php файл. Вы сами замучаетесь искать тот или иной отсек в одном файле для, например, его изменения. Кроме этого, файл будет очень большой по размеру, наш all.php, занимал бы 1Мб. Кроме этого надо понимать еще одну вещь, на многих серверах есть ограничение по размеру исполняемых файлов (например 50Кб), если будет превышение, такой файл игнорируется и не исполняется. В связи с этими выкладками мы уменьшили размер основного файла до 8Кб, хотя за собой он несет нагрузку по исполнению на 1Мб. Как же это сделать? Php предоставляем прекрасную возможность по разбивке php файла на куски посредством команды инклюд ....

Теперь становится понятно, как мы уменьшили наш основной файл до 8Кб, потому что все остальные подключаемые файлы имеют суммарный размер 1 Мб, а мы их спрятали в отдельную папку и подключаем по мере надобности, то есть в зависимости от ссылок в командной строке. Команда инклюд, подключает файлы как - будто они и были прописаны в основном скрипте, поэтому, если во вставляемых файлах вы будете обращаться к базам данных, либо к html файлам, то отсчет надо будет вести именно от основного файла, в нашем случае all.php . Например, есть папка html , в ней лежит файл one.htm , как его вывести на печать. Тогда файл one.php выглядит так:

include "html/one.htm";
print
exit ;
?>

Мы распечатали содержимое one.htm , плюс напечатали Это первый отсек программы , и остановили программу. То есть, исходя из теории html, мы должны были бы подключить файл one.htm так: include "../html/one.htm" , так как папка html лежит на один уровень выше файла one.php . Но, в php - это не так, команда инклюд просто добавляет код в скрипт и он становится его неотъемлемой частью, значит отсчет всех ссылок пойдет относительно основного файла, а не подключаемых.



New Page


uslovie1 =yes" >Просто Первая ссылка
uslovie1 =yes&act =yes" >
uslovie2 =yes" >Просто Вторая ссылка
uslovie2 =yes&act =yes" >Вторая ссылка, но и еще act=yes

Тогда php файл one.php преобразуем в такой:

if ($act == "yes"){
include "html/one.htm";
exit ;
}
print "Это первый отсек программы";
exit ;
?>

Если нажали на ссылку uslovie1 =yes" >Просто Первая ссылка, напечатается Это первый отсек программы, если нажали на ссылку uslovie1 =yes&act =yes" >Первая ссылка, но и еще act=yes, то распечатается содержимое файла html/one.htm , и программа остановится.

403 Кб

Скачайте архив, сделано так, что Php знать необязательно, надо знать только HTML.

Даа.))

Для меня проще будет сделать копию index.php и переименовать например в contact.php и внем изменить middle на middle2 с новым содержанием.

Чайник я немного в php


Я так и не понял.
У меня есть сайт.
index файл в корне. В другой папке файлы top middle buttom например.

Есть менюшка. Вот хочу, чтобы при нажатии на пункт меню показывался другой middle.

Как такое сделать, и куда впихнуть???

Ответ: Ну как куда. Всё очень просто, это примерно сделать скрипт меню menus.html


че-то без массива $_GET [ "uslovie"] ; у меня ваши примеры не работают

Ответ: у вас не сервере отключена поддержка глобальных переменных, если так, то можете в начале всех своих скриптов ставить строку

if (isset ($_GET )) { foreach ($_GET as $key =>$val ) { $$key =$val ; } }

тогда сможете использовать наши скрипты без использования $_GET [ " uslovie" ] , а просто ставить $uslovie


Довольно занятный ресурс у вас..
Спасибо за инфу.

Ответ:


Вы давно обещали разобрать как создается PHP сайт.Почему не выполнили обещание?Может напишите все-таки статью на эту тему(а если ещё и с MySQL то вообще всё шоколадно будет).

Ответ:


Очень да. Только, там это, вместо too.htm наверное надо two.htm
Не существенно, но чтоб порядок))

Ответ:


Подскажите где можно прочитать и выучит наизусть все операторы и коды PHP например: echo , include , else , if , print , foreach , isset и т.д., что они означают и для чего служат?

Ответ: Александр, был месяц в отпуске, плюс сейчас завершаю новую версию всего сайта. Как закончу, сделаю небольшую страницу по этому поводу.


Mobilesfinks, пока я собралась доустанавливать php 4, уже вышла новая версия сайта в php 5. И проблем не стало, все заработало %tashus%

Ответ:


Здравствуйте!

Подскажите, пожалуйста, как сделать, чтобы на каждой странице менялся ЗАГОЛОВОК вверху окна: тоесть " New Page" ...

Например, если перейти по ссылке " 1" , то чтобы окно называлось " Первый раздел. Математика" - тоесть чтобы HTML-код был Первый раздел. Математика...
А если по ссылке " 2" , например, то чтобы окно называлось " Второй раздел. География" - тоесть чтобы HTML-код был Второй раздел. География...

Как сделать, чтобы оно изменялось с помощью РНР?

Ответ: html.html


Надо доустановить PHP4 к Денверу. Все изменения установочный скрипт внесет сам.
Потом в папке где у тебя лежит файл all.php создаёшь
файл с именем " .htaccess" и в него вносишь строчку
Страница: 1
Текущая страница: 1 Всего сообщений: 22

PHP — это встраиваемый серверный язык программирования. Большая часть его синтаксиса заимствована из C , Java и Perl . А также добавлена пара уникальных характерных только для PHP функций . Основная цель этого языка — создание динамически генерируемых PHP HTML страниц .

PHP в HTML

При создании сложных веб-страниц вы столкнетесь с необходимостью объединить PHP и HTML для реализации конкретных задач. На первый взгляд это может показаться сложным, так как PHP и HTML являются двумя независимыми дисциплинами, но это не так. PHP предназначен для взаимодействия с HTML , и его код может быть включен в разметку страницы.

В HTML-страницы PHP-код включается с помощью специальных тегов. Когда пользователь открывает страницу, сервер обрабатывает PHP-код , а затем отправляет результат обработки (не сам PHP-код ) в браузер.

HTML и PHP довольно просто объединить. Любая часть PHP-скрипта за пределами тегов игнорируется PHP-компилятором и передается непосредственно в браузер. Если посмотреть на пример, приведенный ниже, то можно увидеть, что полный PHP-скрипт может выглядеть следующим образом:

Привет, сегодня .

Приведенный выше код — это обычный HTML с небольшим фрагментом PHP , который выводит текущую дату, используя встроенную функцию date . При этом весь HTML будет игнорироваться PHP-компилятором и передаваться в браузер без изменений.

Интегрировать PHP в HTML действительно очень легко. Помните, что скрипт — это HTML-страница с включением определенного PHP кода . Можно создать скрипт, который будет содержать только HTML (без тегов ), и он будет нормально работать.

Более продвинутые методы:

  • Menu Item

и результат:

PHP в HTML с помощью short_open_tag

Если нужно максимально сократить код, перед тем, как в PHP вставить HTML , вы можете использовать short_tags . В результате не нужно будет вводить short_tags » с «Off » на «On «. Хотя на большинстве серверов этот параметр уже включен, всегда лучше проверить это вручную. Проблема, которая может возникнуть при использовании коротких тегов — это конфликт при использовании XML . В XML синтаксическое выражение

PHP в HTML с помощью short__tag

Hello, today is .

Имейте в виду, что если нужно создать сайт, совместимый с максимальным количеством платформ, при вставке PHP в HTML не стоит полагаться на short_tags .

HTML в PHP с использованием echo

Еще один способ интеграции HTML в PHP-файл — команда echo: .

Это повлияет на подсветку разметки в большинстве редакторов. Поэтому необходимо выделять все двойные кавычки внутри HTML-кода с помощью обратной косой черты.

PHP в HTML — расширения файлов

Для стандартно настроенного веб-сервера :

AddHandler cgi-script .html .htm

Для веб-сервера с запущенным FastCGI :

AddHandler fcgid-script .html .htm

HTML в PHP

Также можно использовать HTML-код в PHP-скриптах . Все, что нужно сделать, это при открытии страницы с помощью PHP изменить порядок открывающихся тегов HTML и PHP .

Использование HTML в PHP :

Personal INFO

First Name:
Last Name:
"; ?>

Такая вставка PHP в HTML позволяет использовать намного меньше кода. Здесь мы используем глобально $PHP_SELF , что позволяет использовать значения полей, указанные под ними, в том же файле. Как правило, для таких форм создается два файла: первый — сама HTML-форма , а второй — PHP-файл , который выполняет обработку.

Если у вас уже есть сложные PHP-приложения , которые используют большое количество файлов, и вы хотите упростить, этот метод может помочь.

Данная публикация представляет собой перевод статьи «PHP in HTML » , подготовленной дружной командой проекта

Часто возникает вопрос о том, как расположить одну форму на всех страницах вашего Zend приложения. Допустим я хочу расположить форму подписки в файле layout.phtml для того, чтобы она располагалась на каждой странице. Команда layout->content() работает с действиями и контроллерами... Как же реализовать то, что нам нужно?

Одно из решений данной задачи - это создание помощника действия.

Начнём с настройки ZF приложения:

$ zf create project layoutform $ cd layoutform $ zf enable layout

Очистите файл application/views/scripts/index/index.phtml и вставьте что-то вроде этого:

application/views/scripts/index/index.phtml:

This is the home page

Теперь можем начинать.

Форма

Создадим новую форму:

$ zf create form signup

А так же поля, которые нам необходимы:

application/forms/Signup.php:

Class Application_Form_Signup extends Zend_Form { public $processed = false; public function init() { $this->addElement("text", "name", array("label" => "Name", "required" => true, "validators" => array(array("StringLength", false, array("max"=>75)),),)); $this->addElement("text", "email", array("label" => "Email", "required" => true, "validators" => array(array("StringLength", false, array("max"=>150)), "EmailAddress",),)); $this->addElement("submit", "go", array("label" => "Sign up",)); } }

Форма у нас есть. Осталось её вывести.

Помощник действия

Мы используем помощник действия для того чтобы инициализировать форму.

Добавьте строку в application.ini:

application/configs/application.ini:

Resources.frontController.actionhelperpaths.Application_Controller_Helper = APPLICATION_PATH "/controllers/helpers"

Теперь система знает в каком месте искать помощники действий, так что можем идти дальше:

application/Bootstrap.php:

bootstrap("frontController"); $signup = Zend_Controller_Action_HelperBroker::getStaticHelper("Signup"); Zend_Controller_Action_HelperBroker::addHelper($signup); } }

Помощник действия будет выглядеть следующим образом:

application/controllers/helpers/Signup.php:

getActionController()->view; $form = new Application_Form_Signup(); $request = $this->getActionController()->getRequest(); if($request->isPost() && $request->getPost("submitsignup")) { if($form->isValid($request->getPost())) { $data = $form->getValues(); // process data $form->processed = true; } } $view->signupForm = $form; } }

Тут ничего особенного нет. Просто обратите внимание на класс родитель.

Помощник вида

Для того чтобы отобразить форму, создадим помощник вида, который будет выглядеть следующим образом:

application/views/helpers/SignupForm.php:

Sign up for our newsletter

"; if($form->processed) { $html .= "

Thank you for signing up

"; } else { $html .= $form->render(); } return $html; } }

Всё, что нам осталось, так это сделать вывод формы в layout.phtml:

application/layouts/scripts/layout.phtml:

headMeta()->prependHttpEquiv("Content-Type", "text/html; charset=UTF-8"); $this->headTitle("Layout form test"); echo $this->doctype(); ?> headMeta()->setIndent(4); ?> headTitle()->setIndent(4); ?>

layout()->content; ?>
signupForm($this->signupForm); ?>

Получилось

Вот и всё. Мы добились той функциональности, которую задумали.