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

Форум PHP

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

 

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

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

тема: Форма и обработчик
 
 автор: EnD   (13.04.2006 в 11:38)   письмо автору
 
 

Привет всем! Я недавно начал изучать PHP, в смысле опыта у меня вообще нет, да я прочитал Вашу книгу PHP 5 На примерах, потом ту что у Вас выложена на сайте, и вот пробую что-то создать, это что-то является обработчиком формы (скажем для гостевой, но в общем-то не важно), но естественно как всегда сначала мало что получается. У меня два файла, собственно говоря сама форма (index.php) и обработчик (handler.php).
Вот код index.php:

<form action="handler.php" method="POST">
Имя: <input type="TEXT" name="name"><br>
email:<input type="TEXT" name="email"><br>
Сообщение:<br> <textarea name="message" cols="76" rows="3"></textarea><br>
<input type="SUBMIT" name=send value="Отправить">
</form>
<?php
 
// Открываем директорию
  
$dir opendir("records");
  
// В цикле считываем её содержимое
  
while(($file readdir($dir)))
  {
    
// Если текущий объект является файлом - выводим его
    
if(is_file($file)) echo "<a href=$file>$file</a><br>";
  }
  
// Закрываем директорию
  
closedir($dir);
?>


А вот handler.php:

<?php
// Извлекаем данные из суперглобального массива $_POST
$name $_POST['name'];
$email $_POST['email'];
$message $_POST['message'];
if (!
preg_match("|^[\w\d\.]+$|i"$name))
exit (
"Неверный формат имени");
if (!
preg_match("|[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}|i"$email))
exit (
"Неверный формат email");
if (!
preg_match("|^[^';]+$|i"$message))
exit (
"В сообщении использованы недопустимые символы");
/* создаем файл с именем вида "rec.+время добавления сообщения" */
    
$file fopen("records/rec.".time(),"w");
    
// записываем информацию в файл, по одной строчке на каждое поле
    
fputs($file,$name."\n");
    
fputs($file,$email."\n");
    
fputs($file,$message."\n");
    
// закрываем файл
    
fclose($file);
   
?>
   <a href="index.php">Назад</a>


Просьба не судить строго, потому что как я уже сказал опыта у меня никакого... Просто помогите.

   
 
 автор: cheops   (13.04.2006 в 11:59)   письмо автору
 
   для: EnD   (13.04.2006 в 11:38)
 

А в чём выражается "не работа" скрипта?

   
 
 автор: EnD   (13.04.2006 в 12:25)   письмо автору
 
   для: cheops   (13.04.2006 в 11:59)
 

А вот именно, что ничего не происходит, я заполняю форму, нажимаю отправить, он переходит на другую страницу (пустую) с единственной ссылкой "назад" которую я и поставил, я перехожу назад и ВСЕ, сообщения не отображаются, короче говоря, НИЧЕГО.

   
 
 автор: Бамси   (13.04.2006 в 14:15)   письмо автору
 
   для: EnD   (13.04.2006 в 12:25)
 

Index.php


<form action="handler.php" method="POST"> 
Имя: <input type="TEXT" name="name"><br> 
email:<input type="TEXT" name="email"><br> 
Сообщение:<br> <textarea name="message" cols="76" rows="3"></textarea><br> 
<input type="SUBMIT" name=send value="Отправить"> 
</form> 
<?php 
  $dir_rec 
dir("records");
  while(
$entry $dir_rec->read())
  {
    if (
substr($entry,0,3)=="rec")
    {
      
$names[$i]=substr($entry,4);
      
$i++;
    }
  }
  
$dir_rec->close();
  @
rsort($names);
    
$count $i;
  
$count1 $count;
  if (empty(
$start))
  {
    
$start 0;
  }
  
$start intval($start);
  if (
$start 0)
  {
    
$start 0;
  }
  print 
