|
|
|
| Здраствуйте, хотел добавить поддержку смайлов в гостевую, из за htmlspecialchars запутался в какое место пихнуть код $text = str_replace(':-)','<img src="image/smile/ab.gif">',$text);
<? include('db.php');
// Переменная хранит число сообщений выводимых на станице
$num = 5;
// Извлекаем из URL текущую страницу
$page = $_GET['page'];
// Определяем общее число сообщений в базе данных
$result = mysql_query("SELECT COUNT(*) FROM gos_k");
$posts = mysql_result($result, 0);
// Находим общее число страниц
$total = intval(($posts - 1) / $num) + 1;
// Определяем начало сообщений для текущей страницы
$page = intval($page);
// Если значение $page меньше единицы или отрицательно
// переходим на первую страницу
// А если слишком большое, то переходим на последнюю
if(empty($page) or $page < 0) $page = 1;
if($page > $total) $page = $total;
// Вычисляем начиная к какого номера
// следует выводить сообщения
$start = $page * $num - $num;
/////////////////////////////////
$pr_chislo2 = rand(00000,99999);
$pr_chislo_s_2 = $pr_chislo2;
if(isset($_POST['name']) and strlen($_POST['name'])>=3) {$name = $_POST['name'];} else {unset($name);}
if(isset($_POST['text']) and strlen($_POST['text'])>=3) {$text = $_POST['text'];} else {unset($text);}
if(isset($_POST['data'])) {$data = $_POST['data'];} else {unset($data);}
if(isset($_POST['time'])) {$time = $_POST['time'];} else {unset($time);}
$data = str_replace("January","января",$data); //Руссифицируем месяца
$data = str_replace("February","февраля",$data);
$data = str_replace("March","марта",$data);
$data = str_replace("April","апреля",$data);
$data = str_replace("May","мая",$data);
$data = str_replace("June","июня",$data);
$data = str_replace("July","июля",$data);
$data = str_replace("August","августа",$data);
$data = str_replace("September","сентября",$data);
$data = str_replace("October","октября",$data);
$data = str_replace("November","ноября",$data);
$data = str_replace("December","декабря",$data);
if(isset($_POST['pr_chislo']) and !empty($_POST['pr_chislo']) and is_numeric($_POST['pr_chislo']))
{$pr_chislo = $_POST['pr_chislo'];} else {unset($pr_chislo);}
if(isset($_POST['pr_chislo_s']) and !empty($_POST['pr_chislo_s']) and is_numeric($_POST['pr_chislo_s']))
{$pr_chislo_s = $_POST['pr_chislo_s'];} else {unset($pr_chislo_s);}
if(isset($pr_chislo) and isset($pr_chislo_s) and $pr_chislo == $pr_chislo_s) {unset($pr_chislo_s); $pr_chislo='true';} else {unset($pr_chislo_s); $pr_chislo='false';}
if($pr_chislo == 'true')
{
if(isset($name))
{
$name=stripslashes($name);
$name=htmlspecialchars($name);
}
if(isset($text))
{
$text=stripslashes($text);
$text=htmlspecialchars($text);
}
if(isset($name) and isset($text))
{
mysql_query("insert into `gos_k` (`name`,`text`,`data`,`time`) values ('$name','$text','$data','$time')");
}
}
?>
<table class="g_t">
<tr>
<td>
<?php
// Выбираем $num сообщений начиная с номера $start
$result = mysql_query("SELECT * FROM gos_k LIMIT $start, $num");
// В цикле переносим результаты запроса в массив $postrow
echo "<table class='g_t2'>";
while ($postrow = mysql_fetch_array($result))
{
echo "
<tr>
<td class='n'>".$postrow['name']. " | " .$postrow['time']. " | " .$postrow['data']."</td>
</tr>
<tr>
<td class='t'>".$postrow['text']."</td>
</tr>";
}
echo "</table>";
// Проверяем нужны ли стрелки назад
if ($page != 1) $pervpage = '<a href= ./index.php?page=1><<</a>
<a href= ./index.php?page='. ($page - 1) .'><</a> ';
// Проверяем нужны ли стрелки вперед
if ($page != $total) $nextpage = ' <a href= ./index.php?page='. ($page + 1) .'>></a>
<a href= ./index.php?page=' .$total. '>>></a>';
// Находим две ближайшие станицы с обоих краев, если они есть
if($page - 2 > 0) $page2left = ' <a href= ./index.php?page='. ($page - 2) .'>'. ($page - 2) .'</a> | ';
if($page - 1 > 0) $page1left = '<a href= ./index.php?page='. ($page - 1) .'>'. ($page - 1) .'</a> | ';
if($page + 2 <= $total) $page2right = ' | <a href= ./index.php?page='. ($page + 2) .'>'. ($page + 2) .'</a>';
if($page + 1 <= $total) $page1right = ' | <a href= ./index.php?page='. ($page + 1) .'>'. ($page + 1) .'</a>';
?>
</td>
</tr>
<tr>
<td>
<?php // Вывод меню
echo $pervpage.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$nextpage; ?>
</td>
</tr>
<tr>
<td>
<form action="" method="post" name="form">
<p><input name="name" type="text"></p>
<p> <textarea name="text" cols="50" rows="5"></textarea> <br>
<?
echo $pr_chislo_s_2;
?>
<br>
<input name="pr_chislo" type="text" size="12">
<input name="data" type="hidden" value="<? echo date("d F, Y");?>">
<input name="time" type="hidden" value="<? echo date("H:i:s");?>">
<input name="pr_chislo_s" type="hidden" value="<? echo $pr_chislo_s_2;?>">
<input name="submit" type="submit" value="Написать"></p>
</form>
</td>
</tr>
</table>
|
| |
|
|
|
|
|
|
|
для: PITbulik
(18.01.2012 в 18:06)
| | Надеюсь суть вопроса ясень. Если нет спрашивайте. | |
|
|
|
|
|
|
|
для: PITbulik
(18.01.2012 в 18:06)
| |
if(isset($text))
{
$text=stripslashes($text);
$text=htmlspecialchars($text);
}
|
видимо в этом условии надо добавить ваш код. вопрос только встречный - зачем удалять экранирующие символы и преобразовывать спец. символы в HTML-сущности перед записью в БД?
по-моему логика использования этих функций "слегка" нарушена. | |
|
|
|
|
|
|
|
для: Igorek
(18.01.2012 в 20:00)
| | Благодарю за помощь.
Хотел таким образом защититься от злого кода.
$text=stripslashes($text);
$text=htmlspecialchars($text);
Лучше при выводе с БД проверять? | |
|
|
|
|
|
|
|
для: PITbulik
(18.01.2012 в 22:56)
| | http://php.net/manual/ru/function.mysql-real-escape-string.php
читаем здесь про экранирование перед записью в MySQL (не забываем примечания)
что касается htmlspecialchars (http://php.net/manual/ru/function.htmlspecialchars.php):
>Эта функция полезна при отображении данных, введенных пользователем, которые могут содержать нежелательные HTML тэги, например в форуме или гостевой книге.
например, вывести тег <script> и его содержимое как оно есть, без выполнения кода | |
|
|
|
|
|
|
|
для: Igorek
(19.01.2012 в 07:38)
| | Спасибо, все понял) | |
|
|
|
|
|
|
|
для: Igorek
(19.01.2012 в 07:38)
| | Появились еще вопросики:
Такой код правильный?
<?
if(isset($name) and isset($text) and $pr_chislo=='true')
{
[b]mysql_real_escape_string($text);[/b]
mysql_query("insert into `gos_k` (`name`,`text`,`data`,`time`) values ('$name','$text','$data','$time')");
}
?>
-----------------------------------------------------------
И еще когда я пытаюсь добавить ссылки
<a href='http://google.ru'>Link</a>
http://ya.ru
Проверка ссылок.
|
то в базу ничего не добавляется, в чем может быть причина? | |
|
|
|
|
|
|
|
для: PITbulik
(19.01.2012 в 15:28)
| | Подскажите пожалуйста | |
|
|
|
|
|
|
|
для: PITbulik
(19.01.2012 в 15:28)
| | 1. экранирование надо применять для всех потенциально опасных данных.
2. $pr_chislo - видимо предполагалось, что это будет boolean переменная? если да, то и используйте соответствующие значения TRUE, FALSE вместо строковых литералов.
3. для isset можно передавать переменное количество параметров. т.е.
isset($name, $text) == TRUE только если обе переменные установлены
4. Вам действительно нужно запоминать дату и время генерации страницы и потом записывать её в БД (судя потому, что вы их в hidden поля записываете). Или все же фактическую дату создания записи в БД?
5. Проще всего определить почему некорректно добавляются данные в базу (т.е. некорректно построен SQL запрос) - это вывести этот самый запрос перед выполнением и проанализировать его на предмет ошибок | |
|
|
|