index.php
Свернутый текст
<?[SPAN=darling]php[/SPAN]
header ("Content-Type: text/html; charset=utf-8");
include 'script.php';
echo '<title>Регистрация</title>';
echo "<link rel='stylesheet' href='style.css'>";
// $QS - query string, чтобы получить id из строки браузера.
if ($QS = $_SERVER["QUERY_STRING"])
{
// Отделяем id.
$expl = explode ("=", $QS);
if (ctype_digit ($expl[1]))
{
$sql3 = "SELECT * FROM `names` WHERE `id`='".(int)$expl[1]."'";
$query3 = mysql_query ($sql3);
// Получаем Имя и Дату регистрации пользователя по id.
$row = mysql_fetch_assoc ($query3);
echo "<b>Пользователь: </b><font color='blue'>".$row['name']."</font>";
echo "<br/><b>Дата регистрации: </b><font color='blue'>".$row['date']."</font><hr/>";
}
}
echo '<h3>Всего зарегистрировано: '.$count.' пользователей</h3><br/>';
// Выводим тех кто есть.
while ($row = mysql_fetch_assoc ($query2))
{
print "<ul type='square'><li>";
print "<table class='border'><tr><td>";
print "<a href='index.php?id=".(int)$row['id']."'>".$row['name']."</a><br/>";
print "</td></tr></table>";
print "</li></ul>";
}
// Выводим форму.
echo '<br/>';
include 'form.php';
?>
script.php
Свернутый текст
<?[SPAN=darling]php[/SPAN]
define ("HOST", "localhost");
define ("USER", "task");
define ("PASS", "RFhbVA2V");
define ("DB", "task");
$connect = mysql_connect(HOST, USER, PASS, '3306');
mysql_select_db (DB, $connect);
mysql_query ("SET NAMES utf8");
mysql_query ("set character_set_client='utf8'");
mysql_query ("set character_set_results='utf8'");
mysql_query ("set collation_connection='utf8_general_ci'");
$go = isset ($_POST['go']) ? $_POST['go'] : NULL;
$ok = isset ($_GET['ok']) ? $_GET['ok'] : NULL;
$user = !empty ($_POST['user']) ? htmlspecialchars ($_POST['user']) : NULL;
$search = !empty ($_GET['search']) ? htmlspecialchars ($_GET['search']) : NULL;
$form = isset ($search) ? $search : NULL;
$RegExp = preg_match("/^ *$/iu", $user);
if ($go && $user && !$RegExp)
{
if (strlen ($user) >= 250)
header ("Location: ".$_SERVER['SCRIPT_NAME']);
else
{
// Вставляем запись и делаем редирект.
mysql_query ("
INSERT INTO `names`
(`name`)
VALUES ('".mysql_real_escape_string ($user)."')
");
header ("Location:".$_SERVER['PHP_SELF']);
}
}
elseif ($go && empty ($user))
header ("Location:".$_SERVER['PHP_SELF']);
if ($ok && $search)
{
if (strlen ($search) >= 250)
header ("Location:".$_SERVER['SCRIPT_NAME']);
else
{
// Запрос на поиск данных.
$sql = "SELECT *
FROM `names`
WHERE `name`
LIKE '%%".mysql_real_escape_string (addcslashes ($search, "%_"))."%%'
ORDER BY `name`";
$query = mysql_query ($sql);
// Подсчитываем количество найденных совпадений.
$count = mysql_num_rows ($query);
$srch = "{ <font color='blue' size='5'><u>".$search."</u></font> }";
if ($count == 0 || $search == '')
echo "<font color='red' size='10'>Ничего не найденно !</font>";
else
{
echo "<font color='green' size='5'>По вашему запросу $srch найденно: ";
echo $count." совпадений </font><br/>";
// Выводим тех кого нашли.
while ($row = mysql_fetch_assoc ($query))
{
print '<ul><li>';
print $row['name'].'<br/>';
print '</li></ul>';
}
}
}
echo '<hr/>';
}
// Запрос на выборку зарегеных в обратном порядке, и подсчет их.
$sql2 = "SELECT * FROM `names` ORDER BY `date` DESC";
$query2 = mysql_query ($sql2);
$count = mysql_num_rows ($query2);
?>
.htaccess
Свернутый текст
AddDefaultCharset UTF-8
php_flag magic_quotes_gpc Off
php_flag magic_quotes_runtime Off
php_flag register_globals Off
form.php
Свернутый текст
<form action="<?[SPAN=darling]php[/SPAN] $_SERVER['SCRIPT_NAME'] ?>" method="POST">
<input type="TEXT" name="user" maxlength="250" style="border: solid 1px"> <br />
<input type="submit" name="go" value="Зарегистрировать"> <br />
</form>
<form action="<?[SPAN=darling]php[/SPAN] $_SERVER['SCRIPT_NAME'] ?>" method="GET">
<input type="text" name="search" maxlength="250" style="border: solid 1px" value="<?[SPAN=darling]php[/SPAN] echo $form ?>"> <br />
<input type="submit" name="ok" value="Поиск"> <br />
</form>
style.css
Свернутый текст
a:color {color: blue;}
a:visited {color: red;
text-decoration: none;}
.border {border: solid 1px;
width: 100%}
Выложил все файлы которые были написаны.
Здесь тестим, потом в этой теме высказываемся.
Здесь работа twin'а.
Спустя 14 минут, 47 секунд (5.04.2010 - 22:24) Winston написал(а):
Какой-то хостинг тупорылый, регишся, а он тормозит
Чё все молчат ? Никто не может ничего сказать ?
Чё все молчат ? Никто не может ничего сказать ?
Спустя 8 часов, 3 минуты, 15 секунд (6.04.2010 - 06:27) twin написал(а):
Упс, я пропустил что то)))
Сейчас посмотрим.
Сейчас посмотрим.
Спустя 1 час, 15 минут, 13 секунд (6.04.2010 - 07:43) twin написал(а):
Чувствуется влияние конкурсов, не зря участвовал.
Код читается легко, комментарии есть в нужных местах. Есть пара мелочей с табуляторами, но в целом приятно.
Вот с функционалом не так гладко. Вот это для чего ритуальная пляска?
Дальше. Никак не могу уловить смысла вот этой перезаписи:
Почему сразу в функцию текст запроса не отправить? Ведь мало того, что лишняя память, так и читабельносчти ой как не добавляет.
Дальше еще хуже. Ошибки уже фатальные.
1. Скрипт зависим от директивы magic_quotes_gpc, а это было в условиях
2. Вот это место совсем нехорошо
Попробуй зарегистрировать вот такие имена O"Relly O\"Relly O\'Relly и посмотри, как будет вести себя поисковик. А еще загляни в базу и посмотри что там. Там совсем не то, что предполагалось. Это и есть искажение данных, на борьбу с которым и расчитана эта задача.
Вот это место поясни пожалуйста:
Потом, в location нужно ставить полный адрес, начиная с протокола. У тебя путь относительный, причем используется то $_SERVER['SCRIPT_NAME'], то $_SERVER['PHP_SELF']. И после хидера нужно ставить остановку exit или die.
Зачем скрипту продолжать работу, если браузер его уже покинул?
Но вообщем и целом весьма недурное начало.
Код читается легко, комментарии есть в нужных местах. Есть пара мелочей с табуляторами, но в целом приятно.
Вот с функционалом не так гладко. Вот это для чего ритуальная пляска?
if ($QS = $_SERVER["QUERY_STRING"])Почему сразу из GET не взять значение? И с обработкой перестарался. ctype_digit() потом (int) еще. Наверное не до конца понял механизм.
{
// Отделяем id.
$expl = explode ("=", $QS);
if (ctype_digit ($expl[1]))
Дальше. Никак не могу уловить смысла вот этой перезаписи:
$sql3 = "SELECT * FROM `names` WHERE `id`='".(int)$expl[1]."'";
$query3 = mysql_query ($sql3);
Почему сразу в функцию текст запроса не отправить? Ведь мало того, что лишняя память, так и читабельносчти ой как не добавляет.
Дальше еще хуже. Ошибки уже фатальные.
1. Скрипт зависим от директивы magic_quotes_gpc, а это было в условиях
2. Вот это место совсем нехорошо
$user = !empty ($_POST['user']) ? htmlspecialchars ($_POST['user']) : NULL;
$search = !empty ($_GET['search']) ? htmlspecialchars ($_GET['search']) : NULL;
Попробуй зарегистрировать вот такие имена O"Relly O\"Relly O\'Relly и посмотри, как будет вести себя поисковик. А еще загляни в базу и посмотри что там. Там совсем не то, что предполагалось. Это и есть искажение данных, на борьбу с которым и расчитана эта задача.
Вот это место поясни пожалуйста:
$RegExp = preg_match("/^ *$/iu", $user);
Потом, в location нужно ставить полный адрес, начиная с протокола. У тебя путь относительный, причем используется то $_SERVER['SCRIPT_NAME'], то $_SERVER['PHP_SELF']. И после хидера нужно ставить остановку exit или die.
Зачем скрипту продолжать работу, если браузер его уже покинул?
Но вообщем и целом весьма недурное начало.
Спустя 1 час, 11 минут, 12 секунд (6.04.2010 - 08:54) Winston написал(а):
Цитата (twin @ 6.04.2010 - 06:43) |
Почему сразу из GET не взять значение? |
Да насчет этого протупил, даже не подумал об этом
Цитата (twin @ 6.04.2010 - 06:43) |
Дальше. Никак не могу уловить смысла вот этой перезаписи: |
При нажатии на ссылку, получаем id, и вытаскиваем запись.
Цитата (twin @ 6.04.2010 - 06:43) |
1. Скрипт зависим от директивы magic_quotes_gpc, а это было в условиях |
У маня есть .htaccess в котором эти директивы отключены. У меня после поиска ничё не экранируется.
Цитата (twin @ 6.04.2010 - 06:43) |
Вот это место совсем нехорошо |
Что там плохо ?
Цитата (twin @ 6.04.2010 - 06:43) |
Вот это место поясни пожалуйста: |
Если поле состоит только из одного пробела или любого его количества, значит не регистрируем.
Цитата (twin @ 6.04.2010 - 06:43) |
причем используется то $_SERVER['SCRIPT_NAME'], то $_SERVER['PHP_SELF'] |
Недосмотрел, забыл поменять.
Спасибо за критику
Спустя 16 минут, 39 секунд (6.04.2010 - 09:11) twin написал(а):
Цитата |
При нажатии на ссылку, получаем id, и вытаскиваем запись. |
Я не это имел ввиду. Почему текст запроса пишется сначала в переменную, потом она подставляется в функцию? Вот так же проще, нагляднее и экономичнее
Вот сразу еще ошибочка. Целочисленные значения не нужно в апострофы:
$query3 = mysql_query ("SELECT * FROM `names` WHERE `id`='".(int)$expl[1]."'");
Вот сразу еще ошибочка. Целочисленные значения не нужно в апострофы:
$query3 = mysql_query ("SELECT * FROM `names` WHERE `id`=".(int)$expl[1]);
Цитата |
У маня есть .htaccess в котором эти директивы отключены. |
Вот именно. То есть ты её отключил. А в условиях было - независимо от того, включена или нет.
Цитата |
Что там плохо ? |
Я написал что. Данные искажаются и поисковик не работает корректно. В базу вместо кавычки записывается ", что совсем не одно и тоже.
Цитата |
Если поле состоит только из одного пробела или любого его количества, значит не регистрируем. |
Ясно. Это ты попытался сэмулировать функцию trim() по всей видимости.
Спустя 6 минут, 34 секунды (6.04.2010 - 09:17) Winston написал(а):
Цитата (twin @ 6.04.2010 - 08:11) |
Целочисленные значения не нужно в апострофы: |
Спс учту.
Цитата (twin @ 6.04.2010 - 08:11) |
А в условиях было - независимо от того, включена или нет. |
И как так сделать ?
Спустя 23 минуты, 37 секунд (6.04.2010 - 09:41) phz написал(а):
# Борьба с магическими кавычками
if (get_magic_quotes_gpc())
{
function stripslashes_deep($value)
{
if( is_array($value) )
{
$value = array_map('stripslashes_deep', $value);
}
elseif ( !empty($value) && is_string($value) )
{
$value = stripslashes($value);
}
return $value;
}
$_GET = stripslashes_deep($_GET);
$_POST = stripslashes_deep($_POST);
$_COOKIE = stripslashes_deep($_COOKIE);
$_REQUEST = stripslashes_deep($_REQUEST);
}
Спустя 6 часов, 29 минут, 20 секунд (6.04.2010 - 16:10) Winston написал(а):
Цитата (twin @ 6.04.2010 - 08:11) |
Данные искажаются и поисковик не работает корректно. В базу вместо кавычки записывается ", что совсем не одно и тоже. |
Как тогда посоветуешь поступить ? На выходе обрабатывать ф-й htmlspecialchars ?
phz
Спасибо за код
Спустя 30 минут, 42 секунды (6.04.2010 - 16:41) phz написал(а):
На входе mysql_real_escape_string на выходе htmlspecialchars и будет самый смак