"<center>";
  if (
$count $start 10$count $start 10;
  if (
$start != 0)
  {
    print 
"<A href=index.php?start=".($start 10).">Предыдущие</A>";
  }
  if (
$count1 $start 10)
  {
    print 
"<A href=index.php?start=".($start 10).">Следующие</A> \n";
  }
  print 
"</center><br>";
  for (
$i $start$i $count$i++)
  {
    
$entry $names[$i];
    
$data file("records/rec.".$entry);
    
$date $entry;
    
$name trim($data[0]);
    
$email trim($data[1]);
    
$msg trim($data[2]);
    print 
"<table border=0 cellspacing=0 cellpadding=2 width=100%>
    <tr bgcolor=#F0F0F0><td> "
;
    print 
"<b>$name</b> ";
    if (!empty(
$city)) print "$city&nbsр";
    if (!empty(
$email)) print "<a href=mailto:$email><i>$email</i></A>\n";
    if (!empty(
$url)) print "<a href=$url>$url</a>";
    print 
"</td><td align=right>".date("<b>d-m-Y</b> H:i, $date")."</td></tr>\n<tr><td colspan=2>\n";
    print 
"<P>".$msg."</P>\n";
    print 
"</td></tr></table>\n<br><br>\n";
  }
  print 
"<center>";
  if (
$start != 0)
  {
    print 
"<A href=index.php?start=".($start 10).">Предыдущие</A>";
  }
  if (
$count1 $start 10)
  {
    print 
"<A href=index.php?start=".($start 10).">Следующие</A> \n";
  }
  print 
"</center>";
?>


handler.php


<?php 
// Извлекаем данные из суперглобального массива $_POST 
$name $_POST['name']; 
$email $_POST['email']; 
$message $_POST['message']; 
if (!
preg_match("|^[\w\d\.]+$|i"$name)) 
exit (
"Неверный формат имени"); 
if (!
preg_match("|[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}|i"$email)) 
exit (
"Неверный формат email"); 
if (!
preg_match("|^[^';]+$|i"$message)) 
exit (
"В сообщении использованы недопустимые символы"); 
    
$file fopen("records/rec.".time(),"w"); 
    
fputs($file,$name."\n"); 
    
fputs($file,$email."\n"); 
    
fputs($file,$message."\n"); 
    
// закрываем файл 
    
fclose($file); 
    print 
"<HTML><HEAD>\n";
    print 
"<META HTTP-EQUIV='Refresh' CONTENT='0; URL=index.php'>\n";
    print 
"</HEAD></HTML>\n";
?> 


PS: Как правильно сделать что бы отображалась дата, я не знаю.

   
 
 автор: cheops (из кафе)   (13.04.2006 в 17:26)
 
   для: EnD   (13.04.2006 в 12:25)
 

А в records какие-нибудь файлы появляются или тоже пусто?

   
 
 автор: EnD   (13.04.2006 в 19:38)   письмо автору
 
   для: cheops (из кафе)   (13.04.2006 в 17:26)
 

Так вот именно, что появляется, сколько сообщений отправишь, столько и появится...

   
 
 автор: cheops   (13.04.2006 в 22:41)   письмо автору
 
   для: EnD   (13.04.2006 в 19:38)
 

А в файлах что? Браузер страницы не кэширует?

   
 
 автор: EnD   (13.04.2006 в 23:42)   письмо автору
 
   для: cheops   (13.04.2006 в 22:41)
 

Файл изначально виден как файл неизвестного приложения, но я попробывал его открыть блокнотом и увидел ту информацию которую вводил в форме, в одну строку, name, email, message разделены странными квадратиками... Браузер тоже не при чем... Черти что...

   
 
 автор: Trianon   (14.04.2006 в 10:00)   письмо автору
 
   для: EnD   (13.04.2006 в 23:42)
 

Ничего удивительного.
Странные квадратики - это LF . То есть "\n".
В то время как блокнот требует, чтобы строки в файле завершались CRLF .То есть "\r\n"

   
 
 автор: EnD   (14.04.2006 в 10:15)   письмо автору
 
   для: Trianon   (14.04.2006 в 10:00)
 

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

   
 
 автор: Trianon   (14.04.2006 в 10:19)   письмо автору
 
   для: EnD   (14.04.2006 в 10:15)
 

"Неработа" заключается в том, что не видно новых ссылок, или в том, что по ссылкам не открываются файлы?
Если второе, то это потому что href=$file , а не href=records/$file .

   
 
 автор: EnD   (14.04.2006 в 10:30)   письмо автору
 
   для: Trianon   (14.04.2006 в 10:19)
 

Попробывал исправить ссылку, ничего не изменилось...

   
 
 автор: Trianon   (14.04.2006 в 10:38)   письмо автору
 
   для: EnD   (14.04.2006 в 10:30)
 

Вы не ответили на вопрос.

   
 
 автор: EnD   (14.04.2006 в 11:07)   письмо автору
 
   для: Trianon   (14.04.2006 в 10:38)
 

А, извините, неработа заключается в том что на главной странице не отображаются сообщения, НИКАК, вот...

   
 
 автор: Trianon   (14.04.2006 в 11:33)   письмо автору
 
   для: EnD   (14.04.2006 в 11:07)
 

<?
 
if(is_file("records/$file")) 
       echo 
"<a href=records/$file>$file</a><br>"
?>

   
 
 автор: EnD   (14.04.2006 в 11:39)   письмо автору
 
   для: Trianon   (14.04.2006 в 11:33)
 

Да я так сделал, но все равно без толку...

   
 
 автор: Trianon   (14.04.2006 в 11:42)   письмо автору
 
   для: EnD   (14.04.2006 в 11:39)
 

Вот так?
if(is_file("records/$file"))

   
 
 автор: EnD   (14.04.2006 в 11:47)   письмо автору
 
   для: Trianon   (14.04.2006 в 11:42)
 

Ура!!!!!! Появились ссылки на те сообщения :-).
Спасибо, а как сделать чтобы содержимое сразу выводилось?

   
 
 автор: Trianon   (14.04.2006 в 11:57)   письмо автору
 
   для: EnD   (14.04.2006 в 11:47)
 

