Здравствуйте, только только приступил к изучению PHP (еще недели нет). В учебнике есть учебный скрипт скрипт (гостевая книга), ввожу так как есть, много раз перепроверил, вроде с переменными не ошибся и синтаксис верный (по крайней мере тот что указан в книге), но работает не корректно. В чем заключается ошибка и что меня беспокоит: в папке (home/guestbook/www) три файла два php и один txt. Первый php создает форму html и выводит нужную информацию с файла txt, второй php обрабатывает информацию с формы и записывает ее в файл txt а также создает его. Ошибка заключается в том что та информация что передается на браузер обрабатывается некорректно, путаются местами дата, время и прочие параметры, а также почему-то выводится разделительная строка , которой не должно быть, но которая должна быть в файле txt. Там она также выводится некорректно, идет на той же строке что и тема а должна идти сразу после нее следующей строкой т.е. разделять, почему так не пойму :shock: Может кто нибудь знает? Подозреваю что все дело в этой самой разделительной черте (36-39 строчки кода файла обработки), но вот как исправить не знаю. Вот код: Файл вывода формы: Код (Text): <html> <head> <title>Гостевая</title> </head> <body> <!--Создаем форму, состоящую из поля, textarea и кнопки--> <form action="add_message.php " method="POST"> Имя:<BR> <input type="text" name="name_of_guest"> <BR> Мысли:<BR> <textarea name="message_of_guest" cols=40 rows=5></textarea> <BR> <input type="submit" name="okbutton" value="OK"> </form> PHP: <?php //Открываем файл gost.txt в режиме чтения $f=fopen("gost.txt","rt") or die("Не могу открыть файл"); //Пока не конец файла сообщений while (!feof($f)) { //Читаем очередное сообщение //Получаем строку "----" $hide_line=fgets($f); //Получаем IP-адрес $ip_=fgets($f); //Читаем дату размещения сообщения $data=fgets($f); //Выводим дату размещения сообщения echo "<small>Дата: </small>".$data."<br>"; //Читаем имя человека, который его написал $data=fgets($f); //Выводим имя echo "<small>Имя: </small>".$data."<br>"; //Читаем текст сообщения $data=fgets($f); //Выводим текст сообщения echo "<small>Сообщение: </small>".$data."<br>"; //Отделяем сообщение горизонтальной линией echo "<HR>"; } //Закрываем соединение с файлом fclose($f); ?> Код (Text): </body> </html> Файл обработки формы: PHP: <?php //Скрипт будет работать только при условии, что он //был запущен как обработчик формы, размещенной на guestbook.php if (isset($_POST['okbutton'])) { if ($_POST['name_of_guest']=='') exit("Введите имя! <a href='guestbook.php'>Назад</a>"); if ($_POST['message_of_guest']=='') { //А тут более распространенный вариант в два оператора echo "Введите текст сообщения! <a href='guestbook.php'>Назад</a>"; exit; } //Получаем значение поля Имя $name_of_guest=htmlspecialchars($_POST["name_of_guest"]); //Получаем значение поля Мысли $message_of_guest=htmlspecialchars($_POST["message_of_guest"]); if (filesize("gost.txt")>0) $first_message=FALSE; else $first_message=TRUE; //Открываем файл gost.txt для записи, //если файла нет, то он будет создан $f=fopen("gost.txt","at") or die("Не могу открыть файл"); //Блокируем файл, чтобы никто не мог к нему обратиться, //Пока мы с ним не закончим работу flock($f,2); //Записываем строку "---------------------------" //Если это первое сообщение, то без \n в начале, иначе с ним if ($first_message=TRUE) fputs($f,"--------------------------\n"); else fputs($f,"\n---------------------------\n"); //Записываем IP-адрес пользователя fputs($f,$_SERVER['REMOTE_ADDR']."\n"); //Записываем дату размещения сообщения fputs($f,date('d.m.y')."\n"); //Записываем имя fputs($f,$name_of_guest."\n"); //Записываем текст сообщения fputs($f,$message_of_guest); //снимаем блокировку flock($f,3); //закрываем файл fclose($f); } //Перенаправляем пользователя обратно на questbook.php header('location:guestbook.php'); ?>
36 строка обработка - убери =TRUE следи за пробелами в именах файлов!!! везде пробелы перед расширением
Ну да, 36-ая строка - строка обработки переменной $first_message, которая ранее (21-24 строчки кода файла обработки) уже была объявлена, что тут такого? нормальный сценарий. Естественно, стоит только убрать "=TRUE" в 36 строке кода (файл обработки), как в браузере выходит ошибка syntax error, ..... on line 37, что означает синтаксическую ошибку кода в строке 37. А за пробелы спасибо, не знал. Разобрался наконец-то) Проблема была в 48-ой строке листинга В оригинале: //Записываем текст сообщения PHP: fputs($f,$message_of_guest.); После доработки: //Записываем текст сообщения PHP: fputs($f,$message_of_guest."\n"); ..и надобность в переменной first_message полностью утрачивается, что позволит сократить код.