<?php
include ("conf.php") ;
$cat = $_GET['cat'] ;
$cat = preg_replace ("/[^0-9]/", "", $cat) ;
echo "<h4 align='center'>Каталог сайтов</h4>" ;
if (!$cat)
{
$res = "SELECT * FROM `cat`" ;
$query = mysql_query ($res) ;
while ($row = mysql_fetch_array ($query))
{
echo "<div align='center'>
<a href='http://test1.ru/katalog/index.php?cat=$row[id]'>".$row[cat_name]."</a>
<br /><br />
</div>" ;
}
}
else
{
$res2 = "SELECT * FROM `sites`
WHERE `cat_id` =".(int)$_GET['cat'] ;
$query2 = mysql_query ($res2) ;
if (!mysql_num_rows ($query2))
{
echo "<div align='center'>В данной категории нет сайтов</div>" ;
}
else
{
while ($row2 = mysql_fetch_array ($query2))
{
echo "<div align='center'>
<a href='http://$row2[url]'>".$row2[title]."</a>
";
}
}
}
echo "<div align='center'>
<span style='border-top:1px dotted #000; font-size:12px'><a href='add.php'>Добавить сайт</a></span>
</div>" ;
?>
Спустя 30 минут, 9 секунд (2.09.2010 - 13:47) linker написал(а):
$cat = isset($_GET['cat']) ? abs((integer)$_GET['cat']) : 0;
while ($row = mysql_fetch_assoc($query))
{
echo '<div align="center">
<a href="http://test1.ru/katalog/index.php?cat=' . $row['id'] . '">' . $row['cat_name'] . '</a><br /><br />
</div>';
}
$res2 = "SELECT * FROM `sites` WHERE `cat_id` = " . $cat;
if (!mysql_num_rows ($query2))А еще лучше, методом процедурного программирования
echo '<div align="center">В данной категории нет сайтов</div>';
else
{
while ($row2 = mysql_fetch_assoc($query2))
{
echo '<div align="center">
<a href="http://' . $row2['url'] . '">' . $row2['title'] . '</a>';
}
}
<?php
include ("conf.php");
function GetSites($cat)
{
$query = "SELECT * FROM `cat`" . (($cat) ? " WHERE `cat` = " . $cat : "");
return mysql_query($query);
}
$cat = isset($_GET['cat']) ? abs((integer)$_GET['cat']) : 0;
echo '<h4 align="center">Каталог сайтов</h4>';
$result = GetSites($cat);
if (mysql_num_rows($result))
{
while($site = mysql_fetch_assoc($result))
{
...
}
}
else
echo '';
...
?>
Спустя 11 минут, 18 секунд (2.09.2010 - 13:58) Guest написал(а):
linker, спасибо!
А мой вариант плохой? Уязвимый?
А мой вариант плохой? Уязвимый?
Спустя 1 минута, 41 секунда (2.09.2010 - 14:00) linker написал(а):
Длиннее, тяжелее, медленнее. На счет уязвимостей, вполне возможно, раз существует возможность добавлять сайты.
Спустя 1 минута, 18 секунд (2.09.2010 - 14:01) Guest написал(а):
ясно, а в моем примере sql-инъекция прошла бы?
Спустя 2 минуты, 43 секунды (2.09.2010 - 14:04) linker написал(а):
Нет. Возможны XSS.
Спустя 2 минуты, 1 секунда (2.09.2010 - 14:06) Guest написал(а):
а как от них защититься?
Спустя 14 минут, 13 секунд (2.09.2010 - 14:20) linker написал(а):
Фильтровать добавление сайтов и выводить сайты через htmlspecailchars().
Спустя 5 минут, 28 секунд (2.09.2010 - 14:26) Guest написал(а):
а мой код разве не достаточно фильтрует?
Спустя 1 минута, 42 секунды (2.09.2010 - 14:28) Guest написал(а):
вот так можно выводить через htmlspecialchars?
Спустя 1 минута, 1 секунда Guest написал(а):
то есть так
while ($row2 = mysql_fetch_array ($query2))
{
echo "<div align='center'>
<a href='http://$row2[url]'>".htmlspecialchars($row2[title])."</a>
";
}
Спустя 1 минута, 1 секунда Guest написал(а):
то есть так
while ($row2 = mysql_fetch_assoc($query2))
{
echo '<div align="center">
<a href="http://' . $row2['url'] . '">' . htmlspecialchars($row2['title']) . '</a>';
}
Спустя 5 минут, 29 секунд (2.09.2010 - 14:33) linker написал(а):
И $row2['url'] тоже.
Спустя 15 минут, 20 секунд (2.09.2010 - 14:48) Guest написал(а):
А вот файл добавления сайтов
<?php
include ("conf.php") ;
$title = $_POST['title'] ;
$title = trim ($title) ;
$title = substr ($title, 0, 20) ;
$url = $_POST['url'] ;
$url = trim ($url) ;
$url = substr ($url, 0, 20) ;
$cat_id = (int)$_POST['cat_id'] ;
if (get_magic_quotes_gpc ())
{
$title = stripslashes ($title) ;
$url = stripslashes ($url) ;
}
$res3 = "SELECT * FROM `sites`
WHERE `title` = '".mysql_real_escape_string ($title)."'
OR `url` = '".mysql_real_escape_string ($url)."'" ;
$query3 = mysql_query ($res3) ;
if ($_REQUEST ['sub2'])
{
if (mysql_num_rows ($query3))
{
echo "Этот сайт уже есть" ;
}
else
{
if (empty ($title))
{
echo "Вы не ввели название сайта<br />" ;
}
if (empty ($url))
{
echo "Вы не ввели адрес сайта<br />" ;
}
if (empty ($cat_id))
{
echo "Вы не указали категорию" ;
}
if (!preg_match ("/[a-z0-9_-]\.[a-z]/i", $url))
{
echo "Неверный формат адреса" ;
}
else
{
if ($title and $cat_id)
{
$ins = "INSERT INTO `sites` (`title`, `url`, `data`, `cat_id`)
VALUES ('".mysql_real_escape_string ($title)."',
'".mysql_real_escape_string ($url)."',
NOW(),
$cat_id)" ;
$query4 = mysql_query ($ins) ;
if ($query4)
{
echo "Сайт успешно добавлен" ;
}
}
}
}
}
?>
<form action="" method="post">
<p><label>Введите название сайта<br /></label>
<input type="text" name="title" size="20" maxlength="20" />
</p>
<p><label>Введите адрес сайта<br /></label>
<input type="text" name="url" size="20" maxlength="20" /> без http:// пример: phpforum.ru
</p>
<p><select size="1" name="cat_id">
<option selected="selected" disabled="disabled">Выберите категорию</option>
<option value="1">Политические</option>
<option value="2">Персональные</option>
<option value="3">Развлекательные</option>
<option value="4">Религиозные</option>
</select>
</p>
<input type="submit" name="sub2" value="Добавить" />
</form>