Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
Algoritmer
155 / 95 / 24
Регистрация: 07.03.2013
Сообщений: 490
Записей в блоге: 1
1

Не работает try catch

03.01.2015, 13:57. Просмотров 2777. Ответов 10
Метки нет (Все метки)

Вот мой код
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
 <?php
    /* Соединяемся, выбираем базу данных */
    //$link = mysql_connect("mysql_host", "mysql_user", "mysql_password")
$link = mysql_connect("localhost", "root", "")
        or die("Could not connect : " . mysql_error());
    print "Connected successfully";
    mysql_select_db("myForum") or die("Could not select database");
    try
    {if($_REQUEST['uName'])
    {
      $ins_query="insert into authors(name,passw,email) values('".
      $_REQUEST['uName']."','".$_REQUEST['uPassw']."','".$_REQUEST['uEmail']."')";
      mysql_query($ins_query) or die("ins Query failed : " . mysql_error());
    }
    }
catch (Exception $e){}
     
    /* Выполняем SQL-запрос */
    $query = "SELECT * FROM authors";
    $result = mysql_query($query) or die("Query failed : " . mysql_error());
 
    /* Выводим результаты в html */
    print "<table>\n";
    while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
        print "\t<tr>\n";
        foreach ($line as $col_value) {
            print "\t\t<td>$col_value</td>\n";
        }
        print "\t</tr>\n";
    }
    print "</table>\n";
 
    /* Освобождаем память от результата */
    mysql_free_result($result);
    
    /* Закрываем соединение */
    mysql_close($link);
?> 
 <form method="post" action="mySqlw.php">
    <table>
     <tr><td>Имя</td><td>Пароль</td><td>Email</td></tr>
    <tr><td><input type="text" name="uName" size="10"></td>
     <td><input type="text" name="uPassw" size="10"></td>
     <td><input type="text" name="uEmail" size="10"></td>
    </tr>
    
      <tr><td><input type="submit" name="b1" value="Добавить"></td></tr>
    </table>
</form>
Собственно по нажатию на кнопку "добавить" страница вызывает (или как там правильно в терминологии, поправьте если что) сама себя...
Далее в верху в блоке try проверятся перемнная uName. Если страница вызвала саму сбя то в таблицу БД добавиться строка, но если мы пришли с другой страницы, то эти параметры вообщ не будут существовать и возникает исключение, но try catch его почему-то не ловит, и я вижу на странице: "Notice: Undefined index: uName in /home/tserg/web/supersite.com/www/mySqlw.php on line 9"
Версия РНР 5.6
Подскажите, в чём загвоздка?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.01.2015, 13:57
Ответы с готовыми решениями:

Try.catch не работает
Здравствуйте! Пытаюсь понять как работает try..catch..finnaly, вроде всё...

Try catch не работает
Привет, есть такой код try { $len = strlen($User); } catch...

File_get_contents try catch
Здравствуйте, подскажите пожалуйста, 2 проблемы с file_get_contents 1....

try catch без if
Если в связанной таблице есть сирота, то например такой код $row =...

Сравнивание чисел с try catch
&lt;form method=&quot;post&quot; action=&quot;&lt;?=$_SERVER?&gt;&quot;&gt; a:&lt;input type=&quot;text&quot;...

10
pav1uxa
1857 / 1711 / 802
Регистрация: 23.01.2014
Сообщений: 6,082
Завершенные тесты: 1
03.01.2015, 17:14 2
Лучший ответ Сообщение было отмечено Algoritmer как решение

Решение

Цитата Сообщение от Algoritmer Посмотреть сообщение
Подскажите, в чём загвоздка?
Исключение вызывается оператором throw. В Вашем коде я ни одного такого не вижу.
Цитата Сообщение от Algoritmer Посмотреть сообщение
try
* * {if($_REQUEST['uName'])
* * {
* * * $ins_query="insert into authors(name,passw,email) values('".
* * * $_REQUEST['uName']."','".$_REQUEST['uPassw']."','".$_REQUEST['uEmail']."')";
* * * mysql_query($ins_query) or die("ins Query failed : " . mysql_error());
* * }
* * }
catch (Exception $e){}
Правильней будет так:
PHP
1
2
3
4
if (isset($_REQUEST['uName']))
{
    //...
}
1
Algoritmer
155 / 95 / 24
Регистрация: 07.03.2013
Сообщений: 490
Записей в блоге: 1
03.01.2015, 23:07  [ТС] 3
pav1uxa, спасибо. Вы решили мою проблему, хотя не так, как я предполагал.
Но все-таки, по поводу try catch. Возможно я не совсем правильно выразился в плане исключений, но имел в виду я вот что. Если к примеру на Delphi есть такой код:
Delphi
1
for i:=0 to 10 do k:=k+1/(i-1);
В этом случае при i=1 возникает ошибка деления на 0. Но если добавить:
Delphi
1
2
3
4
5
for i:=0 to 10 do
try
   k:=k+1/(i-1);
except
end;
то код нормально отработает и ошибку не выдаст.
В случае с моим РНР кодом, строка
PHP
1
$_REQUEST['uName']
вызывает ошибку.
Я заключил блок, содержащий её в try catch, но всё равно вижу ошибку! Почему?
0
ads
365 / 372 / 89
Регистрация: 01.12.2013
Сообщений: 1,629
03.01.2015, 23:19 4
Цитата Сообщение от Algoritmer Посмотреть сообщение
но try catch его почему-то не ловит,
и не бeдет ловить. проверяйте существование переменной функцией isset
0
Algoritmer
155 / 95 / 24
Регистрация: 07.03.2013
Сообщений: 490
Записей в блоге: 1
03.01.2015, 23:40  [ТС] 5
ads, по поводу isset я понял. Просто у меня теперь другой вопрос: зачем вообще тогда нужен try catch.
Просто до этого я писал на языках: С++, Delphi, 1C, java... так вот, в них try catch (или try except, в зависимости от языка) ловит всё, независимо от того, деление это на 0, или невозможная конвертация строки, или вызов несуществующей системной ф-ции, или выход за пределы массива.
Поэтому такое поведение РНР меня слегка удивляет. Буду признателен, если уточните, в каких случаях в РНР применим try catch
0
pav1uxa
1857 / 1711 / 802
Регистрация: 23.01.2014
Сообщений: 6,082
Завершенные тесты: 1
04.01.2015, 01:29 6
Лучший ответ Сообщение было отмечено Algoritmer как решение

Решение

Цитата Сообщение от Algoritmer Посмотреть сообщение
Просто до этого я писал на языках: С++, Delphi, 1C, java... так вот, в них try catch (или try except, в зависимости от языка) ловит всё, независимо от того, деление это на 0, или невозможная конвертация строки, или вызов несуществующей системной ф-ции, или выход за пределы массива.
Поэтому такое поведение РНР меня слегка удивляет. Буду признателен, если уточните, в каких случаях в РНР применим try catch
Вы что-то путаете. Хотите сказать, если Вы несуществующую переменную в c++ засунете в конструкцию try catch и попытаетесь к ней обратиться, у Вас вылезет исключение? Да нет. У Вас программа даже не скомпилируется Так же и тут. Просто php это интерпретируемый язык, он интерпретирует язык по ходу скрипта, и, если ошибки не критичные, выводит подобные предупреждения и выполняется.

И я еще раз повторюсь, try catch отлавливает исключения. Если исключений нет, ловить нечего. Ошибки в коде и исключения это вещи разные. И это не к php относится, так во всех языках. Просто Вы, скорее всего, используете фреймворки, в которых данные исключения реализованы, поэтому там есть возможность использовать try catch. Чистый c++ никаких исключений при делении на 0 не выведет, это runtime error. Другое дело Visual C++ с его .NET Framework...
1
ads
365 / 372 / 89
Регистрация: 01.12.2013
Сообщений: 1,629
04.01.2015, 10:27 7
Лучший ответ Сообщение было отмечено Algoritmer как решение

Решение

Algoritmer, catch ловит ошибки брошенные с помощью throw. для ловли фатальных ошибок в рантайме можете зарегистрировать свою функцию-обработчик ошибок с помощью register_shutdown_function... кстати проверка деления на ноль обязанность программиста.. вроде как азы..
1
tolimadokara
04.01.2015, 12:41
  #8

Не по теме:

Уважаемые форумчане, а что такое в php операторы catch, try, throw? Что эти операторы делают? Сколько на php программирую о них вообще ничего не знаю :pardon:

0
pav1uxa
04.01.2015, 15:21
  #9

Не по теме:

Цитата Сообщение от tolimadokara Посмотреть сообщение
Уважаемые форумчане, а что такое в php операторы catch, try, throw? Что эти операторы делают? Сколько на php программирую о них вообще ничего не знаю
То же что и в других ЯП. "Столько" программируете и не научились пользоваться поиском? :)

Если вопрос задан в шутку, то какая-то она странная получилась :scratch:

0
tolimadokara
04.01.2015, 16:26
  #10

Не по теме:

Цитата Сообщение от pav1uxa
То же что и в других ЯП.
Да вообще не знаю, и из других ЯП тоже. Только два языка не много знаю.
Цитата Сообщение от pav1uxa
"Столько" программируете и не научились пользоваться поиском? :)
Хочется получить ответ от человека. Краткий и понятный. А не от поисковой системы.
Цитата Сообщение от pav1uxa
Если вопрос задан в шутку, то какая-то она странная получилась :scratch:
Да нет. Я не в шутку задал вопрос. В серьезе.

0
Algoritmer
155 / 95 / 24
Регистрация: 07.03.2013
Сообщений: 490
Записей в блоге: 1
05.01.2015, 23:51  [ТС] 11
Цитата Сообщение от pav1uxa Посмотреть сообщение
Хотите сказать, если Вы несуществующую переменную в c++ засунете в конструкцию try catch и попытаетесь к ней обратиться, у Вас вылезет исключение? Да нет. У Вас программа даже не скомпилируется Так же и тут.
Вот так уже понятней.
Цитата Сообщение от ads Посмотреть сообщение
для ловли фатальных ошибок в рантайме можете зарегистрировать свою функцию-обработчик ошибок с помощью register_shutdown_function
Вот это уже интересно. Это сложно?
0
05.01.2015, 23:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.01.2015, 23:51

Обработка ошибок try catch
Как сделать, что бы не показывало, саму ошибку? Сейчас показывает Warning:...

Не работает try catch
пишу такой код try{ int k=0; int i=44/k;} catch(...) {cout&lt;&lt;&quot;OSIBKA...

не работает catch ( ... )
Подскажите почему не отлавливаются ошибки. Может не так использую ? try{...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru