[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Задача на корректную обработку данных
123456
Задача http://phpforum.ru/index.php?showtopic=19168
Вот моё решение. Оцените!

<?php
$bd_host = "localhost";
$bd_user = "1";
$bd_password = "1";
$bd_base = "1";

$con=mysql_connect($bd_host,$bd_user,$bd_password);
mysql_select_db($bd_base,$con);

if(!(empty($_POST['name'])))
{
$name = trim(addslashes($_POST['name']));

$name_sql = mysql_query("SELECT `id` FROM `names` WHERE `name` = '$name'");

if(mysql_num_rows($name_sql))
{
echo "Данное имя уже имеется в БД";
}
else
{
mysql_query("INSERT INTO `names` (`name`) VALUES ('$name')");
header("Location: /111.php");
}
}


if(!(empty($_GET['name'])))
{
$search_sql = mysql_query("SELECT * FROM `names` WHERE `name` LIKE '%".trim(addslashes($_GET['name']))."%'");

if(mysql_num_rows($search_sql))
{
echo "<b>Список найденых имен:</b><br>";

while ($search_bd = mysql_fetch_array($search_sql))
{
echo "<a href='111.php?id=".$search_bd['id']."'>".htmlspecialchars($search_bd['name'])."</a><br>";
}
}

else
{
echo "Имен не найдено.";
}
}



if(!(empty($_GET['id'])))
{
$date_sql = mysql_query("SELECT * FROM `names` where `id` = '".intval($_GET['id'])."' ORDER BY `date` DESC");

if(mysql_num_rows($date_sql))
{
$date_bd = mysql_fetch_array($date_sql);

echo "Пользователь " . htmlspecialchars($date_bd['name']) . " зарегистрирован " . $date_bd['date'] . "<br>";
}
}


$vse_sql = mysql_query("SELECT * FROM `names` ORDER BY `date` DESC");

if(mysql_num_rows($vse_sql))
{
echo "<b>Список зарегистрированных имен:</b><br>";

while ($vse_bd = mysql_fetch_array($vse_sql))
{
echo "<a href='111.php?id=".$vse_bd['id']."'>".htmlspecialchars($vse_bd['name'])."</a><br>";
}
}


?>
<table width="27%" align="center">
<
tr>
<
td><form method="get" action="">Имя для поиска:</td>
<
td><input type="text" name="name" value="<?=$_GET['name']?>"></td>
<
td><input type="submit" value="ОК"></form></td>
</
tr>
<
tr>
<
td><form method="post" action="">Имя для регистрации:</td>
<
td><input type="text" name="name"></td>
<
td><input type="submit" value="ОК"></form></td>
</
tr>
</
table>




Спустя 5 часов, 34 минуты, 1 секунда (29.08.2012 - 06:01) twin написал(а):
Пока плохо.

Для начала напиши первой строчкой это:
    error_reporting(E_ALL);
и увидишь нотис.

Потом положи рядом со скриптом такой .htaccess
php_flag magic_quotes_gpc On 
php_flag magic_quotes_runtime On
и проверь имя O'Railly

Следующим этапом попробуй прогнать такие комбинации символов:
%%%%
____
\

особенно в плане поиска.


Потом, это что?
        header("Location: /111.php");
Почему меня кидает на какую то непонятную страницу 111.php, которой у меня вовсе нет?

И ссылки тоже туда ведут...

Вот еще
$date_bd = mysql_fetch_array($date_sql);
Уже только ленивый не писал, что не нужно два массива сразу. Почитай внимательно про эту функцию.

Но в общем начало есть, а это главное)

Спустя 7 часов, 3 минуты, 34 секунды (29.08.2012 - 13:05) 123456 написал(а):
Вот что получилось:

<?php
error_reporting(E_ALL);

$bd_host = "localhost";
$bd_user = "1";
$bd_password = "1";
$bd_base = "1";

$con=mysql_connect($bd_host,$bd_user,$bd_password);
mysql_select_db($bd_base,$con);

if(!(empty($_POST['name'])))
{
if (!get_magic_quotes_gpc())
{
$_POST['name'] = trim(addslashes($_POST['name']));
}

$name_sql = mysql_query("SELECT `id` FROM `names` WHERE `name` = '".$_POST['name']."'");

if(mysql_num_rows($name_sql))
{
echo "Данное имя уже имеется в БД";
}
else
{
mysql_query("INSERT INTO `names` (`name`) VALUES ('".$_POST['name']."')");
header("Location: /index.php");
}
}


if(!(empty($_GET['name'])))
{
if (!get_magic_quotes_gpc())
{
$_GET['name'] = trim(addslashes($_GET['name']));
}
$search_sql = mysql_query("SELECT * FROM `names` WHERE `name` LIKE '%".$_GET['name']."%'");

if(mysql_num_rows($search_sql))
{
echo "<b>Список найденых имен:</b><br>";

while ($search_bd = mysql_fetch_array($search_sql))
{
echo "<a href='index.php?id=".$search_bd['id']."'>".htmlspecialchars($search_bd['name'])."</a><br>";
}
}

else
{
echo "Имен не найдено.";
}
}



if(!(empty($_GET['id'])))
{
$date_sql = mysql_query("SELECT * FROM `names` where `id` = '".intval($_GET['id'])."' ORDER BY `date` DESC");

if(mysql_num_rows($date_sql))
{
$date_bd = mysql_fetch_array($date_sql);

echo "Пользователь " . htmlspecialchars($date_bd['name']) . " зарегистрирован " . $date_bd['date'] . "<br>";
}
}


$vse_sql = mysql_query("SELECT * FROM `names` ORDER BY `date` DESC");

if(mysql_num_rows($vse_sql))
{
echo "<b>Список зарегистрированных имен:</b><br>";

while ($vse_bd = mysql_fetch_array($vse_sql))
{
echo "<a href='index.php?id=".$vse_bd['id']."'>".htmlspecialchars($vse_bd['name'])."</a><br>";
}
}


?>
<table width="27%" align="center">
<
tr>
<
td><form method="get" action="">Имя для поиска:</td>
<
td><input type="text" name="name" value="<?=isset($_GET['name']) ?$_GET['name'] :NULL?>"></td>
<
td><input type="submit" value="ОК"></form></td>
</
tr>
<
tr>
<
td><form method="post" action="">Имя для регистрации:</td>
<
td><input type="text" name="name"></td>
<
td><input type="submit" value="ОК"></form></td>
</
tr>
</
table>


От нотиса избавился.

раньше работал, на странице 111.php, теперь переделал на index.php

O'Railly пропускает нормально.

Цитата
Следующим этапом попробуй прогнать такие комбинации символов:
%%%%
____
\
особенно в плане поиска.

что-то я с этим не могу разобраться

$date_bd = mysql_fetch_array($date_sql);

А что тут не так то???

Спустя 6 минут, 48 секунд (29.08.2012 - 13:11) Игорь_Vasinsky написал(а):
Цитата
что-то я с этим не могу разобраться

просто - дополнительно их экранируй с strtr()

Цитата
А что тут не так то???

она, без 2го агрумента, возвращает 2 массива - индексный и ассоциативный

а нафиг тебе 2? если ты работаешь с одним

mysql_fetch_assoc()

Спустя 1 час, 26 минут, 53 секунды (29.08.2012 - 14:38) twin написал(а):
Пока не совсем чисто.

Попробуй найти O'Railly и посмотри, что возвращается в форму поиска.
Ну и с процентами, обратным слэшем и подчеркиванием решай. Посмотри, как другие решали.

И еще, а что ты тут сортируешь?
    $date_sql = mysql_query("SELECT * FROM `names` where `id` = '".intval($_GET['id'])."' ORDER BY `date` DESC");


И последнее, после редиректа нужно останавливать скрипт. Иначе могут быть непредсказуемые последствия и перерасход ресурсов.

