Неустранимая ошибка: необработанное исключение без блока try/catch

Я пытаюсь выдать исключение, когда поле формы пусто, а также, когда запрос вставки не выполнен. Я видел, как кто-то генерировал исключения раньше, без использования блоков try / catch и без включения класса Exceptions. Кто-нибудь знает, как мне поступить?

Это ошибка, которую я получаю, когда не заполняю все поля:

Неустранимая ошибка: необработанное исключение "Исключение" с сообщением "Ошибка: пустые поля: заголовок, номер телефона, электронная почта" в строке /vagrant/web/Assignment4/Person.php в строке 94 Исключение: ошибка: следующие поля пусты - Название, номер телефона, электронная почта, в /vagrant/web/Assignment4/Person.php на линии 94 Стек вызовов: 0,0014 638168 1. {main}() /vagrant/web/Assignment4/Form.php:0 0,0172 698568 2. Person->insert() /vagrant/web/Assignment4/Form.php:179

public function insert()
{

  //Storing required $_POST array fields in variable for isset function    
   $errorArray = array();   

   $expectedValues = array(
       "firstName"   => "First Name",
       "lastName"    => "Last Name",
       "title"       => "Title",
       "office"      => "Office",
       "phoneNumber" => "Phone Number",
       "email"       => "Email",
       );


   //Checking to see if all fields are filled in 

    foreach ($expectedValues as $field => $humanName) { 
       if (empty($_POST[$field])) { 
        $errorArray[] = $humanName . ", ";
       }
    }   

    if (count($errorArray) > 0) {
           throw new Exception("Error: The following fields are empty- " .implode(' ', $errorArray));
         }


    else{


       //If they are, insert them into the Perosn table    

               $insert = $this-> doQuery("INSERT INTO Person 
                                         VALUES(
                                        '$_POST[firstName]',
                                        '$_POST[lastName]',
                                        '$_POST[title]',
                                        '$_POST[office]',
                                        '$_POST[phoneNumber]',
                                        '$_POST[email]')");



         //If insert query is successful, return true 
            if ($insert === true){
                echo "<h2>" . "Congragulations! You now work for Assignment 4 Incorporated" . "</h2>";
                return true;
            }


         //If not, throw an exception    

          /*  else{
                throw new Exception
                ("<p>" . "Error: Query was unsuccessful:" . " " . $this->error . "</p>");
               }

               try{
                   $insert == true;
               }
               catch (Exception $x){
                   echo $x->getMessage;
               }      
   */
        }

   }

1 ответ

Решение

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

$errorArray = array();   

$expectedValues = array(
    "firstName"   => "First Name",
    "lastName"    => "Last Name",
    "title"       => "Title",
    "office"      => "Office",
    "phoneNumber" => "Phone Number",
    "email"       => "Email",
);

try{
    foreach ($expectedValues as $field => $humanName) { 
        if (empty($_POST[$field])) { 
            $errorArray[] = $humanName . ", ";
        }
    }   

    if (count($errorArray) > 0) {
        throw new Exception("Error: The following fields are empty- " .implode(' ', $errorArray));
    }else{
        $insert = $this-> doQuery("INSERT INTO Person 
            VALUES(
            '$_POST[firstName]',
            '$_POST[lastName]',
            '$_POST[title]',
            '$_POST[office]',
            '$_POST[phoneNumber]',
            '$_POST[email]')"
        );

        if ($insert === true){
            echo "<h2>" . "Congragulations! You now work for Assignment 4 Incorporated" . "</h2>";
            return true;
        }
    }
}catch(Exception $e){
    echo $e->getMessage();  
}

в своем коде вы выдавали ошибку еще до того, как пытались, хинтовал фатальную ошибку "необработанное исключение без блока try/catch". код поймал ошибку, но на самом деле ничего не пытался поймать.

Другие вопросы по тегам