[ Príspevkov: 12 ] 
AutorSpráva
Offline

Skúsený užívateľ
Skúsený užívateľ
Ako rozoznať delenie nulou od inej chyby?

Registrovaný: 30.05.06
Prihlásený: 08.10.14
Príspevky: 1756
Témy: 35 | 35
Bydlisko: BA - WESTSIDE

No, po dlhšom čase aj ja zakladám tému.

Mám projekt, ktorý spracúva číselné údaje, vyhodnocuje ich, radí do tabuliek atď. Všetky číselné údaje sú v databázi. Je tam aj jeden špeciálny prípad, tzv. vzorec. Slúži na vykonávanie matematických výpočtov medzi jednotlivými údajmi.

V týchto vzorcoch potrebujem ošetriť jednu vec - delenie nulou. V zásade sa všetky chyby syntaxe (neuzavreté zátvorky, zlá desatiná čiarka, resp. bodka, ...) vyriešiť dajú jednotným chybovým hlásením, avšak delenie nulou medzi ne nechcem dať (a ani to nefunguje, zobrazí sa aj chybové hlásenie PHP stroja, aj chybové hlásenie mojej aplikácie).

Jedno riešenie mám, operátor na potláčanie chýb @, ale nie je to ideálne, pretože sa potom vypíše všeobecné chybové hlásenie mojej aplikácie a ja by som to veľmi rád nejak odlíšil.

Vzorce sa vyhodnocujú funkciou eval(), to je vlastne ekvivalentné normálnemu spusteniu ako v bežnom PHP kóde.

Ak by ste k tomu niečo vedeli, bol by som rád za vaše postrehy, nápady či riešenia.


_________________
A. S. Tanenbaum píše:
The terms LF, MF, and HF refer to low, medium, and high frequency, respectively. Clearly, when the names were assigned, nobody expected to go above 10 MHz, so the higher bands were later named the Very, Ultra, Super, Extremely, and Tremendously High Frequency bands. Beyond that there are no names, but Incredibly, Astonishingly, and Prodigiously high frequency (IHF, AHF, and PHF) would sound nice.
Offline

Užívateľ
Užívateľ
Ako rozoznať delenie nulou od inej chyby?

Registrovaný: 16.05.07
Prihlásený: 01.08.17
Príspevky: 837
Témy: 6 | 6

skusil si to cez podmienky?


_________________
getch();?{readkey;?} na konci? !A naco! Riesenie je (Alt+F5)
99% pochopí a shaggy je druhá kategória
Offline

Skúsený užívateľ
Skúsený užívateľ
Ako rozoznať delenie nulou od inej chyby?

Registrovaný: 30.05.06
Prihlásený: 08.10.14
Príspevky: 1756
Témy: 35 | 35
Bydlisko: BA - WESTSIDE
Napísal autor témyOffline : 23.08.2007 11:31 | Ako rozoznať delenie nulou od inej chyby?

Ako to myslíš?

Predstav si dlhý výraz, niečo ako "((123 + 85) * (31 - 2))/6 - 4". To je v pohode, lebo je to len o číslach. Ale potom si predstav, že máš aj možnosť vložiť do výrazu referenciu na iný znak alebo výraz (vyslovene ako matematickú premennú). Tá má formát [číslo] (napr. [1], [2], [3], ...) a keďže to môže byť nie len číslo, ale aj iný vzorec, niekedy môže byť výsledkom nula a niekedy nemusí.

Mojím zámerom je nejak odlíšiť možné vzniknuté chyby, aby užívateľ vedel, čo je zle.

Kde by podľa teba mali byť aplikované tie podmienky?


_________________
A. S. Tanenbaum píše:
The terms LF, MF, and HF refer to low, medium, and high frequency, respectively. Clearly, when the names were assigned, nobody expected to go above 10 MHz, so the higher bands were later named the Very, Ultra, Super, Extremely, and Tremendously High Frequency bands. Beyond that there are no names, but Incredibly, Astonishingly, and Prodigiously high frequency (IHF, AHF, and PHF) would sound nice.
Offline

Užívateľ
Užívateľ
Ako rozoznať delenie nulou od inej chyby?

