Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Гостевая книга 1.2.0
 
 автор: Dimonti   (24.08.2004 в 08:43)   письмо автору
 
 

Установил гостевую книгу, но при добавлении сообщения, книга показывает:

Во время добавления записи произошли следующие ошибки:
Вы не ввели сообщение
Вы не ввели имя

Но всё это я вводил неоднократно
Вчём здесь проблема?

   
 
 автор: cheops   (24.08.2004 в 10:10)   письмо автору
 
   для: Dimonti   (24.08.2004 в 08:43)
 

Хм... скачал вариант гостевой книги, поотключал всё что только можно в php.ini - работает...
В первую очередь посмотрите пожалуйста размер файла addrec.php - он 9169 байт?

   
 
 автор: Dimonti   (25.08.2004 в 01:04)   письмо автору
 
   для: cheops   (24.08.2004 в 10:10)
 

Нет, размер файла меньше - у меня 9098 б.
А когда архив распаковал размер был - 9101 б.
Саму книгу скачал максимум неделю назад.

   
 
 автор: cheops   (25.08.2004 в 11:04)   письмо автору
 
   для: Dimonti   (25.08.2004 в 01:04)
 

Выслал вам на почту addrec.php...

   
 
 автор: Dimonti   (26.08.2004 в 02:45)   письмо автору
 
   для: cheops   (25.08.2004 в 11:04)
 

За addrec.php огромное спасибо.
Поменял этот файл, но в ответ выскакивает страница с кучей ошибок.
Закинул на сайт книгу по новому и удивился:
Когда добавляю сообщение с ПУСТЫМИ полями, оно добавляется.
Но если поля заполнить, то:

"Во время добавления записи произошли следующие ошибки:
Вы не ввели сообщение
Вы не ввели имя"

???

И вопрос такой, можно-ли сделать так, чтобы страница сама обновлялась, или у меня опять не так как у людей

   
 
 автор: cheops   (26.08.2004 в 09:33)   письмо автору
 
   для: Dimonti   (26.08.2004 в 02:45)
 

Хм.. странное поведение. Посмотрите пожалуйста в строчке 35 файла addrec.php именно такой код идёт:
<?php
    
if (empty($msg)) 
    {
        
$action ""
        
$error $error."<LI>Вы не ввели сообщение\n";
    }
    if (empty(
$name)) 
    {
        
$action ""
        
$error $error."<LI>Вы не ввели имя\n";
    }
?>

Измените его на следующий и посмотрите значения переменных:
<?php
    
echo "имя - $msg";
    echo 
"сообщение - $name";
    if (empty(
$msg)) 
    {
        
$action ""
        
$error $error."<LI>Вы не ввели сообщение\n";
    }
    if (empty(
$name)) 
    {
        
$action ""
        
$error $error."<LI>Вы не ввели имя\n";
    }
?>

   
 
 автор: Dimonti   (27.08.2004 в 08:11)   письмо автору
 
   для: cheops   (26.08.2004 в 09:33)
 

Спасибо, книга заработала.
А чтобы главная страница после добавления записи сама обновлялась?

А было у меня в этом adres.php так:

// Проверяем правильность ввода информации в поля формы
if (trim($_POST["msg"]))
{
$action = "";
$error = $error."<LI>Вы не ввели сообщение\n";
}
if (trim($_POST["name"]))
{
$action = "";
$error = $error."<LI>Вы не ввели имя\n";
}

   
 
 автор: cheops   (27.08.2004 в 09:46)   письмо автору
 
   для: Dimonti   (27.08.2004 в 08:11)
 

Со строчки 138 файла addrec.php должен быть код:
<?php
  
print "<HTML><HEAD>\n";
  print 
"<META HTTP-EQUIV='Refresh' CONTENT='0; URL=index.php'>\n";
  print 
"</HEAD></HTML>\n";
?>