Не очень понятно, что значит "сразу"?

   
 
 автор: EnD   (14.04.2006 в 12:00)   письмо автору
 
   для: Trianon   (14.04.2006 в 11:57)
 

Ну не ссылки на те файлы, а их содержимое

   
 
 автор: Trianon   (14.04.2006 в 12:04)   письмо автору
 
   для: EnD   (14.04.2006 в 12:00)
 


if(is_file("records/$file")) 
       echo "<p><pre>" . file_get_contents("records/$file") . "</pre></p>\r\n"; 

   
 
 автор: EnD   (14.04.2006 в 12:10)   письмо автору
 
   для: Trianon   (14.04.2006 в 12:04)
 

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

   
 
 автор: Trianon   (14.04.2006 в 12:24)   письмо автору
 
   для: EnD   (14.04.2006 в 12:10)
 

    // закрываем файл
    fclose($file);
    header("Location: index.php");
 ?>

Перед index.php лучше бы изобразить правильный URL-путь от http:// и так далее, дабы исключить побочные эффекты на стороне браузера. Еще лучше этот правильный путь выкусить из переменных $_SERVER['HTTP_HOST'] и $_SERVER['PHP_SELF']

   
 
 автор: EnD   (15.04.2006 в 00:13)   письмо автору
 
   для: Trianon   (14.04.2006 в 12:24)
 

Так я не понял, этот кусочек нужно вставить в конце handler?

   
 
 автор: EnD   (15.04.2006 в 01:36)   письмо автору
 
   для: EnD   (15.04.2006 в 00:13)
 

Все, разобрался :-)) Вот даю... Спасибо за терпение и помощь, низкий поклон от меня...

   
Rambler's Top100
вверх

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