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

Форум PHP

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

 

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

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

тема: Перейти на новую страницу
 
 автор: nytrogen   (14.08.2008 в 17:33)   письмо автору
 
 

Доброе время суток.


Помогите начинающему PHP-программисту решить следующую простую задачу.

На странице form.php содержится формуляр, после заполнения которого пользователю предъявляется сгенерированный счет.

В form.php я использую <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method=POST>, так как сообщения о неверно заполненных полях появляются в том же окне.

Если же все поля заполнены верно, то необходимо перейти к generateInvoice.php. Как организовать этот переход?

  Ответить  
 
 автор: sim5   (14.08.2008 в 17:54)   письмо автору
 
   для: nytrogen   (14.08.2008 в 17:33)
 

Просто проверяете, если ошибок нет, то:
<?
header
("location: generateInvoice.php");
?>

  Ответить  
 
 автор: Nytrogen   (14.08.2008 в 18:17)   письмо автору
 
   для: sim5   (14.08.2008 в 17:54)
 

На новую страницу переходит, но значения из формы form.php не передаются.

Переход:
<?php
  header
("location: answer.php");
?> 


answer.php:
<?php
  
echo $_POST['name'];
?>


Ничего не выводит.

  Ответить  
 
 автор: Trianon   (14.08.2008 в 18:30)   письмо автору
 
   для: Nytrogen   (14.08.2008 в 18:17)
 

Значения Вы уже приняли и сохранили на предыдущей странице.

  Ответить  
 
 автор: Nytrogen   (14.08.2008 в 18:37)   письмо автору
 
   для: Trianon   (14.08.2008 в 18:30)
 

Эм... стесняюсь спросить, а как тогда их вывести на экран в answer.php?

  Ответить  
 
 автор: Trianon   (14.08.2008 в 19:05)   письмо автору
 
   для: Nytrogen   (14.08.2008 в 18:37)
 

взять оттуда, куда сохранили, и вывести.

  Ответить  
 
 автор: Nytrogen   (14.08.2008 в 19:48)   письмо автору
 
   для: Trianon   (14.08.2008 в 19:05)
 

Я сам ненавижу, когда пристают с глупыми вопросами, но взять оттуда, куда сохранили, и вывести?
Замечу, что я с PHP знаком три дня, поэтому, думаю, Вы меня простите за "спам" :)

  Ответить  
 
 автор: sim5   (14.08.2008 в 19:59)   письмо автору
 
   для: Nytrogen   (14.08.2008 в 19:48)
 

>На странице form.php содержится формуляр,
>после заполнения которого пользователю предъявляется сгенерированный счет

Этот счет, что у вас так и будет в воздухе болтаться? Что значит сгенерированный? Что за информация о пользователе: ФИО, адрес, заказ и т.п.? Если это покупка в магазине, то значит информация о пользователе и параметров его заказа вам еще потребуется, следовательно вы ее должны сохранить в базе. Вот по переходу на страницу генерации, получайте эти данные о пользователе, его заказе т.п. из базы и герерируйте свой счет.

  Ответить  
 
 автор: Nytrogen   (14.08.2008 в 20:19)   письмо автору
 
   для: sim5   (14.08.2008 в 19:59)
 

Понятно, спасибо, просто в моем представлении я вижу это примерно так:

1) Пользователь заполняет форму (имя, фамилия и пр.) в form.php и нажимает на кнопку Submit.
2) Форма проверяется. Если есть ошибки, то снова переходим к form.php, где вылезают красные буквы "Ошибка ввода".
Если ошибок нет, переходим к generateInvoice.php вместе со всеми значениями (именем, фамилией и пр.) и выводим каким-то образом эти значения в браузер (что я и называл "генерация счета").

Насколько я понял, должно быть вот так:
1) Пользователь заполняет форму в generateInvoice.php и нажимает на кнопку Submit.
2) Форма проверяется. Если есть ошибки, то снова переходим к generateInvoice.php, где теперь написано "Ошибка ввода".
Если ошибок нет, то вместо формы появляется другой HTML+PHP код, который мне необходим (счет).

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

  Ответить  
 
 автор: sim5   (14.08.2008 в 20:44)   письмо автору
 
   для: Nytrogen   (14.08.2008 в 20:19)
 

Вы что хотите сделать - динамический вывод результата ввода пользователем, или просто показать результат ввода данных? Переход позволит избежать повторного отправления формы по F5 в браузере, и если пользователь ввел данные верно, зачем ему форма еще?

  Ответить  
 
 автор: Nytrogen   (14.08.2008 в 20:49)   письмо автору
 
   для: sim5   (14.08.2008 в 20:44)
 

