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

Форум АНТИЧАТ (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

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

Isis 20.03.2007 16:34

GreenBear, спасибо, приду домой, исправлю и приму к сердцу ваши советы))

Sn@k3 20.03.2007 17:55

" Создаем простой сайт на php " и тут же в глаза бросается код мускуля))

x-treem 20.03.2007 19:36

боян... зачем учить делать сайт если есть много учебников по php.

так - же море цмс-ок, в которых по шагам расписано как их установить.

сугубо мое личное мнение

gormet 20.03.2007 21:54

Цитата:

Сообщение от x-treem
боян... зачем учить делать сайт если есть много учебников по php.

так - же море цмс-ок, в которых по шагам расписано как их установить.

сугубо мое личное мнение

хоть я тоже только учусь кодингу на ПХП но знаю - самая лучшая ЦМС-ка - это самописная! :p

GreenBear 20.03.2007 22:08

Цитата:

так - же море цмс-ок, в которых по шагам расписано как их установить.
а те из ниоткуда взялись ? статья нормальная для общего ознакомления как, но код идет скорее во вред =\

Isis 21.03.2007 01:18

Первый пост обновлен, исправлены баги и переделан код пкрасивее )))
Спасибо зеленому медвежонку :)

KPOT_f!nd 21.03.2007 04:12

насчет кодов =\ Каждый пишит сам и сам делает ошибки =\ тебе не надо было расписывать php-код, а так поверхностоно описать скрипт, а не полность выкладывать =\

Isis 21.03.2007 04:19

Цитата:

Сообщение от KPOT_f!nd
насчет кодов =\ Каждый пишит сам и сам делает ошибки =\ тебе не надо было расписывать php-код, а так поверхностоно описать скрипт, а не полность выкладывать =\

Когда я учил пхп, я очень хотел найти хорошее объяснение тому что пишут....
Вот для таких как я был , я и написал))

blaga 21.03.2007 09:21

я что то не понял, а сайт то твой только и умеет что зарегать пользователя, а потом вывести список их? А где новости? статьи? Гостевая? На сайт тут явно НЕ тянет.
И еще, у тебя поначалу совсем нет никакого плана, ничего нет. Чтобы понять что твой сайт умеет пришлось всю статью читать. А был бы план сразу все видно было бы... Короче, не очень твоя статья. Не понравилось.

Isis 21.03.2007 09:27

Вроде как написано "To be continued" .........
И вроде тема "простой сайт"...
Посже напишу как сделать новости и комментарии.....

Darkweider 21.03.2007 10:43

Да ладно нормальная тема... Молодец. Только вот дыры залатать надо... А след. статья будет , когда допишешь "Латаем дыры на собственно написанном сайте на рнр" . Помоему актуально=) И показать можно наглядно на одном примере все уязвимости и ошибки=)

p-range 21.03.2007 12:40

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

З.Ы. понравилась подпись у автора :D

Isis 21.03.2007 14:31

Цитата:

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

З.Ы. понравилась подпись у автора :D

Мдее...мне кажеться ты прочитал посты и все, а сам код не смотрел....Все дыры залатал еще вчера....всмотрись в код))

Зы: я знаю что подпись рулит)

p-range 21.03.2007 14:53

Цитата:

Мдее...мне кажеться ты прочитал посты и все, а сам код не смотрел....Все дыры залатал еще вчера....всмотрись в код))
вот именно что код сначала был бажным. я смотрел его.

guest3297 21.03.2007 14:54

Залей куда нить установленный движок.
Выложи архив со скриптами.

Darkweider 21.03.2007 15:06

Зря залатал дыры=) Могбы продолжить и показать наглядно для нуубов какие дыры существуют сделать большой обзор уязвимостей... Да ксати залей куда нибудь свой движок, а мы потренируемся=)

Isis 21.03.2007 15:29

Как хостинг сделают так залью....ща сайт не пашет)

dUklUs 21.03.2007 16:17

ПаМаГиТе, такой вопросег, вот допустим я зарегал сайт на халявном хостинге,жино и т.д. как мне этот движок пихнуть на такой сайт, а точне как сделть таблицу, объясните плиз, допустим я файлы кину на хост а дальше че делать ненаю(((
т.е. как создать мускуль этот самый, про ктороый в начел говориться?(

ice1k 21.03.2007 16:32

Цитата:

Сообщение от dUklUs
ПаМаГиТе, такой вопросег, вот допустим я зарегал сайт на халявном хостинге,жино и т.д. как мне этот движок пихнуть на такой сайт, а точне как сделть таблицу, объясните плиз, допустим я файлы кину на хост а дальше че делать ненаю(((
т.е. как создать мускуль этот самый, про ктороый в начел говориться?(

раз уж ты говоришь про JINO, то там в админке твоей будет что-то типа - "Управление MySQL" - вот там и создашь таблицы...

bxN5 21.03.2007 19:08

Там вроде пхпмайадмин,вот создаеш базу->создаеш таблицу->делаеш в таблице мусукль запрос

Ponchik 21.03.2007 19:16

...
echo("Неверный пароль");
header("Location: ../index.php");
...
echo "Регистрация успешно завершена";
header("Location: index.php");
...
Мде...
1)header нельзя юзать после вывода инфы!
2)если ты и надеялся на то, что это булет работать, то юзверь никогда непоймёт чем он ошибся, он никак не увидит надпись "Неверный пароль" или "Регистрация успешно завершена" его просто перекинет (так былобы по твоей логики)
И вобще header возмущает, это делает невозможным использование дизайна, а просто белый сайт это не тема... И exit тоже, половина дизайна загрузится, потом exit и сё, приехали... ИМХО не катит

GreenBear 21.03.2007 19:19

Цитата:

И вобще header возмущает, это делает невозможным использование дизайна, а просто белый сайт это не тема... И exit тоже, половина
мне проще с хедером, т.к заимел привычку выводить все только после полной обработки скрипта ) тут уже у кого какой стиль.

Talisman 21.03.2007 19:31

Цитата:

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

Правильный стиль) т.к. очень много сайтов и инъекций дохнут после вывода интересной инфы (3-4 раза видел).
ЗЫ создается впечатление, что чем дибильнее статья, тем больше на нее комментариев )

Ponchik 21.03.2007 22:37

Ради интереса решил запустить index.php
1)Не знакрыт РНР код ?>
2)Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in index.php on line 13

Убрал 13 строку...

3)Parse error: syntax error, unexpected '<' in index.php on line 15

Неможет HTML код выполнить :) Ну это я не там PHP закрыл
to topicstarter ты ваще скрипты испытовал?

register.php
1)Ты проверяешь if($reg) надо if($_POST[reg]) :)
2)Форма для реги всёвремя выводится, надо добавить else
3)Какой ник не напиши пишет Такое имя уже есть - вместо COUNT(*) надо юзать просто * :rolleyes:
4)Как я уже говорил ошибка с header'ом Warning: Cannot modify header information - headers already sent...
enter.php
1)Закрыл PHP, забыл об этом и попёр в HTML :D
Код:

...
?>
<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
...

2)Сразу при входе на страницу выдаёт ошибку Warning: Cannot modify header information - headers already sent...
3)Даже если юзверь зологинен выдаёт форуму для логина...
4)Код вобще поломан, лишняя } а в конце не хватает } :rolleyes:
users.php
Не закрыт... Да и не открыт РНР код :D

Вот всё что нащёл, есть тама ешё COUNT(*)...
Вобще незнаю как могло прийти в голову юзать count! Он возвращает одну строку с кол-вом записей в таблице... Тоесть если 0 записей, он вернёт 1 строку с значением 0 если их 9999 count вернёт 1 строку с значением 9999... А mysql_num_rows считает чколько в ответе строк, их всегда будет 1 :p
Надо юзать * или mysql_result

p-range 21.03.2007 23:24

мде... собственно о чем я и говорил... \=
Цитата:

чем дибильнее статья, тем больше на нее комментариев )
эт точно ;)

Isis 22.03.2007 17:20

Гы, посже исправлю скрипты и скину ссылку на мой сайт с двигом соответственно :)
Не таким легким конечно, но.....

Isis 23.03.2007 01:03

Как обещал....
Вот мой сайт с почти такими же скриптами Cyber.Projec.FlIsis
=)

p-range 23.03.2007 12:57

Цитата:

http://www.damagelab.org/flisis/downloads.php
с кодировкой что-то не то

Isis 23.03.2007 13:18

Албаниш :)
Сейчас исправлю и чуть посже напишу статью о том как сделать новости и комментарии

Talisman 23.03.2007 18:27

мля, убери мыла с сайта) тупо!


Время: 05:33