Собственно, почти вся работа была сделана за 3,5 часа, но вот поиск по соответствию убил у меня 2 часа. Большое спасибо Анбу, который подсказал запрос в базу для такого поиска. Без него, наверное, до завтра бы ковырял

Посмотреть в работе можно тут:
http://almazdeldiablo.ru/index.php
Заранее прошу прощения за небольшую путаницу в коде - вначале делал все под переключатель ?page=reg и ?page=users, но потом забил на это дело.
Исходники:
Файл index.php
<?php
define( 'KEY', true );
require_once 'functions.php';
/* Если нажата кнопка, начинаем проверять данные */
if( isset( $_POST['submit'] ) ) {
/* Вывод ошибки, если поле не заполнено */
if( $_POST['name'] == '' ) {
table_open( 'Ошибка', '', 'padding-bottom: 10px;' );
table_body( '
<tr>
<td style="background: #f2f6fa; border-bottom: #4a627d 1px solid; padding: 5px; font-size: 9pt;">
Введите имя для регистрации
</td>
</tr>
' );
table_close();
$errors[] = 'Не введен ник';
}
/* Если нет ошибок, добавляем юзера */
if( !count( $errors ) ) {
sql_connect( $host, $user, $pass, $db );
mysql_query( "INSERT INTO `names`
SET
`name` = '" . mysql_real_escape_string( $_POST['name'] ) . "'"
);
mysql_close();
header( 'Location: /index.php' ); /* Защита от F5 */
}
else {
header( 'Location: /index.php' ); /* Защита от F5 */
}
}
/* HTML */
open_html( 'Решение задачи от twin' );
table_open( 'Регистрация', '', 'margin-top: 20px;' );
table_body( '
<tr>
<td align="center" style="background: #f2f6fa; border-bottom: #4a627d 1px solid; padding: 5px; font-size: 9pt;">
<p>
<form method="post" action="">
<input type="text" name="name" size="15" value="" />
</p>
<p>
<input type="submit" name="submit" value="Зарегистрироваться" />
</form>
</p>
</td>
</tr>
');
table_close();
table_open( 'Поиск', '', 'margin-top: 10px;' );
table_body( '
<tr>
<td align="center" style="background: #f2f6fa; border-bottom: #4a627d 1px solid; padding: 5px; font-size: 9pt;">
<p>
<form method="get" action="?">
<input type="text" name="search" size="15" value="" />
</p>
<p>
<input type="submit" name="s_submit" value="Поиск" />
</form>
</p>
</td>
</tr>
');
table_close();
$html_margin = "20px;";
sql_connect( $host, $user, $pass, $db );
$query1 = mysql_query( "SELECT * FROM `names` ORDER BY `date` DESC" );
/* Вывод даты регистрации юзера */
if( isset( $_GET['user'] ) ) {
$html_margin = "10px;";
$query2 = mysql_query( "SELECT `name`, `date` FROM `names` WHERE `id` = '" . mysql_real_escape_string( $_GET['user'] ) . "'" );
$result2 = mysql_fetch_assoc( $query2 );
table_open( 'Инфо о юзере', '', 'margin-top: 20px;' );
table_body( '
<tr>
<td align="center" style="background: #f2f6fa; border-bottom: #4a627d 1px solid; padding: 5px; font-size: 9pt;">
<strong>' . htmlspecialchars( $result2['name'] ) . '</strong> был зарегистрирован <strong>' . htmlspecialchars( $result2['date'] ) . '</strong>
</td>
</tr>
');
table_close();
}
/* Поиск */
if( count( $_GET['search'] ) ) {
$html_margin = "10px;";
$query3 = mysql_query( "SELECT * FROM `names` WHERE `name` LIKE '%" . mysql_real_escape_string( $_GET['search'] ) . "%' ORDER BY `date` DESC" );
if( mysql_num_rows( $query3 ) != '0' ) {
table_open( 'Результаты поиска', '', 'margin-top: 20px;' );
table_body( '
<tr>
<td style="background: #f2f6fa; border-bottom: #4a627d 1px solid; padding: 5px; font-size: 9pt;">
<p style="padding-left: 20px;">Всего нашлось: <strong>' . mysql_num_rows( $query3 ) . '</strong></p>
</td>
</tr>
' );
while( $result3 = mysql_fetch_assoc( $query3 ) ) {
table_body( '
<tr>
<td style="background: #f2f6fa; border-bottom: #4a627d 1px solid; padding: 5px; font-size: 9pt;">
<p>' . htmlspecialchars( $result3['name'] ) . '</p>
</td>
</tr>
');
}
table_close();
}
else {
table_open( 'Результаты поиска', '', 'margin-top: 20px;' );
table_body( '
<tr>
<td style="background: #f2f6fa; border-bottom: #4a627d 1px solid; padding: 5px; font-size: 9pt;">
Нет такого
</td>
</tr>
');
table_close();
}
}
table_open( 'Список юзеров', '', 'margin-top: ' . $html_margin . ';' );
/* Вывод списка пользователей */
while( $result1 = mysql_fetch_assoc( $query1 ) ) {
table_body( '
<tr>
<td style="background: #f2f6fa; border-bottom: #4a627d 1px solid; padding: 5px; font-size: 9pt;">
<a style="text-decoration: none; border-bottom: #4a627d 1px dotted; color: #4a627d;" href="/index.php?page=users&user=' . htmlspecialchars( $result1['id'] ) . '">
' . htmlspecialchars( $result1['name'] ) . '
</a>
</td>
</tr>
');
}
table_close();
close_html( 'by AlmazDeldiablo to <a style="text-decoration: none; border-bottom: #4a627d 1px dotted; color: #4a627d;" href="http://phpforum.ru">phpForum.ru</a>' );
?>
functions.php
<?php
if( !defined( 'KEY' ) ) {
header( 'HTTP/1.1 404 Not Found' );
exit( file_get_contents( '404.html' ) );
}
require_once 'mysql.php';
function sql_connect( $host, $user, $pass, $db ) {
$connect = mysql_connect( $host, $user, $pass ) or die( mysql_error() );
$select = mysql_select_db( $db ) or die( mysql_error() );
}
/*
==========================
Функции работы с HTML
==========================
*/
/* Открытие HTML */
function open_html( $page_title ) {
echo <<<HTML
<!DOCTUPE html>
<html>
<head>
<title>$page_title</title>
<meta http-equiv="content-type" content="text/html; charset=cp1251" />
<link rel="stylesheet" type="text/css">
</link>
</head>
<body style="font-family: Arial; font-size: 7pt; margin: 0; margin-top: 20px;">
HTML;
}
/* Открытие таблицы */
function table_open( $title, $colspan1, $style ) {
echo <<<HTML
<table cellpadding="0" cellspacing="0" style="width: 350px; margin: auto; $style">
<tr>
<td colspan="$colspan1" align="center" style="border-top: #4a627d 1px solid; border-bottom: #4a627d 1px solid; background: #aab9ca;">$title</td>
</tr>
HTML;
}
/* Тело таблицы */
function table_body( $content ) {
echo <<<HTML
$content
HTML;
}
/* Закрытие таблицы */
function table_close() {
echo <<<HTML
</table>
HTML;
}
/* Закрытие HTML */
function close_html( $copy ) {
echo <<<HTML
<span style="float: right; margin: 10px; color: #4a627d;">
$copy
</span>
HTML;
}
?>
mysql.php
<?php
if( !defined( 'KEY' ) ) {
header( 'HTTP/1.1 404 Not Found' );
exit( file_get_contents( '404.html' ) );
}
$host = "localhost";
$user = "root";
$pass = "";
$db = "add";
?>
Спустя 8 минут, 25 секунд (14.10.2010 - 20:31) aH6y написал(а):
как и написал у тя на сайте делай проверку на пустоту.
и поставь лок сервер. плюсы: скорость проверки - нажал ctrl + s и сразу можешь смотреть результат. и никто не взламает твою базу данных пока ты бушь закрывать дыры типо без емпти и других функций...
и поставь лок сервер. плюсы: скорость проверки - нажал ctrl + s и сразу можешь смотреть результат. и никто не взламает твою базу данных пока ты бушь закрывать дыры типо без емпти и других функций...
Спустя 1 минута, 18 секунд (14.10.2010 - 20:32) kirik написал(а):
В поиске sql-инъекция.
Спустя 5 минут, 57 секунд (14.10.2010 - 20:38) AlmazDelDiablo написал(а):
Обновил код. Вроде закрыл sql-инъекцию в поиске и сделал проверку на пустоту.
Спустя 1 минута, 19 секунд (14.10.2010 - 20:39) kirik написал(а):
Цитата |
Warning: Cannot modify header information - headers already sent by (output started at /.../almazdeldiablo.ru/functions.php:47) in /.../almazdeldiablo.ru/index.php on line 36 |
если с пустым именем регистрироваться
Спустя 7 минут, 14 секунд (14.10.2010 - 20:46) aH6y написал(а):
он выводит текст:
Ошибка
Введите имя для регистрации
до доктайпа и до отправки header'a поэтому ошибку выдаёт.
совет: запиши весь текст ошибки с тегами в переменную и выводи эту переменную если она есть внутри тега body
Ошибка
Введите имя для регистрации
до доктайпа и до отправки header'a поэтому ошибку выдаёт.
совет: запиши весь текст ошибки с тегами в переменную и выводи эту переменную если она есть внутри тега body
Спустя 5 минут, 38 секунд (14.10.2010 - 20:52) AlmazDelDiablo написал(а):
Все, больше варнинг не выдает при пустом нике. Но ошибку перестал выдавать 

/* Если нажата кнопка, начинаем проверять данные */
if( isset( $_POST['submit'] ) ) {
/* Вывод ошибки, если поле не заполнено */
if( $_POST['name'] == '' ) {
header( 'Location: /index.php' ); /* Защита от F5 */
table_open( 'Ошибка', '', 'padding-bottom: 10px;' );
table_body( '
<tr>
<td style="background: #f2f6fa; border-bottom: #4a627d 1px solid; padding: 5px; font-size: 9pt;">
Введите имя для регистрации
</td>
</tr>
' );
table_close();
$errors[] = 'Не введен ник';
}
/* Если нет ошибок, добавляем юзера */
if( !count( $errors ) ) {
sql_connect( $host, $user, $pass, $db );
mysql_query( "INSERT INTO `names`
SET
`name` = '" . mysql_real_escape_string( $_POST['name'] ) . "'"
);
mysql_close();
header( 'Location: /index.php' ); /* Защита от F5 */
}
}
Спустя 4 минуты, 36 секунд (14.10.2010 - 20:57) aH6y написал(а):
правильнее писать:
if(empty($_POST['name']))
Спустя 43 минуты, 20 секунд (14.10.2010 - 21:40) twin написал(а):
Код плохо читается. И очень избыточен.
Для чего в логике теги, а потом их же в функцию?
По читабельности - ты если зендовский стандарт юзаешь, то юзай правильно. Не так надо:
а так
Длинные строки... все под скролл залезло. Причем при этом не поскупился на 8 пробелов отступа. Табуляторы юзаешь...
Не айс.
По условиям - задача решена не полностью.
Данные в форму при поиске не возвращаются, скрипт зависим от магических кавычек. Поиск символов % и _ некорректен. Не регистрируется имя 0.
Пока плохо. Дальше нет смысла смотреть, исправляй.
И не торопись, никто не гонит. В решения подглядывать тоже не запещает.
Для чего в логике теги, а потом их же в функцию?
По читабельности - ты если зендовский стандарт юзаешь, то юзай правильно. Не так надо:
}
else {
а так
}else{
Длинные строки... все под скролл залезло. Причем при этом не поскупился на 8 пробелов отступа. Табуляторы юзаешь...
Не айс.
По условиям - задача решена не полностью.
Данные в форму при поиске не возвращаются, скрипт зависим от магических кавычек. Поиск символов % и _ некорректен. Не регистрируется имя 0.
Пока плохо. Дальше нет смысла смотреть, исправляй.
И не торопись, никто не гонит. В решения подглядывать тоже не запещает.

Спустя 22 минуты, 58 секунд (14.10.2010 - 22:03) AlmazDelDiablo написал(а):
Как будет время - перепишу. Без красивого ХТМЛа и прочего. Просто страницу. с данными ^^
Кстати, а что такое зендовский стандарт?)
Кстати, а что такое зендовский стандарт?)
Спустя 4 минуты, 49 секунд (14.10.2010 - 22:08) aH6y написал(а):
AlmazDelDiablo
zend framework + google = ответ
zend framework + google = ответ
_____________
Блог | VK | GitHub | Twitch