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

Форум PHP

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

 

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

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

тема: помогите разобраться как работает скрипт
 
 автор: Slo_Nik   (15.10.2009 в 17:47)   письмо автору
 
 

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

<?php
 get_location
();
//переменная $includ формирующая саму форму
   
list ($file,$add,$design,$INCLUD,$error404,$turl)=array(
      
"./data/content/$action.php",
      
"./data/tpl/add.php",
      
"./data/tpl/design.php",
   
"./comments/index.php",// путь к моему файлу с формой
     

// и далее для вывода формы на странице
if(file_exists($includ)) include $includ;
// всё, форма появилась
?>

в файле desing.php моя форма подключается так:

<?php
$content
=<<<EOF
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<html>
<head>
// далее остальной html код
................................................
 <div id="content">
$content<br>$INCLUD</div> // вывод формы
..................................................
// продолжение html кода 
// и завершение файла
</body>
</html>
EOF;
?>

для самой формы я создал отдельный файл в отдельной директории
скрипт с формой :

<?php
// обработчик формы
$error = array();
 if(isset(
$_POST['sub'])){
   
// проверяем корректность заполнения формы
  
if(empty($_POST['name'])) $error[] = "нет имени";
  if(empty(
$_POST['email'])) $error[] = "нет адреса";
  
// продолжаем проверять остальные поля
  
if(empty($error)){
  
// если массив с ошибками пустой, передаём данные в базу
  
}
}
// если массив с ошибками не пустой, то надо вывести сообщение пользователю
if(!empty($error)){
 foreach(
$error as $err)
 
$err
}
// сама форма
$includ=<<<EOF
<form action="index.php" method="post">
Ваше имя :<br>
<input type="text" name="name" size="54"><br>
E-mail :<br>
<input type="text" name="email" size="54"><br>
Текст комментария :<br>
<textarea cols="40" rows="7" name="text"></textarea><br><br>
<input type="submit" name="sub" value="Добавить комментарий">
</form>
EOF;
?>

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

<?php
if(!empty($error)){
 foreach(
$error as $err)
  echo 
$err
}
?>

если выводить сообщение через echo, то они появятся вверху всей станицы, а если попробовать присвоить какой то переменной значение $err или попробовать её саму вывести в файле index.php , то будет выводится только последний элемент массива, но как раз там где надо, над формой.
по идее, вывод сообщений об ошибка должен быть такой же как и самой формы, через какую то переменную
что то типа этого.

<?php
// в файле index.php
if(file_exists($err)) include $err;
// в файле desing.php 
<div id="content">$content<br>$ERR<br>$includ</div>
?>

а вот как её сформировать не могу понять.
очень надеюсь на помошь форумчан
заранее благодарю
p.s. имена переменных $includ и $err в сообщении специально писал большими буквами, в скриптах они прописаны маленькими.

  Ответить  
 
 автор: zavragnov   (15.10.2009 в 17:52)   письмо автору
 
   для: Slo_Nik   (15.10.2009 в 17:47)
 

Попробуйте так, если я правильно понял, что вы просите


<?php
if(!empty($error)){
 foreach(
$error as $err)
 
$err_mess[]= $err;
}
?>


// в файле desing.php
<div id="content">$content<br>implode("<br>",$err_mess)<br>$includ</div>

  Ответить  
 
 автор: Slo_Nik   (15.10.2009 в 18:14)   письмо автору
 
   для: zavragnov   (15.10.2009 в 17:52)
 

не помогло.
в файле desing.php используется оператор "<<<" и внутри него код не выполняется, получается, что надо всё присвоить какой то переменной, а уж потом вставлять её в файл desing.php

  Ответить  
 
 автор: Волки   (15.10.2009 в 18:26)   письмо автору
 
   для: Slo_Nik   (15.10.2009 в 18:14)
 

Вы сформирвали массив ошибок, теперь его надо собрать воедино, как вариант можно попробовать
$x = ( count(error) ) ? implode("<br>",$error) : '';
$includ=<<<EOF 
$x
<form ...

  Ответить  
 
 автор: Slo_Nik   (15.10.2009 в 18:37)   письмо автору
 
   для: Волки   (15.10.2009 в 18:26)
 

спасибо, Ваша подсказда помогла, теперь всё работает.

  Ответить  
 
 автор: Slo_Nik   (15.10.2009 в 22:23)   письмо автору
 
   для: Slo_Nik   (15.10.2009 в 17:47)
 

Опять потребовалась помощь форумчан, теперь уже с выводом самих комментариев.
создал отдельный файл для вывода комментарие, но опять же выводится только один.
вот содержание файла:

<?php
require_once("config/connect.php");
$query "SELECT * FROM `comments` ORDER BY `data`";
 
$comm mysql_query($query);
  if(!
$comm) echo "Ошибка при обращении к таблице комментариев<br><b>".mysql_error()."</b>";
   if(
mysql_num_rows($comm) > 0){
    while(
$comm_all mysql_fetch_assoc($comm)){
    
$text "<div id='comm'>автор :".$comm_all['author']."<br>добавлено : ".$comm_all['data']." | e-mail : ".$comm_all['email']."<br>".$comm_all['text']."</div>";
$view=<<<EOF
Комментарии
<hr>
$text
EOF;
    }
   }
?>

подключал я его к общей куче как и файл с формой

<?php
// в файле index.php
// переменная $view
list ($file,$add,$design,$VIEW,$includ,$error404,$turl)=array(
............................................................
"./comments/view.php",
...........................................................
);
if(
file_exists($view)) include $view;

// в файле desing.php
<div id="content">$content<br>$VIEW<br>$includ</div>
?>

но как я ни крутил, выводится только один комментарий.
если обратиться к файлу view.php на прямую, заменив $view= на просто print, то выводятся все комметарии.
пожалуйста, объясните, в чём моя ошибка?

  Ответить  
 
 автор: Slo_Nik   (16.10.2009 в 01:36)   письмо автору
 
   для: Slo_Nik   (15.10.2009 в 22:23)
 

ну хоть намекните как это сделать

  Ответить  
 
 автор: Николай2357   (16.10.2009 в 02:27)   письмо автору
 
   для: Slo_Nik   (16.10.2009 в 01:36)
 

<?
$view 
.=

  Ответить  
 
 автор: Trianon   (16.10.2009 в 08:29)   письмо автору
 
   для: Николай2357   (16.10.2009 в 02:27)
 

не view

text

  Ответить  
 
 автор: Slo_Nik   (16.10.2009 в 08:55)   письмо автору
 
   для: Trianon   (16.10.2009 в 08:29)
 

почему $text?

  Ответить  
 
 автор: Trianon   (16.10.2009 в 10:00)   письмо автору
 
   для: Slo_Nik   (16.10.2009 в 08:55)
 

приведите реплику 15.10.2009 в 22:23 в порядок.
В теме невозможно отвечать.

  Ответить  
 
 автор: Slo_Nik   (16.10.2009 в 13:08)   письмо автору
 
   для: Trianon   (16.10.2009 в 10:00)
 

а что в этой реплике не так?

  Ответить  
 
 автор: Trianon   (16.10.2009 в 13:24)   письмо автору
 
   для: Slo_Nik   (16.10.2009 в 13:08)
 

Слишком длинные строки кода вызывают горизонтальный скроллинг.

  Ответить  
 
 автор: Slo_Nik   (16.10.2009 в 13:28)   письмо автору
 
   для: Trianon   (16.10.2009 в 13:24)
 

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

  Ответить  
 
 автор: Николай2357   (16.10.2009 в 10:18)   письмо автору
 
   для: Trianon   (16.10.2009 в 08:29)
 

>не view

text

Согласен, её и определить было бы не плохо еще. Но просили только намекнуть. :)

  Ответить  
 
 автор: Slo_Nik   (16.10.2009 в 13:26)   письмо автору
 
   для: Trianon   (16.10.2009 в 08:29)
 

последовал Вашему совету - всё заработало, спасибо, но вот только не совсем понял почему именно так. если не сложно - объясните.

  Ответить  
 
 автор: Slo_Nik   (16.10.2009 в 08:52)   письмо автору
 
   для: Николай2357   (16.10.2009 в 02:27)
 

спасибо, почти заработало.
выводит все комментарии, но в самом верху, над комментариями, появляется строка "./comments/view.php".

  Ответить  
Rambler's Top100
вверх

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