Он осуществляет автоматический переход на страницу index.php, если в результате этого страница не обновляется, значит на хостинге перед web-сервером стоит обратный кэширующий сервер и нужно подавить кеширование, например, передав в index.php следующий заголовок
<?php 
header
("Expires: Mon, 23 May 1995 02:00:00 GMT"); 
?>


http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=260&page=1

   
 
 автор: Dimonti   (28.08.2004 в 01:44)   письмо автору
 
   для: cheops   (27.08.2004 в 09:46)
 

Спасибо, посмотрел по Вашей ссылочке, получил то, что нужно.
Всё заработало.

   
 
 автор: Dimonti   (01.09.2004 в 07:54)   письмо автору
 
   для: Dimonti   (28.08.2004 в 01:44)
 

Только заметил, при оставлении обязатнельных полей пустыми, выдаётся, как и должно быть, сообщение об ошибках, но, дело в том, что в самом верху страницы появляются слова:

имя - сообщение -

На работу книги они не влияют, а только на эстетический вид.
Как здесь исправляется?

   
 
 автор: cheops   (01.09.2004 в 09:12)   письмо автору
 
   для: Dimonti   (01.09.2004 в 07:54)
 

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

http://www.softtime.ru/info/gbmysql.php

   
 
 автор: Dimonti   (02.09.2004 в 00:59)   письмо автору
 
   для: cheops   (01.09.2004 в 09:12)
 

Вот Вам addrec.php, оформление, правда, я немного переделал под оформление сайта:

<?php
///////////////////////////////////////////////////
// Гостевая книга с использованием MySQL
// 2003-2004 (C) IT-студия SoftTime (http://www.softtime.ru)
// Симдянов И.В. (simdyanov@softtime.ru)
// Кузнецов М.В. (kuznetsov@softtime.ru)
// Голышев С.В. (softtime@softtime.ru)
///////////////////////////////////////////////////
// Устанавливаем соединение с базой данных
include "config.php";
$error = "";
$action = "";
// Возвращаем значение переменной action, переданной в урле
$action = $_POST["action"];
// Если оно не пусто - добавляем сообщение в базу данных
if (!empty($action))
{
// Проверяем сообщение на слишком длинные слова
$lenmsg = strlen($msg);
$templen = 0;
$temp = strtok($msg, " ");
if (strlen($msg)>60)
{
while ($templen < $lenmsg)
{
if (strlen($temp)>60)
{
$action = "";
$error = $error."<LI>Текст сообщения содержит слишком много символов без пробелов\n";
break;
}
else
{
$templen = $templen + strlen($temp) + 1;
}
$temp = strtok(" ");
}
}

// Проверяем правильность ввода информации в поля формы
echo "имя - $msg";
echo "сообщение - $name";
if (empty($msg))
{
$action = "";
$error = $error."<LI>Вы не ввели сообщение\n";
}
if (empty($name))
{
$action = "";
$error = $error."<LI>Вы не ввели имя\n";
}
// При помощи регулярных выражений проверяем правильность ввода e-mail
if($_POST["email"]!="")
{
if (!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i", $email))
{
$action = "";
$error = $error."<LI>Неверно введен е-mail.&nbsp Введите e-mail в виде <i>dp-studio@km.ru</i> \n";
}
}

// Обрабатываем HTML-тэги и скрипты в сообщении и информации
// об авторе, ограничиваем объём сообщения
$name = substr($_POST["name"],0,32);
$name = htmlspecialchars(stripslashes($name));
$city = substr($_POST["city"],0,32);
$city = htmlspecialchars(stripslashes($city));
$email = substr($_POST["email"],0,32);
$email = htmlspecialchars(stripslashes($email));
$url = substr($_POST["url"],0,60);
$url = htmlspecialchars(stripslashes($url));
$msg = substr($_POST["msg"],0,1024);
$msg = htmlspecialchars(stripslashes($msg));

// Добавляем протокол в url, если пользователь забыл это сделать сам
$url = strtr($url, "HTPF", "htpf");
if (trim($url)!="")
{
if (strtolower((substr($url, 0, 7))!="http://") && (strtolower(substr($url, 0, 7))!="ftp://")) $url="http://".$url;
}

// Пытаемся вырезать мат, насколько это возможно ;-)
$search_bad_words = array("'хуй'si","'пизд'si","'ёб'si",
"'сука'si","'суки'si","'дроч'si","'хуя'si","'ссуч'si");
$replace = array("*","*","*","*","*","*","*","*");
$msg = preg_replace($search_bad_words,$replace,$msg);
$name = preg_replace($search_bad_words,$replace,$name);
$city = preg_replace($search_bad_words,$replace,$city);

if (empty($error))
{
$msg = nl2br($msg);
// Обрабатываем встроенные тэги
$msg = str_replace("[u]","<u>",$msg);
$msg = str_replace("[U]","<u>",$msg);
$msg = str_replace("","<i>",$msg);
$msg = str_replace("[I]","<i>",$msg);
$msg = str_replace("","<B>",$msg);
$msg = str_replace("[B]","<B>",$msg);
$msg = str_replace("[sub]","<SUB>",$msg);
$msg = str_replace("[SUB]","<SUB>",$msg);
$msg = str_replace("[sup]","<SUP>",$msg);
$msg = str_replace("[SUP]","<SUP>",$msg);
$msg = str_replace("[/u]","</u>",$msg);
$msg = str_replace("[/U]","</u>",$msg);
$msg = str_replace("
","</i>",$msg);
$msg = str_replace("[/I]","</i>",$msg);
$msg = str_replace("
","</B>",$msg);
$msg = str_replace("[/B]","</B>",$msg);
$msg = str_replace("[/SUB]","</SUB>",$msg);
$msg = str_replace("[/sub]","</SUB>",$msg);
$msg = str_replace("[/SUP]","</SUP>",$msg);
$msg = str_replace("[/sup]","</SUP>",$msg);
$msg = eregi_replace("(.*)\\[url\\](.*)\\[/url\\](.*)","\\1<a href=\\2>\\2</a>\\3",$msg);
$msg = str_replace("\n"," ",$msg);
$msg = str_replace("\r"," ",$msg);
// Запрос к базе данных на добавление сообщения
$query = "INSERT INTO guest VALUES (0,
'$name',
'$city',
'$email',
'$url',
'$msg',
'-',
NOW(),
'show');";
if(mysql_query($query))
{
// Если в конфигурационном файле $sendmail = true отправляем уведомление
if($sendmail)
{
$thm = "guestbook - a new post";
$msg = "post: $msg\nname: $name";
mail($valmail, $thm, $msg);
}
// Возвращаемся на главную страницу если всё прошло удачно
print "<HTML><HEAD>\n";
print "<META HTTP-EQUIV='Refresh' CONTENT='0; URL=index.php'>\n";
print "</HEAD></HTML>\n";
exit();
}
else
{
// Выводим сообщение об ошибке в случае неудачи
echo "<a href='index.php'>Вернуться</a>";
echo("<P> Ошибка при добавлении сообщения</P>");
echo("<P> $query</P>");
exit();
}
}
}

if (empty($action))
{
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title></title>
<link rel="StyleSheet" type="text/css" href="guestbook.css">
</head>
<body bottommargin="0" marginheight="0" marginwidth="0" rightmargin="0" leftmargin="0" topmargin="0" link="#EAEAEA" vlink="#EAEAEA" alink="#FFFFFF" text="#EAEAEA" bgcolor="#000000">
<table border="0" width="800" id="table1" style="position: relative; left: 10px; top: 15px; border-left-width:1px; border-right-width:1px; border-top-style:solid; border-top-width:1px; border-bottom-width:1px">
<tr>
<td width="196"><font face="Arial" size="2">
<b>
<font color="#FFFFFF">Гостевая книга cтудии D&amp;P</font></b></td>
<td width="421">
<p align="right"><font face="Arial" size="2">&nbsp;<a href="index.php" title="Вернуться в гостевую книгу"><span style="text-decoration: none">Гостевая книга</span></a></font></td>
<td width="196">
<p align="right"><font face="Arial" size="2">&nbsp;<a href="http://dp-studio.ru" title="Вернуться на сайт"><span style="text-decoration: none">На главную страницу</span></a></font></td>
</tr>
</table>
<p align="right">&nbsp;</p>
<p align="right">&nbsp;</p>
<form action=addrec.php method=post>
<input type=hidden name=action value=post>
<table height="438"><tr valign="top"><td width="25%">&nbsp;</td><td>
<table border="0" align="center" cellpadding="6" cellspacing="0" width="441" height="429">
<tr valign="top">
<td colspan="3" height="33">
<p class="pcolor2" align="center"><font face="Arial" size="2" color="#FFFFFF"><b>Добавление сообщения</b>
</font>
</td>
</tr>
<tr>
<td width="78" align="left"><p class=ptd align="center">
<b>
<font face="Arial" size="2" color="#FFFFFF">Имя *</font></b></td>
<td width="197"><input type=text name=name maxlength=32 size=25 value='<? echo $name; ?>'></td>
<td rowspan="3" width="130">
<p class=help align="center"><font face="Arial" size="2" color="#FFFFFF">* Поля, обязательные для заполнения
</font>
</td>
</tr>
<tr>
<td align="left"><p class=ptd align="center">
<font face="Arial" size="2" color="#FFFFFF"><b>Город</b></font></td>
<td width="197"><input type=text name=city maxlength=32 size=25 value='<? echo $city; ?>'></td>
</tr>
<tr>
<td align="center"><p class=ptd>
<font face="Arial" size="2" color="#FFFFFF"><b><nobr>E-mail</nobr></b></font></td>
<td width="197"><input type=text name=email size=25 maxlength=32 value='<? echo $email; ?>'></td>
</tr>
<tr>
<td align="center"><p class=ptd>
<font face="Arial" size="2" color="#FFFFFF"><b>URL</b></font></td>
<td colspan="2"><input type=text size=40 name=url maxlength=36 value='<? echo $url; ?>'></td>
</tr>
<tr>
<td colspan="3" height="10"><nop></td>
</tr>
<tr>
<td colspan="3">
<p class=ptd><em class=em><font face="Arial" size="2"><b>
<font color="#FFFFFF">Сообщение *</font></font><em><br>
<textarea cols=51 rows=10 name=msg><? echo $msg; ?></textarea>
</td>
</tr>
<tr>
<td colspan="3">
<p align="center">
<input type="submit" value="Добавить">&nbsp;&nbsp;&nbsp;
</td>
</tr>
</table>
</td></tr></table>
</form>
</body>
</html>
<?php
// Выводим сообщение об ошибке
if (!empty($error))
{
print "<P><font color=red>Во время добавления записи произошли следующие ошибки: </font></P>\n";
print "<UL>\n";
print $error;
print "</UL>\n";
}
}
?>

И попутно, если можно, такой вопрос:
...
<p align="right"><font face="Arial" size="2">&nbsp;<a class=link href="index.php" title="Вернуться в гостевую книгу"><span style="text-decoration: none">Гостевая книга</span></a></font></td>
...

class=link для чего нужно. Дело в том, что в оформлении страницы мне хотелось, чтобы ссылки были по цвету,размеру и т.д. такими как общий текст, но получалось серым цветом, размером меньше, и т.д. Я убрал class=link и ссылка приняла нужный мне вид, при этом она работает. Так для чего это нужно.

   
 
 автор: J.Lex   (02.09.2004 в 01:25)   письмо автору
 
   для: Dimonti   (02.09.2004 в 00:59)
 

предлагаю функцию которая не много сокращает код для проверки замены тегов и введенных символов!


<?php  
function somefunctionname($string)
{
$string strtr($string,array(
"(b)"=>"<b>"и тд));
return 
$string;
}
somefunctionname($msg);

?>
strtr(для тех кто не знает еще : Заменяет все вхождения символов строки from в строке string на соответствующие символы из строки to )

насчет class=link
в CSS можно изменять стили сылок и class=link это обозначение !посмотри в стилях где что прописано !ну а для всего прочего почитай про стили CSS и тогда сможешь и в этом разобраться!

   
 
 автор: J.Lex   (02.09.2004 в 01:37)   письмо автору
 
   для: J.Lex   (02.09.2004 в 01:25)
 

хмм посмотрел тут на досуге код гостевой ну народ его код можно сократить раза в 3 и повысить быстродействие!Разработчики ну сами посмотрите пока новичек во всем и вся разбереться он же запариться!:)(

   
 
 автор: Dimonti   (02.09.2004 в 02:02)   письмо автору
 
   для: J.Lex   (02.09.2004 в 01:37)
 

Спасибо за заботу, Я действительно уже запарился, но с каждой заморочкой становиться ещё интереснее.
Не хватает немного литературы, да извилин в уме, поэтому и пристаю тут с глупыми вопросами.

   
 
 автор: J.Lex   (02.09.2004 в 02:13)   письмо автору
 
   для: Dimonti   (02.09.2004 в 02:02)
 

да все нормально так и учаться ты если че стучись 268444768(ессесно когда я не на работе и дома отвечу или на мыло пиши оперативно отвечу или сылку дам на литературу j.lex@mail.ru

   
 
 автор: Dimonti   (02.09.2004 в 03:14)   письмо автору
 
   для: J.Lex   (02.09.2004 в 02:13)
 

Понял, адресок возьму на карандашик.
С CSS начал разбираться. Если можно там ещё один мой вопросик:

http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=248&page=1

   
 
 автор: glsv (Дизайнер)   (02.09.2004 в 08:09)   письмо автору
 
   для: J.Lex   (02.09.2004 в 01:37)
 

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

   
 
 автор: glsv (Дизайнер)   (02.09.2004 в 08:10)   письмо автору
 
   для: J.Lex   (02.09.2004 в 01:37)
 

PS: новичек пишется как новичок

   
 
 автор: J.Lex   (02.09.2004 в 09:19)   письмо автору
 
   для: glsv (Дизайнер)   (02.09.2004 в 08:10)
 

Дизайнер по секрету я не русский :)))

   
 
 автор: glsv (Дизайнер)   (02.09.2004 в 11:41)   письмо автору
 
   для: J.Lex   (02.09.2004 в 09:19)
 

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

   
 
 автор: J.Lex   (02.09.2004 в 19:09)   письмо автору
 
   для: glsv (Дизайнер)   (02.09.2004 в 11:41)
 

причем тут безграмотность просто русский в эстонских школах не ПРЕПОДАЮТ!:))))

   
 
 автор: glsv (Дизайнер)   (02.09.2004 в 22:41)   письмо автору
 
   для: J.Lex   (02.09.2004 в 19:09)
 

Вы отлично пишете по русски, причем достаточно грамотно. Я вам указал на ошибку. Кстати, ошибка в этом слове достаточно распространена и многие из тех кто учил русский язык тоже не знают как пишется это слово.
Зачем же воспринимать эту мою поправку в штыки и оправдывать ее. Вас никто не обвинял.

Политика администрации в данном вопросе заключается в следующем: по возможности, содержать форум в приятном для чтения виде. Сюда же относятся и правила русского языка, так это язык данного форума. А это значит: стараться соблюдать эти правила самим, напоминать участникам о соблюдении этих правил, по необходимости указывать на ошибки и даже осуществлять модерирование сообщений.

Прошу прощения если я Вас обидел. Надеюсь, Вы все же останетесь участником данного форума.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования