Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Гостевая книга. Не могу найти ошибку111

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: нужна помощь..
alexandr
Отправлено: 16 Июля, 2009 - 20:21:25
Post Id



Новичок


Покинул форум
Сообщений всего: 10
Дата рег-ции: Июль 2009  


Помог: 0 раз(а)




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

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. ?>
  4. <?PHP
  5.  
  6. //закоментированы функции блокировки - в виндовс не работают
  7.  
  8. echo "<h1>GUESTS BOOK</h1>";
  9. $file_gb="./gbook/gb.txt";//файл гостевой книги
  10. $file_tmp="./gbook/gb_tmp.txt"; //временный файл
  11. $max=50;//количество выводимых сообщений
  12.  
  13. //функция для вывода файла gb.txt
  14. function view()
  15. {
  16.     $messages=file('./gbook/gb.txt');
  17.     echo "<p><table width=100%>";
  18.     $i=0;
  19.     foreach($messages as $v)
  20.     {
  21.         $i++;
  22.         if( $i % 2==0 ) echo "<tr><td>$v</td></tr>";
  23.         else echo "<tr><td bgcolor=gray>$v</td></tr>";
  24.         if($i==$max) break;
  25.     }
  26. }
  27.  
  28. if(!isset($POST))
  29. {
  30.     // выводим форму для ввода нового сообщения
  31.     echo "<table width=100% border=1>";
  32.     echo "<tr><td><h2>Новое сообщение</h2><form method=POST action=$SCRIPT_NAME>";
  33.     echo "Email:<input type=text name=email>";
  34.     echo "Сообщение: <input type=text name=mes><input type=submit name=Post></td></tr>";
  35.     echo "</table></form>";
  36.     view();
  37. }
  38. else
  39. {
  40.     if(file_exists($file_tmp)) die("fatal error!");
  41.     //новое сообщение в начало файла
  42.     if(copy($file_gb,$file_tmp))
  43.     {
  44.         if($w=fopen($file_gb,"w"))
  45.         {
  46.          //   flock($w,2);
  47.             fwrite($w,"[".date("d.m.Y H:i:s").$email."]".strip_tags($mes)."\n");
  48.             if(!$r=fopen($file_tmp,"r")) die("can't open file");
  49.          //   flock($r,1);
  50.             while($mes=fgets($r,10240))
  51.             {
  52.                 fputs($w,$mes);
  53.             }
  54.           //  flock($r,3);
  55.             fclose($r);
  56.          //   flock($w,3);
  57.             fclose($w);
  58.             unlink($file_tmp);
  59.         }
  60.     }
  61.     echo "Сообщение успешно записано в файл";
  62.     view();
  63. }
  64.  
  65. ?>
  66.  
  67.  

(Отредактировано автором: 16 Июля, 2009 - 20:26:22)



-----
Есть более спокойные методы заработать на жизнь, чем forex.
 
 Top
RomAndry Администратор
Отправлено: 16 Июля, 2009 - 20:55:17
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 913
Дата рег-ции: Янв. 2008  


Помог: 6 раз(а)




CODE (text):
скопировать код в буфер обмена
  1. if(!isset($POST))
  2. на
  3. if(!isset($_POST))
 
My status
 Top
alexandr
Отправлено: 16 Июля, 2009 - 22:49:51
Post Id



Новичок


Покинул форум
Сообщений всего: 10
Дата рег-ции: Июль 2009  


Помог: 0 раз(а)




Если бы. И так и сяк ошибки вылазиют


-----
Есть более спокойные методы заработать на жизнь, чем forex.
 
 Top
Вездеход
Отправлено: 16 Июля, 2009 - 23:51:55
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 820
Дата рег-ции: Апр. 2008  
Откуда: Россия


Помог: 0 раз(а)




может ошибки то покажите?


$SCRIPT_NAME - откуда эта переменная берется?

и оформите нормально HTML-код
<input type="text" name="email">


-----
о великий nl2br!
Хочешь невероятных ощущений? Юзай блокнот! Блокнот - чудеса сбываются!
Чем меньше вы знаете PHP - тем ценнее мои знания!
 
 Top
Vanu4
Отправлено: 17 Июля, 2009 - 12:02:08
Post Id



Новичок


Покинул форум
Сообщений всего: 60
Дата рег-ции: Май 2008  


Помог: 0 раз(а)




Смотри, здесь довольно все просто.
Изначально, неизвестна переменная $SCRIPT_NAME, ее нужно определить или поставить action=''. Тогда форма будет сабмитится на себя.
Потом, если у тебя в настройках твоего сервака register_globals = off, то $email и $mes тоже две неопределенные переменные.
Это дело нужно заменить на $_POST['email'] и $_POST['mes'] или немного выше написать $email = $_POST['email'] и $mes = $_POST['mes'].
И еще один недочет. Смотри, в твоей функции view() есть переменная $max, которая определена в теле программы. То есть в функции она не видна. Или внеси и ее в тело функции или же поставь в начале функции global $max;
 
 Top
JustUserR
Отправлено: 17 Июля, 2009 - 12:17:27
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




alexandr Для начала в этом куске у вас уже куча ошибок была и на стороне сервера и в HTML-разметке (Как теги открывались в таком же порядке должы и закрываться) - вот по идее нормальный кусок эитого же кода
PHP:
скопировать код в буфер обмена
  1. if(!isset($_POST))
  2. {    echo "<table width=\"100%\" border=\"1\">";
  3.     echo "<tr><td><h2>Новое сообщение</h2><form method=\"POST\" action=\"".$_SERVER['PHP_SELF']."\">";
  4.     echo "Email:<input type=\"text\" name=\"email\"><br>";
  5.     echo "Сообщение: <input type=\"text\" name=\"mes\"><br>";
  6. echo "<input type=\"submit\" name=\"Send\"></td></tr>";
  7.     echo "</form></table>";
  8.     view();
  9. }

Потом с следующем куске очевмидно чтото не так
PHP:
скопировать код в буфер обмена
  1. if(file_exists($file_tmp)) die("fatal error!");
  2.     //новое сообщение в начало файла
  3.     if(copy($file_gb,$file_tmp)
Ведь функция copy не добавляет в начало файла а перезатирает файл

Ну и теперь еще ответ Vanu4 - никогда не оставляйте action="" потому что само на себя так работаь не будет и на форуме уже сто раз появлялись проблемы когда ктото ленился пропечаттаь $_SERVER['PHP_SELF'] - да и вообще фича action="" будет работаь тогда и только тогда когда PHP-скрипт имеет имя index.php


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB