2015-05-05 1 views
0

Я пишу веб-страницу, которая ищет в таблице и отображает данные, если все хорошо, и сообщение, если нет. Код выглядит примерно так:php: как продолжить выполнение после выхода из сценария php

<?php session_start(); ?> 
<html><head> ..... </head> 
    <body> 
     <form action="search.php" method="post"> {parameters for searching} </form 
     <?php include_once('display_results.php');?> 
     <?php if (isset($_SESSION['message'])) { 
        echo "<script type=\"text/javascript\">alert(\"".$_SESSION['message']."\")</script>"; 
        unset($_SESSION['message']); 
       } ?> 
    </body> 
</html> 

display_results.php выглядит следующим образом:

<?php 
    //query table get results build output and if there was an error call do_exit($message) 

function do_exit($message) { 
    //unset objects close connections and misc finalizations 
    $_SESSION['message'] = $message; 
    die(); 
} 

Моя проблема заключается в том, что, когда умирают() называется, кажется, что не только делает display_results.php сценарий останавливается, но также и исходный файл php, поэтому, несмотря на то, что сообщение установлено, оповещения нет. С другой стороны, если я удаляю оператор die(), и после каждого выполнения do_exit() я выполняю возврат, это работает правильно.

Теперь это не огромная проблема, я могу просто сделать так, чтобы я вызывал return после каждого do_exit(), но я блуждал, если был способ выйти из сценария, но продолжить выполнение исходного php файл

Заранее благодарим за любую помощь, которую вы можете предоставить.

+1

0 Возврат вместо die –

+1

'die - синоним для выхода' и' exit - вывод сообщения и завершение текущего скрипта' Делает то, что он говорит на банке, ключевым словом является __terminate __.... script! == file , script === request –

+0

Чтобы * включить *, php-файл в основном такой же, как размещение содержимого этих файлов в месте оператора ** ** (не функция, отбросьте фигурные скобки!). Поэтому вы не должны думать о отдельных файлах как о отдельных сценариях. Это еще один большой скрипт, который вы завершаете. – Yoshi

ответ

1

Почему вы не используете return false; в конце своего function do_exit()?

+0

, потому что return false; будет работать над функцией do_exit и вернуть выполнение в обычный поток, то есть выполнить оставшуюся часть display_results.php, я хочу остановить этот сценарий от продолжения и выполнить оставшуюся часть скрипта, который его назвал – Cruces

+0

@Cruces, что вы пытаясь сделать? Если вы хотите показывать сообщения об ошибках, если какой-то код/​​запрос идет не так, почему вы не используете try-catch? –

2

Зачем вам это нужно? Просто выйдите из функции правильно (с возвратом). Можно было бы сделать: return do_exit(); и заменить die() в вашей функции do_exist() с return; или return false; (если вы хотите вернуть значение).

die() (или exit()) всегда завершает выполнение скрипта, а не только выполнение одного файла сценария или функции, что было бы бесполезно.

+0

да, но возврат внутрь do_exit() просто вернется из функции do_exit, я хочу остановить скрипт и продолжить выполнение предыдущего скрипта; – Cruces

+0

Вы выполняете только скрипт _one_ :) Вы не можете закончить выполнение файла, вам всегда нужно прекратить выполнение функции, структуры цикла или скрипта. – Florian

+0

oh, так что, когда страница отображается, скрипт display_results становится частью моего оригинального, потому что я включил его, да, я должен был знать, что я думаю :) , но не существует способа сделать что-то вроде break 2 который ломает 2 петли вверх, с возвращением? – Cruces

0

Вам вообще не нужно называть die(). Просто позвольте сценарию прийти к естественному окончанию. Я предполагаю, что вы возвращаете результаты с помощью выражений эха или печати. Если вам нужна производительность, вы можете закрыть сеанс, чтобы на нем могли работать другие вызовы.

+0

Я не могу позволить сценарию продолжить, потому что, как вы сказали, я использую эхо, чтобы распечатать таблицу с результатами (которая без данных просто показывает заголовок и пустую строку), я хочу остановить display_result.php в точке проблемы (т. е. результат не возвращается из запроса, не подключается к серверу и т. д.) и продолжайте с родителем (чтобы можно было показать предупреждение с ошибкой Кстати, что вы имели в виду «Если вам нужна производительность, вы можете закрыть сеанс, чтобы другие вызовы могли работать на нем», можете ли вы объяснить это, я новичок в php, поэтому я не совсем понял его. – Cruces

+0

Я думаю, что вся ваша структура кода не представляет, что PHP может сделать. Если вы хотите организовать свой код, используйте объект, классы и функции. Например, напишите свой код display_result.php в собственный класс/функцию и запустите только эту функцию, если есть результаты return ed из вашего объекта, получающего результат, который использовал ваш объект базы данных для получения результатов. – Florian

+0

Ahh теперь я понимаю вашу проблему. Вы должны вернуть сообщение об ошибке как часть возвращаемого значения и проанализировать его на клиенте. Обычно возвращается код ошибки с сообщением, например. echo '{"E": {"eCode": 99, "eText": "Проблема"}}'. Затем вы проверяете значение данных, возвращаемое в javascript в клиенте. Для этого вам нужно написать код в клиенте. –

Смежные вопросы