Я могу просто задать action=generateInvoice.php, но если пользователь что-то неверно ввёл?

  Ответить  
 
 автор: sim5   (14.08.2008 в 21:00)   письмо автору
 
   для: Nytrogen   (14.08.2008 в 20:49)
 

Вы бы лучше, для начала, приоткрыли завесу "секретности" и сказали, что вы хотите сделать, что это такое будет? Заказ товара?
Можно вообще не переходить на другую страницу, все сделать на одной, и переход делать внутри самой страницы, после удачного заполнения формы, и только ради того, чтобы сбросить POST данные.

  Ответить  
 
 автор: Nytrogen   (14.08.2008 в 21:08)   письмо автору
 
   для: sim5   (14.08.2008 в 21:00)
 

Докладываю секретную информацию. На примитивном уровне задача выглядит так:

Введи имя. Ввёл неверно? Ты ввёл неверно! Введи имя. Ввёл неверно? Ты ввёл неверно! Введи имя. Ввёл верно? Ура! Вот твоё имя на весь экран!

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

  Ответить  
 
 автор: sim5   (14.08.2008 в 21:17)   письмо автору
 
   для: Nytrogen   (14.08.2008 в 21:08)
 


<?php 
session_start
();
if (
$_POST['sent']) {
//.....
} else { 
  
$_SESSION['name'] = $_POST['name'];
  
$_SESSION['surname'] = $_POST['surname'];
  
header("location: answer.php"); 
}
?>

Файл answer.php:
<?php
session_start
();
echo 
$_SESSION['name'] ." "$_SESSION['surname'] . ", бальшой приветик!";
?>

  Ответить  
 
 автор: Nytrogen   (14.08.2008 в 21:38)   письмо автору
 
   для: sim5   (14.08.2008 в 21:17)
 

УРА!!! СПАСИБО!!!

  Ответить  
 
 автор: Trianon   (14.08.2008 в 20:06)   письмо автору
 
   для: Nytrogen   (14.08.2008 в 19:48)
 

<?php
  header
("location: answer.php");
?> 

В этом файле у Вас же что-то было кроме перехода?

  Ответить  
 
 автор: Nytrogen   (14.08.2008 в 20:27)   письмо автору
 
   для: Trianon   (14.08.2008 в 20:06)
 

Конечно, в этом файле описана вся моя форма:

<?php
if ($_POST['sent']) {
  
$isError false;
  if (!
$_POST['name']) {
    
$isError true;
    echo 
"Введите имя!<br>";
  }
  if (!
$_POST['surname']) {
    
$isError true;
    echo 
"Введите фамилию!<br>";
  }

  
//...

  
if ($isError) {
    unset(
$_POST['sent']);
    echo 
"<br>";
  }
}

if (!
$_POST['sent']) {
    
?>

    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method=POST>
      <input type=hidden name=sent value=1>
      <table>
        <tr>
          <td>Введите имя:</td>
          <td><input type=text name="name" value="<?php echo $_POST['name']; ?>"></td>
        </tr>
        <tr>
          <td>Введите фамилию:</td>
          <td><input type=text name="surname" value="<?php echo $_POST['surname']; ?>"></td>
        </tr>

        <!--...-->

        <tr>
          <td colspan=2 align=center><input type=submit value="Отправить"><input type=reset 

value="Сброс"></td>
        </tr>
      </table>
    </form>

    <?php
} else {
  
header("location: answer.php");
}
?>

  Ответить  
 
 автор: sim5   (14.08.2008 в 20:40)   письмо автору
 
   для: Nytrogen   (14.08.2008 в 20:27)
 


<?
....
} else { 
  
//пишем данные формы в базу
  //или, если это несколько полей
  //необъемных данных,
  //то можно в сессию 
  
header("location: answer.php");
  
//а в файле answer.php
  //получаем эти данные и ... 
}
?>

  Ответить  
 
 автор: Nytrogen   (14.08.2008 в 20:56)   письмо автору
 
   для: sim5   (14.08.2008 в 20:40)
 

Я знаю, что всех замучал, но все же расскажите поподробней о записе в сессию или базу. Чувствую, это как раз то, что мне и нужно.

  Ответить  
 
 автор: Trianon   (14.08.2008 в 21:04)   письмо автору
 
   для: Nytrogen   (14.08.2008 в 20:56)
 

Переход на новую страницу здесь совсем не при чем.
Тему отдельную создайте.
И сформулируйте, что хотите узнать.

  Ответить  
 
 автор: Trianon   (14.08.2008 в 20:55)   письмо автору
 
   для: Nytrogen   (14.08.2008 в 20:27)
 

Вот перед вызовом header() введенные и проверенные данные Вы должны были сохранить где-то на сервере.

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

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