[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Задача от twin'a на обработку данных
Rigel
С условиями задачи можно ознакомиться здесь

Не получается сделать поиск и защиту от F5 sad.gif

<?php

# Заголовок
header('Content-Type: text/html; charset=utf-8');

# Данные для подключения к БД
define('HOST','localhost');
define('USERNAME','rigel');
define('PASSWORD','pass');
define('DB_NAME','twintask');

# Покдлючение к БД
$link = mysql_connect(HOST,USERNAME,PASSWORD) or die(mysql_error());
mysql_select_db(DB_NAME, $link) or die(mysql_error());

# Инициализация переменных
$ok = !empty($_POST['ok'])?$_POST['ok']:NULL;
$go = !empty($_GET['go'])?$_GET['go']:NULL;
$name = !empty($_POST['name'])?$_POST['name']:NULL;
$searchtext = !empty($_GET['searchtext'])?$_GET['searchtext']:NULL;

# Добавляем введенное имя
if($ok)
{
$name = mysql_real_escape_string($name);
$name = htmlspecialchars($name);
$sql = "INSERT INTO `names`(`date`,`name`) VALUES (Now(), '$name')";
$result = mysql_query($sql) or die(mysql_error());
}

# Поиск - недоделано
if($go)
{
$sql = "SELECT `name` FROM `names` WHERE name LIKE '%$searchtext%'";
$result = mysql_query($sql) or die(mysql_error());
$count = mysql_num_rows($result);
echo "Найдено ".$count." результатов:<br>";
//while($row = mysql_fetch_assoc($result))
//{
// echo $row;
//}

}

# Выводим дату регистрации
if(isset($_GET[id]))
{
$id = $_GET[id];
$sql = "SELECT * FROM `names` WHERE `id`='$id'";
$result = mysql_query($sql) or die(mysql_error());
$row = mysql_fetch_assoc($result);
$trace = "Пользователь <font color=blue>".$row['name']."</font> зарегестрирован ".$row['date'];
echo $trace;
}

# Выводим список всех зарегестрированных пользователей в обратном порядке
$sql = "SELECT * FROM names ORDER BY id DESC";
$result = mysql_query($sql) or die(mysql_error());

// Рисуем список
echo "<ul>";
while ($row = mysql_fetch_assoc($result))
{
echo "<li><a href=index.php?id=".$row['id'].">".$row['name']."</a>";
}
echo "</ul>";

?>
<HTML>
<BODY>
<FORM
action="" method="GET">
Поиск<br>
<input
type="searchtext" name="name" value="<?php echo $searchtext; ?>"><br>
<input
type="submit" value="Найти" name="go">
</FORM>
<br>
<FORM
action="" method="POST">
Регистрация<br>
<input
type="text" name="name"><br>
<input
type="submit" value="Зарегестрировать" name="ok">
</FORM>
</BODY>
</HTML>




Спустя 7 часов, 19 минут, 56 секунд (26.11.2009 - 07:27) twin написал(а):
Rigel
Цитата
Не получается сделать поиск и защиту от F5

Ну на самом деле у тебя не только это не получилось. Изучи ответы ребят, там все до одного скрипта совместными усилиями доведены до логического завершения. Здесь очень много еще не сделано, что бы начинать разбор завалов.
Из положительных моментов - наконец то почти все стали красиво оформлять код. Значит наши усилия не пропали даром smile.gif
Немножко перемудрил со сдвигами, но в целом очень даже! Респект.

Обрати внимание на такие вещи как
1. Магические кавычки
2. Знаки % и _
3. Знаки ? & = \ (почему в разных пунктах - потому что разные темы)
4. F5 (ты сам знаешь)

Вобщем почитай темы, благо есть уже что изучить.

Спустя 2 часа, 34 минуты, 33 секунды (26.11.2009 - 10:02) Rigel написал(а):
twin
Ого ohmy.gif

Спасибо, буду дорабатывать smile.gif

Спустя 1 час, 57 минут, 45 секунд (26.11.2009 - 12:00) Rigel написал(а):
Прочитав ответы других, вроде подправил biggrin.gif

Выложено тут:
тыц

php-код:

<?php

# Заголовок
header('Content-Type: text/html; charset=utf-8');

# Данные для подключения к БД
define('HOST','localhost');
define('USERNAME','user');
define('PASSWORD','pass');
define('DB_NAME','dbname');

# Покдлючение к БД
$link = mysql_connect(HOST,USERNAME,PASSWORD) or die(mysql_error());
mysql_select_db(DB_NAME, $link) or die(mysql_error());

# Инициализация переменных
$ok = !empty($_POST['ok'])?$_POST['ok']:NULL;
$go = !empty($_GET['go'])?$_GET['go']:NULL;
$name = !empty($_POST['name'])?$_POST['name']:NULL;
$searchtext = !empty($_GET['searchtext'])?$_GET['searchtext']:NULL;

# Функция обработки при magic_quotes on
if(get_magic_quotes_gpc())
{
function stripslashes_deep($value)
{
if (is_array($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);
$_COOKIES = stripslashes_deep($_COOKIES);
}



# Добавляем введенное имя
if($ok && !empty($name))
{
header("Location: index.php");
$name = mysql_real_escape_string($name);
$name = htmlspecialchars($name);
$sql = "INSERT INTO `twinnames`(`date`,`name`) VALUES (Now(), '$name')";
$result = mysql_query($sql) or die(mysql_error());
}

# Поиск
if($go)
{
$searchtext = htmlspecialchars($searchtext);
$searchtext = trim($searchtext);
$searchtext = str_replace("\\","\\\\", $searchtext);
$searchtext = str_replace("%","\%", $searchtext);
$searchtext = mysql_real_escape_string($searchtext);
$sql = "SELECT `name` FROM `twinnames` WHERE name LIKE '%".$searchtext."%'";
$result = mysql_query($sql) or die(mysql_error());
$count = mysql_num_rows($result);
if($count)
{
echo "Найдено ".$count." результатов:<br>";
echo "<UL>";
while($row = mysql_fetch_assoc($result))
{
echo "<LI>".$row['name'];
}
echo "</UL><hr>";
}
else
{
echo "Ничего не найдено!";
}
}


# Выводим дату регистрации
if(isset($_GET[id]))
{
echo $id;
$id = $_GET[id];
$sql = "SELECT * FROM `twinnames` WHERE `id`='$id'";
$result = mysql_query($sql) or die(mysql_error());
$row = mysql_fetch_assoc($result);
$trace = "Пользователь <font color=blue>".$row['name']."</font> зарегестрирован ".$row['date'];
echo $trace;
}

# Выводим список всех зарегестрированных пользователей в обратном порядке
$sql = "SELECT * FROM twinnames ORDER BY id DESC";
$result = mysql_query($sql) or die(mysql_error());

// Рисуем список
echo "<ul>";
while ($row = mysql_fetch_assoc($result))
{
echo "<li><a href=index.php?id=".$row['id'].">".$row['name']."</a>";
}
echo "</ul>";

?>



html-формы:


<HTML>
<HEAD>
<title>
Задача на корректную обработку данных</title>
</HEAD>
<BODY>
<FORM
action="" method="GET">
Поиск<br>
<input
type="text" name="searchtext" value="<?php echo $searchtext; ?>"><br>
<input
type="submit" value="Найти" name="go">
</FORM>
<br>
<FORM
action="" method="POST">
Регистрация<br>
<input
type="text" name="name"><br>
<input
type="submit" value="Зарегестрировать" name="ok">
</FORM>
</BODY>
</HTML>



Спустя 7 минут, 58 секунд (26.11.2009 - 12:08) twin написал(а):
Попробуй в поиск ввести обратный слэш. И посмотри, что вернется в форму. Кроме того, кавычки и апострофы при регистрации тоже бэкслэшатся.

Но уже лучше))) Правда отступы делать надо, я имел ввиду что одинаковые, а не убрать совсем.

Спустя 1 минута, 56 секунд (26.11.2009 - 12:10) twin написал(а):
И обрати внимание на правописание... Зарегистрироваться.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.