Registrovaný: 02.07.06
Prihlásený: 30.01.20
Príspevky: 1635
Témy: 137 | 137
Bydlisko: Slovakia - ...

hmm neviem si predstavit tu tvoju apliakaciu (kodovo) ale mas dajme tomu ten vysledok, neda sa z neho proste vybrat prva cislica a overit ci nie je nula?


_________________
Zivot je jednoduchy , staci sa rozhodnut a neobzerat sa spat. Poriadok je pre blbcov, inteligent zvlada chaos.
Offline

Skúsený užívateľ
Skúsený užívateľ
Ako rozoznať delenie nulou od inej chyby?

Registrovaný: 30.05.06
Prihlásený: 08.10.14
Príspevky: 1756
Témy: 35 | 35
Bydlisko: BA - WESTSIDE
Napísal autor témyOffline : 23.08.2007 12:05 | Ako rozoznať delenie nulou od inej chyby?

No lenže ona môže byť nulová, len pri delení to robí problémy, iba vtedy nemôže byť nulová.
Kód:
function val2num($cislo)
{
  $key = preg_replace("/\[|\]/", "", $cislo['0']);
  /*
   * Tu budu prikazy na ziskanie pola zaznamov,
   * v tomto priklade si zaznamy nadefinujeme,
   * pretoze ich ziskanie nesuvisi s nasim problemom   
  */
  $array = array(10, 6, "", "4 + 10", 4, 2);
 
  if ($array[$key] == "") {
     $output = 0;
  } elseif (!preg_match("/\d+/",$array[$key])) {
     $output = check_patt($array[$key]);
  } else {
    $output = $array[$key];
  }
  return "(".$output.")";     
};
function check_patt($input)
{ // BEGIN function check_patt
  $re="/\[([0-9][0-9]*)\]/";
  $function_name="val2num";
  if ($input == "") {
     $result = 0;
  } elseif (preg_match($re,$input)) {
     $result=preg_replace_callback($re,$function_name,$input);
  } else {
    $result = $input;
  }
  if(!eval("\$output = ".$result.";")){
    $output = "Chyba pri spracovani vyrazu!";
  }
  return $output;
} // END function check_patt

echo check_patt("(([3]*[0])/2+3)/0");


_________________
A. S. Tanenbaum píše:
The terms LF, MF, and HF refer to low, medium, and high frequency, respectively. Clearly, when the names were assigned, nobody expected to go above 10 MHz, so the higher bands were later named the Very, Ultra, Super, Extremely, and Tremendously High Frequency bands. Beyond that there are no names, but Incredibly, Astonishingly, and Prodigiously high frequency (IHF, AHF, and PHF) would sound nice.
Offline

Správca fóra
Správca fóra
Ako rozoznať delenie nulou od inej chyby?

Registrovaný: 27.07.07
Príspevky: 3948
Témy: 51 | 51
Bydlisko: Bratislava

Pri deleni nulou ti vznikne chyba "Division by zero" a podla toho zistis, ze prave tato operacia nastala. Pozri si napr funkciu set_error_handler()


Offline

Užívateľ
Užívateľ
Ako rozoznať delenie nulou od inej chyby?

Registrovaný: 16.05.07
Prihlásený: 01.08.17
Príspevky: 837
Témy: 6 | 6

stravil som 10 minut hladanim vyznamu slova referencia, ale aj tak nechapem co si tym myslel. ja ze to je od anglickeho refer a ono to fakt je, ale s tym spojenim tomu fakt nerozumiem.
neviem co presne chces, ale sak s tym vypnutim kontroly chyb to nieje dobre?
Kód:
@$a=5/0;
if(!$a) echo "delenie nulou";


_________________
getch();?{readkey;?} na konci? !A naco! Riesenie je (Alt+F5)
99% pochopí a shaggy je druhá kategória
Offline

Skúsený užívateľ
Skúsený užívateľ
Ako rozoznať delenie nulou od inej chyby?

Registrovaný: 30.05.06
Prihlásený: 08.10.14
Príspevky: 1756
Témy: 35 | 35
Bydlisko: BA - WESTSIDE
Napísal autor témyOffline : 23.08.2007 12:46 | Ako rozoznať delenie nulou od inej chyby?

