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

Форум PHP

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

 

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

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

тема: Как обойти алгоритмические ограничения рнр?
 
 автор: Владимир55   (18.11.2006 в 23:02)   письмо автору
 
 

У многих языков программирования есть алгоритмообразующие команды типа “stop” и безусловный переход “jump-goto”. Похоже, что в свое время я так к ним привык, что иными средствами строить алгоритм не в силах. По крайней мере, вот две проблемы, которые я не могу решить операторами рнр.

1. Первый случай.
Производится сравнение двух переменных if ($x = $y)

Если это условие не выполняется, то надо продолжать дальнейшее выполнение скрипта.
Если это условие выполняется, то надо:
- echo «Ошибка»;
- stop (остановка скрипта)

2. Второй случай.
В файле 1.php выполняется форма ввода информации с клавиатуры. После осуществления ввода скрипт 1.php закрывается и управление передается обработчику insert.php

В файле insert.php производится сравнение двух переменных if ($x = $y)
Если это условие не выполняется, то надо продолжать дальнейшее выполнение скрипта.
Если это условие выполняется, то надо ввести информацию повторно с помощью формы ввода. Однако эта форма осталась в файле insert.php, на который надо сделать безусловный переход.

Я понимаю, что какое-то решение в рамках рнр существует, но не могу до него додуматься! Посоветуйте, как Вы решаете подобные проблемы?

   
 
 автор: Drago   (18.11.2006 в 23:20)   письмо автору
 
   для: Владимир55   (18.11.2006 в 23:02)
 

1. А функция exit() вам не подходит?

<?
...
if (
$x == $y) exit;
...
?>


2. Воспользуйтесь в файле insert.php функцией header(), сделав с ее помощью переадресацию на страницу с формой.
insert.php

<?
...
if (
$x == $yheader("Location: 1.php");
else {
/*дальнейшее выполнение скрипта*/}
...
?>

   
 
 автор: Владимир55   (18.11.2006 в 23:33)   письмо автору
 
   для: Drago   (18.11.2006 в 23:20)
 

То, что доктор прописал!

Спасибо большое!

   
 
 автор: cheops   (18.11.2006 в 23:24)   письмо автору
 
   для: Владимир55   (18.11.2006 в 23:02)
 

>Похоже, что в свое время я так к ним привык, что иными средствами строить алгоритм не в силах.
Через это проходят все - просто помните о фундаментальных работах Вирта (одни из корифеев программирования), который доказал, что любую программу можно построить без исользования goto. Любой изучающий современное программирование человек доказывает это сам себе (это требует усилий, но проходят через это все).

>1. Первый случай.
Для остановки скрита в PHP традиционно используют фунцию exit(), а для вывода сообщения echo
<?php
  
if($x != $y)
  {
     echo 
"Ошибка";
     exit();
  }
?>

однако можно и сократить код, так как функция exit() допускает аргумент, который будучи ей переданный выводится в окно браузера, т.е. приведённый выше код можно переписать
<?php
  
if($x != $y) exit("Ошибка");
?>

   
 
 автор: cheops   (18.11.2006 в 23:32)   письмо автору
 
   для: Владимир55   (18.11.2006 в 23:02)
 

>2. Второй случай.
А вы используйте один файл, в этом случае удобнее работать
<?php
  
if(!empty($_POST))
  {
    
// Если мы здесь, пользователь нажал на кнопку
    
if($x == $y)
    {
      
// $x и $y равны, выполняем своё чёрное дело 
      // и останавливаем скрипт
      
exit(); // Останавливаем скрипт - пользователь не увидит  формы
    
}
    
// Если мы тут $x и $y не равны - дальше выводится форма
  
}
?>
<form method=post>
<input type=text name=name>
<input type=submit value="OK">
</form>

Т.е. у вас здесь и обработчик и HTML-форма находятся в одном и том же файле, затем когда всё будет отлажено файл можно разбить на части, например, выделив обработчик в отдельный файл и включив его при помощи инструкции include().

   
 
 автор: Владимир55   (18.11.2006 в 23:40)   письмо автору
 
   для: cheops   (18.11.2006 в 23:32)
 

Это вообще конфетка!

Просто здорово! Вот спасибочки!

   
 
 автор: Temnovit   (19.11.2006 в 02:41)   письмо автору
 
   для: Владимир55   (18.11.2006 в 23:40)
 

Попробуйте научиться использовать исключения. Вот это настоящая конфетка :)
На мой взгляд совершенне механизма для обработки ошибок врядли можно придумать.

   
Rambler's Top100
вверх

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