Спустя 57 минут, 41 секунда (29.08.2012 - 15:36) 123456 написал(а):
Вот что получилось
<?php
error_reporting(E_ALL);

$bd_host = "localhost";
$bd_user = "1";
$bd_password = "1";
$bd_base = "1";

$con=mysql_connect($bd_host,$bd_user,$bd_password);
mysql_select_db($bd_base,$con);

if(!(empty($_POST['name'])))
{
if (!get_magic_quotes_gpc())
{
$_POST['name'] = stripslashes($_POST['name']);
}

$_POST['name'] = trim($_POST['name']);

$name_sql = mysql_query("SELECT `id` FROM `names` WHERE `name` = '".mysql_real_escape_string($_POST['name'])."'") or die();

if(mysql_num_rows($name_sql))
{
echo "Данное имя уже имеется в БД <br>";
}
else
{
mysql_query("INSERT INTO `names` (`name`) VALUES ('".$_POST['name']."')");
header("Location: index.php");
}
}


if(!(empty($_GET['name'])))
{
if(get_magic_quotes_gpc())
{
$_GET['name'] = stripslashes($_GET['name']);
}

$_GET['name'] = trim($_GET['name']);

$search_sql = mysql_query("SELECT * FROM `names` WHERE `name` LIKE '%".mysql_real_escape_string(addcslashes($_GET['name'], '\%_'))."%'") or die();

if(mysql_num_rows($search_sql))
{
echo "<b>Список найденых имен:</b><br>";

while ($search_bd = mysql_fetch_assoc($search_sql))
{
echo "<a href='index.php?id=".$search_bd['id']."'>".htmlspecialchars($search_bd['name'])."</a><br>";
}
}

else
{
echo "Имен не найдено. <br>";
}
}



if(!(empty($_GET['id'])))
{
$date_sql = mysql_query("SELECT * FROM `names` where `id` = '".intval($_GET['id'])."'") or die();

if(mysql_num_rows($date_sql))
{
$date_bd = mysql_fetch_assoc($date_sql) or die();

echo "Пользователь " . htmlspecialchars($date_bd['name']) . " зарегистрирован " . $date_bd['date'] . "<br>";
}
}


$vse_sql = mysql_query("SELECT * FROM `names` ORDER BY `date` DESC") or die();

if(mysql_num_rows($vse_sql))
{
echo "<b>Список зарегистрированных имен:</b><br>";

while ($vse_bd = mysql_fetch_assoc($vse_sql))
{
echo "<a href='index.php?id=".$vse_bd['id']."'>".htmlspecialchars($vse_bd['name'])."</a><br>";
}
}


?>
<table width="27%" align="center">
<
tr>
<
td><form method="get" action="">Имя для поиска:</td>
<
td><input type="text" name="name" value="<?=isset($_GET['name']) ?$_GET['name'] :NULL?>"></td>
<
td><input type="submit" value="ОК"></form></td>
</
tr>
<
tr>
<
td><form method="post" action="">Имя для регистрации:</td>
<
td><input type="text" name="name"></td>
<
td><input type="submit" value="ОК"></form></td>
</
tr>
</
table>

Спустя 1 час, 20 минут, 40 секунд (29.08.2012 - 16:57) twin написал(а):
Вот совсем другое дело. Любо-дорого. Респект. :)

Последние замечания:
1. Не используй табуляцию или включи замену на пробелы. Видишь сам, как код расползся.

2. Постарайся не писать длинных строк. Оптимально - 80 символов. Максимально - 120. Тогда будет совсем красиво.

3. Тут все-таки надо поставить die()
	{
mysql_query("INSERT INTO `names` (`name`) VALUES ('".$_POST['name']."')");
header("Location: index.php");
die();

а тут убрать:
Цитата
$date_sql = mysql_query("SELECT * FROM `names` where `id` = '".intval($_GET['id'])."'") or die();



А вообще годный вариант.
Быстрый ответ:

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