|
|
|
| Привет всем! Я недавно начал изучать 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>
|
Просьба не судить строго, потому что как я уже сказал опыта у меня никакого... Просто помогите. | |
|
|
|
|
|
|
|
для: EnD
(13.04.2006 в 11:38)
| | А в чём выражается "не работа" скрипта? | |
|
|
|
|
|
|
|
для: cheops
(13.04.2006 в 11:59)
| | А вот именно, что ничего не происходит, я заполняю форму, нажимаю отправить, он переходит на другую страницу (пустую) с единственной ссылкой "назад" которую я и поставил, я перехожу назад и ВСЕ, сообщения не отображаются, короче говоря, НИЧЕГО. | |
|
|
|
|
|
|
|
для: 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 какие-нибудь файлы появляются или тоже пусто? | |
|
|
|
|
|
|
|
для: cheops (из кафе)
(13.04.2006 в 17:26)
| | Так вот именно, что появляется, сколько сообщений отправишь, столько и появится... | |
|
|
|
|
|
|
|
для: EnD
(13.04.2006 в 19:38)
| | А в файлах что? Браузер страницы не кэширует? | |
|
|
|
|
|
|
|
для: cheops
(13.04.2006 в 22:41)
| | Файл изначально виден как файл неизвестного приложения, но я попробывал его открыть блокнотом и увидел ту информацию которую вводил в форме, в одну строку, name, email, message разделены странными квадратиками... Браузер тоже не при чем... Черти что... | |
|
|
|
|
|
|
|
для: EnD
(13.04.2006 в 23:42)
| | Ничего удивительного.
Странные квадратики - это LF . То есть "\n".
В то время как блокнот требует, чтобы строки в файле завершались CRLF .То есть "\r\n" | |
|
|
|
|
|
|
|
для: Trianon
(14.04.2006 в 10:00)
| | Ну я сомневаюсь, что это может служить причиной для неработы... | |
|
|
|
|
|
|
|
для: EnD
(14.04.2006 в 10:15)
| | "Неработа" заключается в том, что не видно новых ссылок, или в том, что по ссылкам не открываются файлы?
Если второе, то это потому что href=$file , а не href=records/$file . | |
|
|
|
|
|
|
|
для: Trianon
(14.04.2006 в 10:19)
| | Попробывал исправить ссылку, ничего не изменилось... | |
|
|
|
|
|
|
|
для: EnD
(14.04.2006 в 10:30)
| | Вы не ответили на вопрос. | |
|
|
|
|
|
|
|
для: Trianon
(14.04.2006 в 10:38)
| | А, извините, неработа заключается в том что на главной странице не отображаются сообщения, НИКАК, вот... | |
|
|
|
|
|
|
|
для: EnD
(14.04.2006 в 11:07)
| |
<?
if(is_file("records/$file"))
echo "<a href=records/$file>$file</a><br>";
?>
|
| |
|
|
|
|
|
|
|
для: Trianon
(14.04.2006 в 11:33)
| | Да я так сделал, но все равно без толку... | |
|
|
|
|
|
|
|
для: EnD
(14.04.2006 в 11:39)
| | Вот так?
if(is_file("records/$file")) | |
|
|
|
|
|
|
|
для: Trianon
(14.04.2006 в 11:42)
| | Ура!!!!!! Появились ссылки на те сообщения :-).
Спасибо, а как сделать чтобы содержимое сразу выводилось? | |
|
|
|
|
|
|
|
для: EnD
(14.04.2006 в 11:47)
| | Не очень понятно, что значит "сразу"? | |
|
|
|
|
|
|
|
для: Trianon
(14.04.2006 в 11:57)
| | Ну не ссылки на те файлы, а их содержимое | |
|
|
|
|
|
|
|
для: EnD
(14.04.2006 в 12:00)
| |
if(is_file("records/$file"))
echo "<p><pre>" . file_get_contents("records/$file") . "</pre></p>\r\n";
|
| |
|
|
|
|
|
|
|
для: Trianon
(14.04.2006 в 12:04)
| | Супер :-))), спасибо, я уже наверное надоел вопросами своими.
Но вот еще такой, в гостевых такая фишка, при нажатии кнопки "отправить" браузер не переводит на страницу обработчика формы, а сразу отображает сообщение в том же окне, как это сделать? | |
|
|
|
|
|
|
|
для: EnD
(14.04.2006 в 12:10)
| |
// закрываем файл
fclose($file);
header("Location: index.php");
?>
|
Перед index.php лучше бы изобразить правильный URL-путь от http:// и так далее, дабы исключить побочные эффекты на стороне браузера. Еще лучше этот правильный путь выкусить из переменных $_SERVER['HTTP_HOST'] и $_SERVER['PHP_SELF'] | |
|
|
|
|
|
|
|
для: Trianon
(14.04.2006 в 12:24)
| | Так я не понял, этот кусочек нужно вставить в конце handler? | |
|
|
|
|
|
|
|
для: EnD
(15.04.2006 в 00:13)
| | Все, разобрался :-)) Вот даю... Спасибо за терпение и помощь, низкий поклон от меня... | |
|
|
|