Referencia - > postupnosť znakov [číslo] sa regulárnym výrazom nahradí za premennú $array[$key] kde $array je nejaké pole hodnôt a $key je číslo. Potom pri volaní funkcie eval("výraz"); sa z $array[$key] stane hodnota s ktorou chcem počítať. Čiže ak je v databázi uložené pod číslom 5 číslo 200 000, tak ak napíšem "[5] / 1000" výsledkom by malo byť to isté ako "200 000 / 1000" čiže 200. Je to takto robené kvôli tomu, že ak by vo výraze boli znamienka ako plus, mínus, deleno a krát, PHP by to bralo ako obyčajný string a nie ako matematické operátory.
Citácia:
Kód:
@$a=5/0;
if(!$a) echo "delenie nulou";

ok, ale aj toto je chyba a pritom to nie je delenie nulou:
Kód:
@$a=(5/1;
if(!$a) echo "delenie nulou?";

stenley píše:
Pri deleni nulou ti vznikne chyba "Division by zero" a podla toho zistis, ze prave tato operacia nastala. Pozri si napr funkciu set_error_handler()

Pozerám pozerám, ale popri tom ešte parketové lišty montujem tak nemám takú koncentráciu... Každopádne neviem prísť na to, ako tie chybové hlásenia dostať do premennej, lebo to čo oni ponúkajú cez error_log() je buď hneď výstup, emailová správa, PHP debugging connection, alebo logový súbor. Ani jedno mi nevyhovuje.

Ideála funkcia je error_get_last();, ale tá bohužiaľ nie je na mojom hostingu k dispozícii...

EDIT:
Heuréééka, už som na to prišiel, fakt cez set_error_handler(). Že som si to skôr nevšimol... :roll:


_________________
A. S. Tanenbaum píše:
The terms LF, MF, and HF refer to low, medium, and high frequency, respectively. Clearly, when the names were assigned, nobody expected to go above 10 MHz, so the higher bands were later named the Very, Ultra, Super, Extremely, and Tremendously High Frequency bands. Beyond that there are no names, but Incredibly, Astonishingly, and Prodigiously high frequency (IHF, AHF, and PHF) would sound nice.
Offline

Užívateľ
Užívateľ
Ako rozoznať delenie nulou od inej chyby?

Registrovaný: 16.05.07
Prihlásený: 01.08.17
Príspevky: 837
Témy: 6 | 6

ok, ale aj toto je chyba a pritom to nie je delenie nulou:
Kód:
@$a=(5/1;
if(!$a) echo "delenie nulou?";

ale sak (5/1 by mal byt string ..
(5/1 -- taketo nieco dokaze vyrobit ten eval()?


_________________
getch();?{readkey;?} na konci? !A naco! Riesenie je (Alt+F5)
99% pochopí a shaggy je druhá kategória
Offline

Správca fóra
Správca fóra
Ako rozoznať delenie nulou od inej chyby?

Registrovaný: 27.07.07
Príspevky: 3948
Témy: 51 | 51
Bydlisko: Bratislava

p360t píše:
Heuréééka, už som na to prišiel, fakt cez set_error_handler(). Že som si to skôr nevšimol... :roll:


nemas zac ;)
asi zacnem tuto funkciu tiez pouzivat, vyzera celkom slusne...


Offline

Skúsený užívateľ
Skúsený užívateľ
Ako rozoznať delenie nulou od inej chyby?

Registrovaný: 30.05.06
Prihlásený: 08.10.14
Príspevky: 1756
Témy: 35 | 35
Bydlisko: BA - WESTSIDE
Napísal autor témyOffline : 23.08.2007 14:36 | Ako rozoznať delenie nulou od inej chyby?

No eval spúšťa PHP kód uložený v reťazci. Pretože tie vzorce sú v databázi uložené ako reťazce a ako som už písal, znaky +-/* by nebralo ako matematické operátory, ale ako obyčajné znaky. Keď to vhodne doplním a preženiem cez eval, ten výraz sa vypočíta a uloží do premennej. Predtým však musí obsahovať len čísla, operátory a zátvorky.

Keby si spustil takéto niečo:
Kód:
$result = (5/1;
eval("\$output = ".$result.";");
napíše ti Parse error.


_________________
A. S. Tanenbaum píše:
The terms LF, MF, and HF refer to low, medium, and high frequency, respectively. Clearly, when the names were assigned, nobody expected to go above 10 MHz, so the higher bands were later named the Very, Ultra, Super, Extremely, and Tremendously High Frequency bands. Beyond that there are no names, but Incredibly, Astonishingly, and Prodigiously high frequency (IHF, AHF, and PHF) would sound nice.
Offline

Užívateľ
Užívateľ
Ako rozoznať delenie nulou od inej chyby?

Registrovaný: 01.01.06
Prihlásený: 25.12.21
Príspevky: 366
Témy: 47 | 47
Bydlisko: TT

Este Napadla ma taka klukata cesta....
Najprv si cely vyraz das ako retazec a vyhladas lomitka. Ak sa za lomitkom nachadza 0 (a po nej nejake znamienko), je to zle. (to je to iste co eval?)
Ale ovela elegantnejsie riesenie je to set_error_handler()


_________________
He who laughs last has not yet heard the bad news.
-- Bertolt Brecht

medicine student
 [ Príspevkov: 12 ] 


Ako rozoznať delenie nulou od inej chyby?



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

OTHER podla inej tabulky ako sa nacitava

v Databázy

1

715

14.07.2009 0:02

drozdo

V tomto fóre nie sú ďalšie neprečítané témy.

Ako preniesttext z inej stranky na svoju

v PHP, ASP

2

440

04.11.2014 13:53

PepperSK

V tomto fóre nie sú ďalšie neprečítané témy.

udaje su na inej stranke ako formular,daju sa odoslat?

v PHP, ASP

13

1092

05.10.2008 20:09

Roko

V tomto fóre nie sú ďalšie neprečítané témy.

ako odstranit chyby na webe

v Ostatné

9

1266

18.02.2009 14:07

bloger7

V tomto fóre nie sú ďalšie neprečítané témy.

Windows ani ovládače AMD nevedia rozoznať grafickú kartu

v ATI/AMD grafické karty

14

1048

31.10.2013 18:11

MAREJ

V tomto fóre nie sú ďalšie neprečítané témy.

Programovanie inej klavesnice

v Externé zariadenia

0

344

14.01.2012 19:25

blabla630

V tomto fóre nie sú ďalšie neprečítané témy.

nechapem delenie

v ATI/AMD grafické karty

6

1271

27.01.2010 3:28

foxXx

V tomto fóre nie sú ďalšie neprečítané témy.

Delenie diskov

v Operačné systémy Microsoft

6

563

27.06.2008 19:40

Flety

V tomto fóre nie sú ďalšie neprečítané témy.

Delenie viet

v PHP, ASP

6

968

15.07.2008 16:18

vladooo

V tomto fóre nie sú ďalšie neprečítané témy.

Delenie HDD

v Ostatné programy

10

1100

27.12.2011 15:15

Ominous

V tomto fóre nie sú ďalšie neprečítané témy.

delenie obdlznikov

v Assembler, C, C++, Pascal, Java

6

905

24.01.2011 23:43

vital

V tomto fóre nie sú ďalšie neprečítané témy.

delenie HDD

v Pevné disky a radiče

12

764

05.06.2013 21:52

sp33d

V tomto fóre nie sú ďalšie neprečítané témy.

Delenie Hdd

v Pevné disky a radiče

7

542

21.09.2015 4:45

branci6138

V tomto fóre nie sú ďalšie neprečítané témy.

Delenie disku

[ Choď na stránku:Choď na stránku: 1, 2 ]

v Pevné disky a radiče

43

2847

21.05.2008 16:24

tommy1104

V tomto fóre nie sú ďalšie neprečítané témy.

Zistenie cookie inej stránky

v Ostatné

4

530

06.01.2011 14:51

blazej44800

V tomto fóre nie sú ďalšie neprečítané témy.

Odchod do inej krajiny

v Spoločnosť, politika, psychológia, filozofia, náboženstvo

17

2059

10.11.2009 16:10

Tech



© 2005 - 2024 PCforum, edited by JanoF