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

<?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 |
Ну на самом деле у тебя не только это не получилось. Изучи ответы ребят, там все до одного скрипта совместными усилиями доведены до логического завершения. Здесь очень много еще не сделано, что бы начинать разбор завалов.
Из положительных моментов - наконец то почти все стали красиво оформлять код. Значит наши усилия не пропали даром

Немножко перемудрил со сдвигами, но в целом очень даже! Респект.
Обрати внимание на такие вещи как
1. Магические кавычки
2. Знаки % и _
3. Знаки ? & = \ (почему в разных пунктах - потому что разные темы)
4. F5 (ты сам знаешь)
Вобщем почитай темы, благо есть уже что изучить.
Спустя 2 часа, 34 минуты, 33 секунды (26.11.2009 - 10:02) Rigel написал(а):
twin
Ого
Спасибо, буду дорабатывать
Ого

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

Спустя 1 час, 57 минут, 45 секунд (26.11.2009 - 12:00) Rigel написал(а):
Прочитав ответы других, вроде подправил
Выложено тут:
тыц
php-код:
html-формы:

Выложено тут:
тыц
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 написал(а):
И обрати внимание на правописание... Зарегистрироваться.