<?php
header("Content-Type: text/html; charset=utf-8");
error_reporting(E_ALL);
///////////////////////////////////////////////////////////////////
// соединение с БД //
///////////////////////////////////////////////////////////////////
$db_host = 'localhost';
$db_user = 'root';
$db_password = '';
$db_database = '';
$connect = mysql_connect ($db_host, $db_user, $db_password) or die (mysql_error());
mysql_select_db ($db_database, $connect) or die (mysql_error());
mysql_query ('SET NAMES utf8');
mysql_query ('SET CHARACTER SET utf8');
mysql_query ('SET COLLATION_CONNECTION="utf8_general_ci"');
/////////////////////////////////////////////////////////////////////
// функции //
/////////////////////////////////////////////////////////////////////
function my_stripslashes($value) //Функция stripslashes
{
$value = is_array($value) ?
array_map('my_stripslashes', $value) :
stripslashes($value);
return $value;
}
//если magic_quotes вкл. удаляем
if(get_magic_quotes_gpc())
{
$_GET = my_stripslashes($_GET);
$_POST = my_stripslashes($_POST);
}
//////////////////////////////////////////////////////////////////////
function my_esc($value) //функция mysql_real_escape_string
{
$value = is_array($value) ?
array_map('my_esc', $value) :
mysql_real_escape_string($value);
return $value;
}
//////////////////////////////////////////////////////////////////////
function my_html($value) //функция htmlspecialchars
{
$value = is_array($value) ?
array_map('my_html', $value) :
htmlspecialchars($value);
return $value;
}
/////////////////////////////////////////////////////////////////////
// переменные //
/////////////////////////////////////////////////////////////////////
$name = !empty($_POST['name']) ? trim($_POST['name']) : NULL;
$go_reg = isset($_POST['go_reg']) ? TRUE : FALSE;
$search_name = !empty($_GET['search_name']) ? $_GET['search_name'] : NULL;
$search = isset($_GET['search']) ? TRUE : FALSE;
$id = !empty($_GET['id']) ? $_GET['id'] : NULL;
unset($error);
$error = array();
/////////////////////////////////////////////////////////////////////
// регистрация //
/////////////////////////////////////////////////////////////////////
if($go_reg)
{
if($name)
{
mysql_query("INSERT INTO `names`
SET `name` = '" .my_esc($name). "',
`date` = CURRENT_TIMESTAMP
") or die(mysql_error());
header('location: http://' .$_SERVER['HTTP_HOST'] .$_SERVER['PHP_SELF']);
exit();
}
else
$error[] = 'Поле "Регистрация" пустое';
}
//////////////////////////////////////////////////////////////////////////
// Вывод всех //
//////////////////////////////////////////////////////////////////////////
$lll_sql = mysql_query ("SELECT * FROM `names`
ORDER by `id` DESC
") or die (mysql_error());
$num = mysql_num_rows($lll_sql);
echo 'Регистраций: ' .(int)$num. '<br />';
while ($row = mysql_fetch_assoc ($lll_sql))
{
echo '<a href = ?id=' .(int)$row['id']. '>' .my_html($row['name']). '</a><br />';
}
/////////////////////////////////////////////////////////////////////////
// Вывод даты //
/////////////////////////////////////////////////////////////////////////
if ($id)
{
$lll_sql = mysql_query ("SELECT * FROM `names`
WHERE `id` = " .(int)$id
) or die (mysql_error());
$num = mysql_num_rows($lll_sql);
if ($num > 0)
{
echo '<hr>';
$row = mysql_fetch_assoc($lll_sql);
echo 'Пользователь: <b>' .my_html($row['name']). '</b><br />
Зарегистрирован: <b>' .my_html($row['date']). '</b><br />';
echo '<hr>';
}
else
$error[] = 'Нет такого :)';
}
//////////////////////////////////////////////////////////////////////
// Поиск //
//////////////////////////////////////////////////////////////////////
if($search)
{
if($search_name)
{
$search_name = my_esc($search_name);
$lll_sql = mysql_query("SELECT * FROM `names`
WHERE `name`
LIKE '%" .addcslashes($search_name, '%\\\'_'). "%'
") or die (mysql_error());
$num = mysql_num_rows($lll_sql);
if ($num > 0)
{
echo '<hr><font color="red">Результат поиска</font><br />';
while ($row = mysql_fetch_assoc($lll_sql))
{
echo '<a href = ?id=' .(int)$row['id']. '>' .my_html($row['name']). '</a><br />';
}
echo '<hr>';
}
else
$error[] = 'Ничего не найдено';
}
else
$error[] = 'Поле "Поиск" пустое';
}
//вывод ошибок
//var_dump($go_reg);
//var_dump($search);
if(count($error))
{
echo '<hr><font color="red">Внимание!!!</font><br />';
foreach($error as $err)
{
echo my_html($err). '<br />';
}
echo '<hr>';
}
?>
<pre>
<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="post">
Регистрация:
<input name="name" type="text" />
<input name="go_reg" type="submit" value="Зарегистрироваться" />
</form>
<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="get">
Поиск:
<input name="search_name" type="text" value="<?php echo my_html($search_name); ?>" />
<input name="search" type="submit" value="Найти" />
</form>
</pre>
Спустя 11 минут, 38 секунд (26.08.2012 - 14:12) Семён написал(а):
У тебя не фильтруется $search_name
Спустя 10 минут, 7 секунд (26.08.2012 - 14:22) ApxanreJl написал(а):
упустил) щас исправлю) спс!
Спустя 25 минут, 37 секунд (26.08.2012 - 14:48) twin написал(а):
Хорошая работа. Почти отличная. Респект.
Есть несколькопридирок замечаний, что бы не зря)))
1. Вот так ты пишешь напрасно:
2. Вот тут:
3. Вот это немного избыточно:
4. Ни и с отступами нужно что-то решать. Не годится так. Не используй табулятор или заменяй его на 4 пробела. Есть настройки в редакторах, есть программы специальные. Но так не пойдет:
Есть несколько
1. Вот так ты пишешь напрасно:
$connect = mysql_connect ($db_host, $db_user, $db_password) or die (mysql_error());Дело в том, что пока нет коннекта, нет и ошибок. А значит функция mysql_error() тут совершенно бесполезна. Обычно туда пишут сервисное сообщение плана "Нет соединения с сервером MySQL
mysql_select_db ($db_database, $connect) or die (mysql_error());
2. Вот тут:
$go_reg = isset($_POST['go_reg']) ? TRUE : FALSE;не нужна тернарная операция. Достаточно так:
$go_reg = isset($_POST['go_reg']);и лучше использовать !empty() иначе можно напороться на причуды ИЕ.
3. Вот это немного избыточно:
$num = mysql_num_rows($lll_sql);проще вот так:
if ($num > 0)
{
echo '<hr>';
$row = mysql_fetch_assoc($lll_sql);
echo 'Пользователь: <b>' .my_html($row['name']). '</b><br />
Зарегистрирован: <b>' .my_html($row['date']). '</b><br />';
echo '<hr>';
}
else
$error[] = 'Нет такого :)';
$row = mysql_fetch_assoc($lll_sql);
if (!empty($row))
{
echo '<hr>';
echo 'Пользователь: <b>' .my_html($row['name']). '</b><br />
Зарегистрирован: <b>' .my_html($row['date']). '</b><br />';
echo '<hr>';
}
else
$error[] = 'Нет такого :)';
4. Ни и с отступами нужно что-то решать. Не годится так. Не используй табулятор или заменяй его на 4 пробела. Есть настройки в редакторах, есть программы специальные. Но так не пойдет:
Спустя 3 минуты, 9 секунд (26.08.2012 - 14:51) twin написал(а):
А, вот еще финт непонятный:
unset($error);Чего ты там уничтожаешь?
$error = array();
Спустя 8 минут, 55 секунд (26.08.2012 - 15:00) ApxanreJl написал(а):
Цитата (twin @ 26.08.2012 - 12:48) |
4. Ни и с отступами нужно что-то решать. Не годится так. Не используй табулятор или заменяй его на 4 пробела. Есть настройки в редакторах, есть программы специальные. Но так не пойдет: |
спасибо за оценку и за замечания!
я пользуюсь редактором Dreamweaver когда от туда копирую суда то текст разбегается сам)) я этот код уже у Вас пробовал ровнять вот что получилось. может это быть из за того что я пользуюсь и табуляцией и иногда отодвигаю пробелом? щас попробую исправить в редакторе все на 'tab'.
Спустя 7 минут, 2 секунды (26.08.2012 - 15:07) KOPOJI написал(а):
еще хотел добавить.
1. вообще расширение mysql не советуют использовать - можете даже на офф сайте php.net посмотреть - рекомендуют mysqli хотя бы или, что имхо еще лучше - PDO.
2. зачем столько функций на одностроковую встроенную функцию? почитайте про KISS.. (я про ваши функции проверки и очистки) - да и вообще, с чего вы проверяете массив там или строка? :blink:
3.
1. вообще расширение mysql не советуют использовать - можете даже на офф сайте php.net посмотреть - рекомендуют mysqli хотя бы или, что имхо еще лучше - PDO.
2. зачем столько функций на одностроковую встроенную функцию? почитайте про KISS.. (я про ваши функции проверки и очистки) - да и вообще, с чего вы проверяете массив там или строка? :blink:
3.
Цитата |
header('location: http://' .$_SERVER['HTTP_HOST'] .$_SERVER['PHP_SELF']); |
А просто $_SERVER['PHP_SELF'] вас чем не устраивает?
4. вот это вот все
4. вот это вот все
Цитата |
mysql_query ('SET NAMES utf8'); |
уже давно (насколько помню с MySQL 5.0) можно заменить одной строчкой:
5.
mysql_set_charset('utf8');
5.
Цитата |
<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" |
лучше заменить на $_SERVER['PHP_SELF'] имхо
6. перед регистрацией необходимо проверять, существует такой юзер уже или нет.. это как бы обязательная процедура, а то у вас тут клонов будет не обсчитаетесь)
7. ну и еще то, на что вам уже указали
P.S. табуляция просто ужасная, читать практически невозможно)
6. перед регистрацией необходимо проверять, существует такой юзер уже или нет.. это как бы обязательная процедура, а то у вас тут клонов будет не обсчитаетесь)
7. ну и еще то, на что вам уже указали
P.S. табуляция просто ужасная, читать практически невозможно)
Спустя 2 минуты, 56 секунд (26.08.2012 - 15:10) ApxanreJl написал(а):
Цитата (twin @ 26.08.2012 - 12:51) |
А, вот еще финт непонятный:unset($error);Чего ты там уничтожаешь? |
ну тут у меня была проблемка, если кликнуть по пустому поиску и потом по постой реги то в массиве были обе ошибки. чего мне было не нужно. вот так пытался уничтожить старые ошибки. оказалось все проще
<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="post">
и все заработало как нужно))
Спустя 2 часа, 29 минут, 12 секунд (26.08.2012 - 17:39) twin написал(а):
KOPOJI
Поробую немного заступиться)))
Поробую немного заступиться)))
Цитата |
зачем столько функций на одностроковую встроенную функцию? |
Вообще это обертки для обработки массивов. В контексте данного задания они конечно излишни, но часто приносят довольно приличный профит. Допустим так:
..."SELECT.... `id` IN ('". implode("','", my_esc($arr_names)) ."')"...
Цитата |
А просто $_SERVER['PHP_SELF'] вас чем не устраивает? |
По идее можно и так, но по RFC нужен полный путь в заголовке. Вместе с протоколом.
Цитата |
перед регистрацией необходимо проверять, существует такой юзер уже или нет.. это как бы обязательная процедура, а то у вас тут клонов будет не обсчитаетесь) |
Это не требовалось условиями. Тут упор на обработку, это лишнее.
Спустя 1 час, 6 минут, 41 секунда (26.08.2012 - 18:45) KOPOJI написал(а):
ок, заступки приняты))) по поводу первого - я это знаю, но заметьте, что вы тоже признаете:
Цитата |
В контексте данного задания они конечно излишни |
Цитата |
Это не требовалось условиями |
а по поводу этого я считаю что это должно быть в любой нормальной регистрации. Это мое имхо, я просто указал на этот недостаток, извиняюсь если кого обидел)
Спустя 1 час, 1 минута, 26 секунд (26.08.2012 - 19:47) ApxanreJl написал(а):
Цитата (twin @ 26.08.2012 - 15:39) | ||
Вообще это обертки для обработки массивов. В контексте данного задания они конечно излишни, но часто приносят довольно приличный профит. Допустим так: ..."SELECT.... `id` IN ('". implode("','", my_esc($arr_names)) ."')"... |
ну я привыкаю просто к ним вот и сюда тоже их))) насколько проще написать my_html чем htmlspecialchars

Спустя 18 часов, 32 минуты, 57 секунд (27.08.2012 - 14:20) twin написал(а):
Разделил решения. Вот тут второе.
Спустя 2 часа, 27 минут (27.08.2012 - 16:47) Семён написал(а):
Цитата |
не нужна тернарная операция. Достаточно так: $go_reg = isset($_POST['go_reg']); и лучше использовать !empty() иначе можно напороться на причуды ИЕ. |
и нотис

Спустя 2 часа, 51 минута, 14 секунд (27.08.2012 - 19:38) twin написал(а):
Цитата (Семён @ 27.08.2012 - 14:47) |
и нотис ![]() |
Хто сказал?)))
Чтим
Цитата |
No warning is generated if the variable does not exist. That means empty() is essentially the concise equivalent to !isset($var) || $var == false. |