Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Статьи (https://forum.antichat.xyz/forumdisplay.php?f=30)
-   -   Создаем простой сайт на php (https://forum.antichat.xyz/showthread.php?t=35948)

Isis 20.03.2007 16:11

Создаем простой сайт на 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 20.03.2007 16:13

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;">&nbsp;</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']) < || 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 20.03.2007 16:14

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($autnme0) > 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;'>&nbsp;<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

Talisman 20.03.2007 16:26

$query = "SELECT COUNT(*) FROM users WHERE name = '$_POST[name]' AND pass = '$_POST[password]'"; инъекция

Talisman 20.03.2007 16:27

ЗЫ код до боли знаком.. щас посмотрю....

Isis 20.03.2007 16:28

Если есть дырки, пишите сразу как заковырять...
Спасибо)

GreenBear 20.03.2007 16:28

Цитата:

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($autnme0) > 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

GreenBear 20.03.2007 16:29

Цитата:

Если есть дырки, пишите сразу как заковырять...
просто это автоматом надо делать, все данные которые идут в БД делать в mysql_escape_string()

Talisman 20.03.2007 16:32

да) нашол сорец) ISBN 5-94157-837-7
"Головоломк на пшп для хакера", Максим Кузнецов, Игорь Симдянов.
2 nerezus у них бред пожестче, чем у фленова))) учат уходить от инъекций, и в своем коде дают их 10-20 :)))
ЗЫ плюс заработал, т.к. хотябы переработал их сорец)

GreenBear 20.03.2007 16:34

Вообще, я хоть и не профи в пхп, но даже для меня код извращенский.


Время: 09:10