[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вопрос про функцию str_replace
ivxg
Я пишу гостевую книгу на БД.

В форме есть соответствующие кнопки добавляющие элементы форматирования такие как жирный текст, курсив ну и т.д....

Для того, что бы обезопасить работу скрипта я ввел функцию обработки html команд:

htmlspecialchars($text);

поэтому элементы форматирования нужно как то спасать. Вот я и сделал общую подпрограмму для удаления преобразования html команд, а так же для добавления команд форматирования:

function format($text)
{
$result = htmlspecialchars($text);
$result = str_replace("", "<b>", $result);
$result = str_replace("
", "</b>", $result);
return $result;
}

Эта часть кода работает.

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

Я открываю другой скрипт, позволяющий проссматривать и изменять содержимое гостевой, и там в нужное сообщение могу добавить свой ответ, оформленный так как я придумал. Для этого я буду использовать определенную команду, например:

Текст сообщения пользователя.... [action] мой ответ [/action].

Вот как раз проблема то и с ней. Выше я описал на какие символы должно меняться [action], однако скрипт не добавляет обратно в таблицу содержимое с моим [action], а без него добавляет.

Я пошел дальше, и решил проверить работоспособность моей задумки просто при добавлении сообщения (нового) - получилось то же самое, сообщение не добавляется. Хотя скрипт завершает свою работу в штатном режиме.



Спустя 5 минут, 57 секунд (26.08.2010 - 17:09) twin написал(а):
Цитата
Эта часть кода работает.

не работает. После htmlspecialchars() уже нет никаких <>, а значит все напрасно.

А [action] на теги нужно менять после обработки htmlspecialchars(), тогда будет гут

Спустя 10 минут, 44 секунды (26.08.2010 - 17:20) ivxg написал(а):
Я не правильно написал в торопях...



function format($text)
{
$result = htmlspecialchars($text);
$result = str_replace("", "<b>", $result);
$result = str_replace("
", "</b>", $result);
return $result;
}



Это рабочий код который не вызывает проблем...

Однако вместо [action] должно быть :



<table width='400' align='center' style='background-color: #DCE6F2;' cellspacing='0' cellpadding='0'>
<tr>
<td
bgcolor='#0083FF'>
</td>
</tr>
<tr>
<td
align='left'>
<span
class='ws10'>
<i>



Вот как раз из за этой строки скрипт не записывает данные в таблицу...

Спустя 26 минут, 13 секунд (26.08.2010 - 17:46) twin написал(а):
Правильно делает. Ибо данные ты туда пытаешься сунуть неподготовленными.
Код в студию.

Спустя 3 минуты, 58 секунд (26.08.2010 - 17:50) ivxg написал(а):
Эх...

Это сам обработчик

<?php
$action = $_POST['action'];
$captcha = $_POST['captcha'];
$no_robots1 = "1990";
$no_robots2 = "0102";
$no_robots3 = "5070";
$no_robots4 = "9638";
$no_robots5 = "7209";
$no_robots6 = "5791";
if (isset($action))
{

if ($captcha == $no_robots1 or $captcha == $no_robots2 or $captcha == $no_robots3 or $captcha == $no_robots4 or $captcha == $no_robots5 or $captcha == $no_robots6)
{


function PostVar($variable_name)
{

$result = $_POST[$variable_name];
if (get_magic_quotes_gpc())
$result = stripslashes($result);
return trim($result);
}

function format($text)
{

$result = htmlspecialchars($text);
$result = str_replace("\r\n\r\n", "<br><br>", $result);
$result = str_replace("\r\n", "<br>", $result);
$result = str_replace("", "<b>", $result);
$result = str_replace("
", "</b>", $result);

// проблемная часть
$result = str_replace("[admin]", "<table width='400' align='center' style='background-color: #DCE6F2;' cellspacing='0' cellpadding='0'><tr><td bgcolor='#0083FF'></td></tr><tr><td align='left'><span class='ws10'><i>", $result);
$result = str_replace("[/admin]", "</i></span></td></tr></table>", $result);
// конец


return $result;
}

$username = PostVar("username");
$email = PostVar("email");
$message = PostVar("message");
$message = format ($message);

if (!empty($username) && !empty($email) && !empty($message))
{

$date = date("Y-m-d");
$time = date("H:i:s");

$query = "INSERT INTO main_g_book "
."(username, message, email, time, date) "
."VALUES "
."('$username', '$message', '$email', '$time', '$date') ";
$dummy = mysql_query($query);
echo "<div style='margin:10px; text-align: center; background-color: #DCE6F2;'>";
echo "<span class='ws12'>Сообщение оптравленно.</span>";
echo "</div>";

}
else echo"<span class='ws12'>Вы заполнили не все поля!</span>";
}
else echo"Не правильно введенны контрольные цифры!";
}


?>

Спустя 48 минут, 5 секунд (26.08.2010 - 18:38) twin написал(а):
Веселенькая капча)))
Функцию не удержался, подправил:
function format($text) 
{

$result = nl2br(htmlspecialchars($text));
// Объясни плиз, зачем это?
$result = str_replace("", "<b>", $result);
$result = str_replace("", "</b>", $result);

// проблемная часть
$result = str_replace("[admin]", "<table width='400' align='center' "
. "style='background-color: #DCE6F2;' cellspacing='0' cellpadding='0'>"
. "<tr><td bgcolor='#0083FF'></td></tr><tr><td align='left'>"
. "<span class='ws10'><i>", $result);

$result = str_replace("[/admin]", "</i></span></td></tr></table>", $result);
// конец

return $result;
}
хотя дело не в ней.

Вот так надо как минимум.
$query = "INSERT INTO main_g_book "
."(username, message, email, time, date) "
."VALUES "
."('". mysql_real_escape_string($username) ."',
'"
. mysql_real_escape_string($message) ."',
'"
. mysql_real_escape_string($email)."',
'"
. mysql_real_escape_string($time) ."',
'"
. mysql_real_escape_string($date) ."') ";
Но вообще то в базу нужно писать как раз это: [admin][/admin], а менять на выходе.

Спустя 4 минуты, 38 секунд (26.08.2010 - 18:43) ivxg написал(а):
Собственно я разобрался, пока суть да дело...

Ошибка была вот в чем, когда я указывал на что надо заменить [action] я употреблял знак ( ' ), а его ставить туда нельзя...Чем можно заменить?

P.S. На счет оформления кода мне уже сделали сегодня замечание, я учту, просто пока очень тяжело следить и за тем и за этим, в голове много мыслей...

Спустя 1 час, 12 минут, 7 секунд (26.08.2010 - 19:55) twin написал(а):
Я же написал как сделать.
Быстрый ответ:

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