Создаем простой сайт на php
20.03.2007, 16:11
Флудер
Регистрация: 20.11.2006
Сообщений: 3,315
С нами:
10248806
Репутация:
2371
Создаем простой сайт на php
Как создать простой сайт на php с использованием MySql базы данных?!
Я расскажу вам
Итак начнем...........
Начало
Для начала найдем хостинг с php и mysql (Лучше локалхост
)
Двигаемся дальше...........
Создание БД
Заходим в mysql...............Создаем бд с именем 'site'
Пишем sql код:
Код:
CREATE TABLE `users` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(30) collate utf8_unicode_ci NOT NULL,
`pass` tinytext collate utf8_unicode_ci NOT NULL,
`email` tinytext collate utf8_unicode_ci NOT NULL,
`icq` int(9) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
config.php
Создаём файл config.php - здесь поместим код соединения к бд, логин, таблицу, пасс и прочее
Например:
PHP код:
<?php
// Адрес сервера MySQL
$dbhost = "localhost" ;
// Имя пользователя базы данных
$dbuser = "root" ;
// и его пароль
$dbpass = "password" ;
// Имя базы данных, на хостинге или локальной машине
$dbname = "site" ;
$db = @ mysql_connect ( $dbhost , $dbuser , $dbpass );
if (! $db ) {
exit ( "<P>Сервер базы данных не доступен</P>" );
}
if (!@ mysql_select_db ( $dbname , $db )) {
exit( "<P>База данных $dbname не доступна</P>" );
}
?>
Последний раз редактировалось Isis; 21.03.2007 в 00:33 ..
20.03.2007, 16:13
Флудер
Регистрация: 20.11.2006
Сообщений: 3,315
С нами:
10248806
Репутация:
2371
index.php
Теперь создаём главную страницу сайта, а именно index.php.....
PHP код:
<?php
//Начинаем сессию
session_start ();
?>
<html>
<head><title>Главная страница</title></head>
<body>
<?php
if(! session_is_registered ( 'name' )) {
echo "<a href='./register.php' title='Регистрация'>Регистрация</a><br /><hr />
<a href='./enter.php' title='Войти'>Войти</a><br /><hr />" ;
} else {
echo "Привет $_SESSION [ 'name'] <br /><br /><a href='./enter.php?do=logout' title='Выход'>Выход</a><br /><hr />" ;
}
< a href = './users.php' title = 'Зарегистрированные пользователи' > Зарегистрированные пользователи </ a >< br />
</ body >
</ html >
register.php
Создаем страницу регистрации.....
Давайте сделаем обязательные поля :
name, pass, email
и простое поле icq .......
PHP код:
<html>
<head><title>Регистрация</title></head>
<body>
<form method="post">
<table>
<tr><td>Имя*:</td></tr>
<tr><td><input type="text" name="name" /></td></tr>
<tr><td>Пароль*:<br /><input type="password" name="pass" /></td><td style="width: 20;"> </td>
<td>Повторите пароль*:<br /><input type="password" name="repass" /></td></tr>
<tr><td>E-mail*:</td></tr>
<tr><td><input type="text" name="email" /></td></tr>
<tr><td>Icq:</td></tr>
<tr><td><input type=text name="icq" maxlength="9" /></td></tr>
<tr><td><input type="submit" title="Регистрация" name="reg" value="Регистрация" /></td></tr>
</table>
</form>
<?php
if( $reg ) {
//Защищаемся от скули
if (! get_magic_quotes_gpc ()) {
$_POST [ 'name' ] = mysql_escape_string ( $_POST [ 'name' ]);
$_POST [ 'pass' ] = mysql_escape_string ( $_POST [ 'pass' ]);
$_POST [ 'repass' ] = mysql_escape_string ( $_POST [ 'repass' ]);
$_POST [ 'email' ] = mysql_escape_string ( $_POST [ 'email' ]);
$_POST [ 'icq' ] = mysql_escape_string ( $_POST [ 'icq' ]);
}
// Проверяем, правильно ли заполнены обязательные поля
if(empty( $_POST [ 'name' ]) && !isset( $_POST [ 'name' ]))
exit ( "Заполните поле 'Имя' " );
if(empty( $_POST [ 'pass' ]) && !isset( $_POST [ 'pass' ]))
exit( "Заполните поле 'Пароль' " );
if(empty( $_POST [ 'repass' ]) && !isset( $_POST [ 'repass' ]))
exit( "Заполните поле 'Повторите пароль' " );
if( $_POST [ 'pass' ] != $_POST [ 'repass' ])
exit( "Пароли не совпадают" );
//Проверяем введеные данные в форму
if( $_POST [ 'icq' ]) {
if(! is_numeric ( $_POST [ 'icq' ]))
exit( "ICQ состоит из цифр :)" );
if( strlen ( $_POST [ 'icq' ]) < 5 || strlen ( $_POST [ 'icq' ]) > 9 )
exit( "Поле 'ICQ' должно содержать от 5 до 9 символов" );
}
// Проверяем email на соответствие
if( $_POST [ 'email' ]) {
if(! preg_match ( "|^[-0-9a-z_]+@[-0-9a-z_]+\.[a-z]{2,6}$|i" , $_POST [ 'email' ]))
exit( "E-mail должен быть в формате 'billy@micrsoft.com' " );
}
//==========================================================================//
// Устанавливаем соединение с базой данных
require_once( "config.php" );
// Проверяем, не было ли переданное имя зарегистрировано ранее
$query = "SELECT COUNT(*) FROM `users` WHERE name = ' $_POST [ name ] '" ;
$result = mysql_query ( $query );
if(! $result ) exit( "Ошибка - " . mysql_error ());
if( mysql_num_rows ( $result ) > 0 ) exit( "Такое имя уже есть" );
//Выполняем sql запрос на регистрацию юзера
$_POST [ 'pass' ] = md5 ( $_POST [ 'pass' ]);
$query = "INSERT INTO users VALUES(NULL, ' $_POST [ name ] ', ' $_POST [ pass ] ', ' $_POST [ email ] ', ' $_POST [ icq ] ')" ;
//Если регистрация прошла успешно, то перенаправляем на главную страницу
if( mysql_query ( $query )) {
echo "Регистрация успешно завершена" ;
header ( "Location: index.php" );
} else {
exit( "Ошибка при добавлении данных - " . mysql_error ());
}
}
Последний раз редактировалось Isis; 21.03.2007 в 14:34 ..
20.03.2007, 16:14
Флудер
Регистрация: 20.11.2006
Сообщений: 3,315
С нами:
10248806
Репутация:
2371
enter.php
В этом файле разместим код авторизации пользователя
PHP код:
<?php
session_start ();
?>
<form method='post'>
Имя : <br /><input type='text' name='name' value='$_SESSION[name]' /><br /><br />
Пароль : <br /><input type='password' name='password' value='$_SESSION[password]' /><br /><br />
<input type='submit' value='Войти' title='Войти' />
</form>
<?php
//Если поля не пустые, производим попытку входа
if( $_POST [ 'name' ] && $_POST [ 'password' ]) {
// Устанавливаем соединение с базой данных
require_once( "config.php" );
//Защищаемся от скули )
if (! get_magic_quotes_gpc ()) {
$_POST [ 'name' ] = mysql_escape_string ( $_POST [ 'name' ]);
$_POST [ 'password' ] = mysql_escape_string ( $_POST [ 'password' ]);
} else {
$_POST [ 'name' ] = addslashes ( $_POST [ 'name' ]);
$_POST [ 'password' ] = addslashes ( $_POST [ 'password' ]);
}
//Заходим
$_POST [ 'password' ] = md5 ( $_POST [ 'password' ]);
$query = "SELECT COUNT(*) FROM users WHERE name = ' $_POST [ name ] ' AND pass = ' $_POST [ password ] '" ;
$autnme = mysql_query ( $query );
if(! $autnme ) exit( "Ошибка" );
// Получаем число записей
if( mysql_result ( $autnme , 0 ) > 0 )
define ( "TOTAL" , 1 );
}
if( defined ( "TOTAL" )) {
$_SESSION [ 'name' ] = $_POST [ 'name' ];
$_SESSION [ 'password' ] = $_POST [ 'password' ];
}
// Если посетитель "вошел" - перенаправляем его
if(isset( $_SESSION [ 'name' ]) && isset( $_SESSION [ 'password' ])) {
header ( "Location: ../index.php" );
} else {
echo( "Неверный пароль" );
header ( "Location: ../index.php" );
}
//Если юзер выходит - удаляем сессию
if( $_GET [ 'do' ] == 'logout' ){
session_destroy ();
header ( "Location: ../index.php" );
}
users.php
Создаем файл users.php, где будут выводиться уже зарегистрированные пользователи...
PHP код:
< html >
< head >< title > Пользователи </ title ></ head >
< body >
// Устанавливаем соединение с базой данных
require_once( "config.php" );
$query = "SELECT * FROM `users` ORDER BY `id` ASC" ;
$result = mysql_query ( $query );
echo "<table style='border: 0px;'><tr>
<td style='width: 100px; text-align: center;' class='td'>Имя</td>
<td style='width: 100px; text-align: center;' class='td'>ICQ</td>
<td style='width: 150px; text-align: center;' class='td'>E-mail</td></tr>" ;
while( $row = mysql_fetch_assoc ( $result )) {
echo "<tr><td class='td' style='width: 100px;'> <font style='font-weight: bold;'> $row [ name ] </font></td>" ;
if( $row [ 'icq' ] != '0' ){
echo "<td style='text-align: center;' class='td'><a href='http://www.icq.com/ $row [ icq ] ' target='_blank' title='Icq $row [ name ] $row [ icq ] '><font style='color: green; font-weight: bold;'> $row [ icq ] </font></a></td>" ;
} else {
echo "<td style='text-align: center;' class='td'><font style='color: red; font-weight: bold;'>---</font></td>" ;
}
echo "<td style='text-align: left;' class='td'><a href='mailto: $row [ email ] ' title='Отправить e-mail $row [ name ] '> $row [ email ] </a></td>" ;
}
echo "</table>" ;
Ну что же.......
To be continued
Последний раз редактировалось Isis; 21.03.2007 в 02:07 ..
20.03.2007, 16:26
Постоянный
Регистрация: 22.04.2006
Сообщений: 566
С нами:
10554411
Репутация:
517
$query = "SELECT COUNT(*) FROM users WHERE name = '$_POST[name]' AND pass = '$_POST[password]'"; инъекция
20.03.2007, 16:27
Постоянный
Регистрация: 22.04.2006
Сообщений: 566
С нами:
10554411
Репутация:
517
ЗЫ код до боли знаком.. щас посмотрю....
20.03.2007, 16:28
Флудер
Регистрация: 20.11.2006
Сообщений: 3,315
С нами:
10248806
Репутация:
2371
Если есть дырки, пишите сразу как заковырять...
Спасибо)
20.03.2007, 16:28
наркоман с медалью
Регистрация: 07.05.2005
Сообщений: 3,704
С нами:
11058146
Репутация:
4536
if (!$db)
{
exit ("<P>Сервер базы данных не доступен</P>" );
}
if (!@mysql_select_db($dbname, $db))
{
exit( "<P>База данных не доступна</P>" );
}
хм, не проще ли or die("<P>Сервер базы данных не доступен</P>")?
if(!empty($_POST['name']) && !empty($_POST['password']))
не понимаю зачем использовать empty, когда можно и без него.
PHP код:
if( $_POST [ 'name' ] && $_POST [ 'password' ])
if(isset($_SESSION['name']) && isset($_SESSION['password'])) {
echo "<html><head>
<meta HTTP-EQUIV='Refresh' CONTENT='0; URL=index.php'>
</head><body>";
}
зачем? header("Location: ..") быстрее и проще.
PHP код:
if( mysql_result ( $autnme , 0 ) > 0 )
define ( "TOTAL" , 1 );
}
if( defined ( "TOTAL" )) {
$_SESSION [ 'name' ] = $_POST [ 'name' ];
$_SESSION [ 'password' ] = $_POST [ 'password' ];
}
боже... а mysql_num_rows на что?
PHP код:
if( mysql_num_rows ( $result ){
//
}
PHP код:
$numrows = mysql_num_rows ( $result );
хм... а не проще ли
PHP код:
while( $row = mysql_fetch_assoc ( $result )){
//
}
а вообще я не вижу в статье смысла.. если кто знает пхп, для него это сделать не проблема. а те, кто его недостаточно знает и с этой статьей мало что сможет сделать)
+8
20.03.2007, 16:29
наркоман с медалью
Регистрация: 07.05.2005
Сообщений: 3,704
С нами:
11058146
Репутация:
4536
Если есть дырки, пишите сразу как заковырять...
просто это автоматом надо делать, все данные которые идут в БД делать в mysql_escape_string()
20.03.2007, 16:32
Постоянный
Регистрация: 22.04.2006
Сообщений: 566
С нами:
10554411
Репутация:
517
да) нашол сорец) ISBN 5-94157-837-7
"Головоломк на пшп для хакера", Максим Кузнецов, Игорь Симдянов.
2 nerezus у них бред пожестче, чем у фленова))) учат уходить от инъекций, и в своем коде дают их 10-20
))
ЗЫ плюс заработал, т.к. хотябы переработал их сорец)
20.03.2007, 16:34
наркоман с медалью
Регистрация: 07.05.2005
Сообщений: 3,704
С нами:
11058146
Репутация:
4536
Вообще, я хоть и не профи в пхп, но даже для меня код извращенский.
Предыдущая тема
Следующая тема
Похожие темы
Тема
Автор
Раздел
Ответов
Последнее сообщение
Books PHP
FRAGNATIC
PHP
186
21.02.2010 02:41
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
English (US)
Russian (RU)