2016-05-19 3 views
0

У меня есть следующий код с базовыми условиями проверки, который используется для фильтрации данных с использованием mysql и php.Можно попробовать и уловить высказывания, которые должны быть записаны внутри пользовательской функции php

У меня есть две процедуры, названные proc_report и proc_report_filtered тот, который получает все данные и один, который отображает данные на основе от и фильтров, установленных в форме. (submit_filter этого имя кнопки, подать от и в два поля ввода в форме.)

Ранее код, используемый для работы и отображать все данные, когда попытаться поймать заявление написано на месте of display_default_data(); в других разделах. Но для сокращения кода я использовал функцию display_default_data(), чтобы избежать повторной записи одного и того же фрагмента кода снова и снова. Но удивительно, когда я запускаю этот код, я не вижу никаких результатов.

<?php 
    function display_default_data() 
    { 
     try { 
      $records = $db->query("call proc_report"); 
      $records->setFetchMode(PDO::FETCH_ASSOC); 
     } catch (PDOException $e) { 
      die("Some problem getting data from database !!!" . $e->getMessage()); 
     } 
    } 

    if (isset($_POST['submit_filter'])) { 
     if (isset($_POST['from'], $_POST['to'])) { 
      if (!empty($_POST['from']) && !empty($_POST['to'])) { 
       try { 
        $from = $_POST['from']; 
        $to = $_POST['to']; 
        $records = $db->prepare("CALL proc_report_filtered(?,?)"); 
        $records->execute(array($from, $to)); 
       } catch (PDOException $e) { 
        die("Some problem getting data from database !!!" . $e->getMessage()); 
       } 
      } else { 
       echo "Enter some values before pressing Filter button !"; 
       display_default_data(); 
      } 
     } else { 
      echo "Please set values "; 
      display_default_data(); 
     } 
    } else { 
     display_default_data(); 
    } 
?> 

Является ли это способом записи функций и попыток, уловить утверждения в php? Пожалуйста, предложите мне, если что-то не так.

Также я чувствую, что код довольно длинный? Какие-нибудь лучшие предложения по его сокращению?

ответ

1

Можно попробовать и уловить утверждения, написанные внутри пользовательской функции php?

Да.

Является ли это способом записи функций и попыток, catch-заявления в php?

NO. You should never catch an error exception to report it. Просто оставьте PDOExceptions в покое.

Также я чувствую, что код довольно длинный?

Ужасно длинный. Весь код, который вам нужен, это всего лишь

<?php 
if (!empty($_POST['from']) && !empty($_POST['to'])) { 
    $records = $db->prepare("CALL proc_report_filtered(?,?)"); 
    $records->execute(array($_POST['from'], $_POST['to'])); 
} else { 
    $records = $db->query("call proc_report"); 
} 
// here you can start displaying your records. 
+0

Он выглядит компактным, но arent нам не хватает, чтобы проверить, нажаты ли переменные isset и кнопка отправки (isset submit_filter в моем случае) –

+0

Нет, мы не являемся. Назовите единственную причину, по которой нам нужны эти проверки. –

+0

Я использовал isset с submit_filter, чтобы проверить, нажата ли кнопка. Так как нам нужно выполнить код только при нажатии кнопки. Также isset проверить, установлены ли значения from и to или нет. Код, который вы предложили, но я хотел бы знать, почему isset не используется. В учебных пособиях я видел, как люди используют его и говорят, что хорошая практика - использовать и isset, а не пустую. Не могли бы вы объяснить важность isset? Также последний вопрос. Вы также пропустили ($ records-> setFetchMode (PDO :: FETCH_ASSOC);) не требуется упоминать fetchmode каждый раз? –

0

Это не имеет никакого отношения к try/catch. Вместо этого проблема заключается в том, что вы используете $records в своей функции за пределами ее области.

Поскольку вы только писать к нему в любом случае, вы можете просто возвращение значение и присвоить его переменной на сайте вызывающего абонента:

function display_default_data() 
{ 
    try { 
     $records = $db->query("call proc_report"); 
     $records->setFetchMode(PDO::FETCH_ASSOC); 
     return $records; 
    } catch (PDOException $e) { 
     die("Some problem getting data from database !!!" . $e->getMessage()); 
    } 
} 

/* ... */ 

$records = display_default_data(); // instead of just display_default_data(); 

Обратите внимание, что $recordsвнутри из display_default_data а $recordsза пределами - это две разные переменные, которые имеют одно и то же (локальное) имя.

+0

Я попытался вернуть $ records в display_default_data() и собирая его в $ records снаружи, как вы предложили. Но все же код не работает. –

+0

Что именно не работает?Попробуйте помещать 'die' с некоторым сообщением в разных местах, возможно, с' var_dump' некоторой переменной, прежде чем отлаживать ваш код и видеть, где код принимает непреднамеренный путь. – CherryDT

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