Вот моё решение. Оцените!
<?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 написал(а):
Пока плохо.
Для начала напиши первой строчкой это:
Потом положи рядом со скриптом такой .htaccess
Следующим этапом попробуй прогнать такие комбинации символов:
%%%%
____
\
особенно в плане поиска.
Потом, это что?
И ссылки тоже туда ведут...
Вот еще
Но в общем начало есть, а это главное)
Для начала напиши первой строчкой это:
error_reporting(E_ALL);и увидишь нотис.
Потом положи рядом со скриптом такой .htaccess
php_flag magic_quotes_gpc Onи проверь имя O'Railly
php_flag magic_quotes_runtime On
Следующим этапом попробуй прогнать такие комбинации символов:
%%%%
____
\
особенно в плане поиска.
Потом, это что?
header("Location: /111.php");Почему меня кидает на какую то непонятную страницу 111.php, которой у меня вовсе нет?
И ссылки тоже туда ведут...
Вот еще
$date_bd = mysql_fetch_array($date_sql);Уже только ленивый не писал, что не нужно два массива сразу. Почитай внимательно про эту функцию.
Но в общем начало есть, а это главное)
Спустя 7 часов, 3 минуты, 34 секунды (29.08.2012 - 13:05) 123456 написал(а):
Вот что получилось:
От нотиса избавился.
раньше работал, на странице 111.php, теперь переделал на index.php
O'Railly пропускает нормально.
<?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 и посмотри, что возвращается в форму поиска.
Ну и с процентами, обратным слэшем и подчеркиванием решай. Посмотри, как другие решали.
И еще, а что ты тут сортируешь?
И последнее, после редиректа нужно останавливать скрипт. Иначе могут быть непредсказуемые последствия и перерасход ресурсов.
Попробуй найти 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()
а тут убрать:
Последние замечания:
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(); |
А вообще годный вариант.