Toon posts:

[PHP] error_reporting( )

Pagina: 1
Acties:

Verwijderd

Topicstarter
Eventjes een vraagje voor de zekerheid, is error_reporting( 55 ); de default waarde van error_reporting?

Ik heb namelijk een stukje code waarin ik een query doe die fout mag gaan, maar ik wil daar niet de gebruikers mee opzadelen. Ik heb alleen tijdens die bewuste while loop de erro_reporting op 0 gezet. Na de while loop zet ik de error_reporting weer op 55, maar geeft hij dan weer gewoon alle errors weer die hij standaard ook weer geeft?

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

Er is neem ik aan wel een nettere manier om je error's af te vangen. Error reporting aanpassen lijkt me niet de juiste weg. Welke fout kan optreden in die while lus?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Je kunt natuurlijk ook een @ voor de functie zetten, dat staat ook in de PHP manual in het hoofdstuk "Error Handling":
All PHP expressions can also be called with the "@" prefix, which turns off error reporting for that particular expression. If an error occurred during such an expression and the track_errors feature is enabled, you can find the error message in the global variable $php_errormsg.

Verwijderd

Topicstarter
Het kan een aantal keer voorkomen dat ik een lege query uitvoer, krijg daardoor de error dat $result_max_bod een invalid result set is.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

Laat die code eens zien? dat lijkt me namelijk redelijk sterk...

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • RdeTuinman
  • Registratie: Mei 2001
  • Laatst online: 16-08 07:25
Dan kun je toch controleren of die result-set valid is? :?

Verwijderd

Topicstarter
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
while( $row_produkten = mysql_fetch_array( $result_produkten ) ){
    //zet error reporting even uit, omdat er facturen zijn zonder produkten ( MAG dus mis gaan )
    error_reporting( 0 );
    $query_max_bod = "select max( bod ) from bod where produkt_id = ".$row_produkten["produkt_id"]." and klant_id = ".$row_klant_info["klant_id"]."";
    $result_max_bod = mysql_query( $query_max_bod, $db_link );
    $row_max_bod = mysql_fetch_array( $result_max_bod );
    $totaal_ex_btw += $row_max_bod["0"];
    $totaal_project += $row_max_bod["0"];
                                
    if( $betaald_status == 0 ){
        $totaal_uitstaand += $row_max_bod["0"];
    }else{
        $totaal_voldaan += $row_max_bod["0"];
    }
}

dit is de code.
Het gaat om een totaal factuur overzicht, maar er kunnen handmatig facturen worden toegevoeg (credit nota's) en daar zijn geen produkten aan gekoppeld.

Deze while loop klopt dan niet.
( deze while loop loopt dus binnen deze loop:
while( $row_facturen = mysql_fetch_array( $result_facturen ) ){ } )

Verwijderd

Topicstarter
hee thnx Cheatah met een @ ervoor werkt idd ook prima :)

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

is het niet oneindig veel netter om er een ifje omheen te zetten :?
code:
1
2
3
4
5
6
7
8
if(nietgoedgenoegecondities)
{
    continue; // Volgende while iteratie
}
else
{
    // voer code uit
}

?
Wat je volgens mij met een simpele mysql_num_rows() al kan oplossen.

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

idd
Een lege resultset is nog geen foutieve resultset, dus heeft in feite niets met errors te maken. Je kunt het gewoon met mysql_num_rows () oplossen.

Die gaat alleen mekkeren wanneer je query een error bevat.

Daarnaast raad ik je af het @ sign te gebruiken in je code. Daar word je ongelooflijk slordig van.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Topicstarter
is het niet oneindig veel netter om er een ifje omheen te zetten
Nee volgens mij is dat niet makkelijk mogelijk, ik zou dan een extra query moeten maken om te controleren of het factuur_id wel voorkomt bij een produkt waarop geboden is.

maar wat ik me nu wel af vraag is dit:
code:
1
$query_max_bod = "select max( bod ) from bod where produkt_id = ".$row_produkten["produkt_id"]." and klant_id = ".$row_klant_info["klant_id"]."";

ik voer een geldige query uit, alleen komen deze produkt/klant combinatie niet voor in de bod tabel, moet hij dan niet gewoon "niets" returnen?
er is dan toch niets mis met de query, alleen is de result set leeg... of is dat al genoeg om over te piepen voor mysql?

Verwijderd

Topicstarter
hahaha
Een lege resultset is nog geen foutieve resultset, dus heeft in feite niets met errors te maken. Je kunt het gewoon met mysql_num_rows () oplossen.
mijn vraag is al beantwoord voor ik hem gesteld heb :P

ik ga nog eens even mijn code doorspitten

  • Grum
  • Registratie: Juni 2001
  • Niet online
mysql_num_rows en een ifje

en altijd error_reporting(E_ALL);

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

IceFlame:
er is dan toch niets mis met de query, alleen is de result set leeg... of is dat al genoeg om over te piepen voor mysql?
Het is niet meer mysql die gaat piepen, maar PHP.
Het is namelijk zo dat wanneer je een query uitvoert, er een resultID terugkomt. Door vervolgens de gegevens die aan die resultID gekoppeld zijn te analyseren kun je bepalen wat het script moet doen. Dit kan prima zonder errors te geven.

bijvoorbeeld:
code:
1
2
3
4
5
6
 1 $query = "SELECT * FROM tabel";
 2 $result = mysql_query ( $query );
 3 if ( mysql_num_rows ( $result ) == 0 )
 4    echo "Geen resultaten";
 5 else
 6    echo "Ja hoor, resultaten! woei!";

Dit geeft op regel 3 enkel een error, wanneer mysql_query een ongeldig resultID is, en resultID is alleen maar ongeldig wanneer er een fout in de query zit.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Topicstarter
PHP purist
error_reporting(E_ALL);
hahaha gaat goed samen idd Grum, ben het met je eens, maar er zijn wat dingetjes die ik niet helemaal netjes heb opgelost maar wel werken. ( bv eerst isset() checkjes voor een echo ed, was toen ik net begon aan dit project nog happy en onbezonnen, maar is nu klote werk om dat allemaal terug te draaien en de tijd tikt door.... deadlines... *zucht* )

Verwijderd

Waarom error's niet laten zien? gewoon code schrijven zonder error's lijkt mij :?

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

isset () is juist wel netjes. ;)

Je checkt namelijk eerst of je data hebt, voordat je er operaties mee gaat doen/op uit gaat voeren.

edit:
brutal:
Waarom error's niet laten zien? gewoon code schrijven zonder error's lijkt mij :?
exact :)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Op maandag 03 juni 2002 12:10 schreef drm het volgende:
isset () is juist wel netjes. ;)

Je checkt namelijk eerst of je data hebt, voordat je er operaties mee gaat doen/op uit gaat voeren.

edit:
[..]

exact :)
Ik blijf net zo lang zoeken tot dat ik iets gevonden heb dat het error vrij kan werken.

Verwijderd

Topicstarter
drm
ik heb jou code als volgt gerund:
de produkt_id en klant_id combinatie is dus ongeldig.
code:
1
2
3
4
5
6
7
query = "select max( bod ) from bod where produkt_id = 1496 and klant_id = 4321 ";
$result = mysql_query ( $query );
if ( mysql_num_rows ( $result ) == 0 ){
    echo "Geen resultaten";
}else{
    echo "Ja hoor, resultaten! woei!";
}

de output is:
code:
1
2
Warning: Supplied argument is not a valid MySQL result resource in /home/sites/startend/site/admin/modules/factuur/error_test.php on line 24
Geen resultaten

nu geeft hij dus alsnog de waring: bla, en daar worden bepaalde mensen hier heel zenuwachtig van, dus wil het liever verborgen houden.

Verwijderd

Op maandag 03 juni 2002 12:15 schreef IceFlame het volgende:
drm
ik heb jou code als volgt gerund:
code:
1
2
3
4
5
6
7
query = "select max( bod ) from bod where produkt_id = 1496 and klant_id = 4321 ";
$result = mysql_query ( $query );
if ( mysql_num_rows ( $result ) == 0 ){
    echo "Geen resultaten";
}else{
    echo "Ja hoor, resultaten! woei!";
}

de output is:
code:
1
2
Warning: Supplied argument is not a valid MySQL result resource in /home/sites/startend/site/admin/modules/factuur/error_test.php on line 24
Geen resultaten

nu geeft hij dus alsnog de waring: bla, en daar worden bepaalde mensen hier heel zenuwachtig van, dus wil het liever verborgen houden.
Wat is line 24?

Verwijderd

Topicstarter
sorry line 24 is dus
code:
1
if ( mysql_num_rows ( $result ) == 0 ){

Verwijderd

query = "select max( bod ) from bod where produkt_id = 1496 and klant_id = 4321 ";

MOET ZJN:

$query = "select max( bod ) from bod where produkt_id = 1496 and klant_id = 4321 ";

Verwijderd

Topicstarter
thnx brutal, maar dat is een copy/paste foutje, anders zou hij uberhaupt niet runnen

  • Grum
  • Registratie: Juni 2001
  • Niet online
Bijna alles is error vrij te maken .. ben in me hele 'code-carriere' pas een paar dingen tegen gekomen die niet foutvrij te maken waren ...

De situaties waarin ik het tegen kwam was meestal omdat ik ALLES wilde afvangen en dat er ondanks dat ik het afving toch een warning gegeven werd ... dit is dus op te lossen met een '@' ervoor ... maar ik vind dit meer een 'fout' in php dan een fout gebruik van de '@'.

Verwijderd

Op maandag 03 juni 2002 12:20 schreef IceFlame het volgende:
thnx brutal, maar dat is een copy/paste foutje, anders zou hij uberhaupt niet runnen
hmmz...
grmbl...

dacht ik al :P

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Warning: Supplied argument is not a valid MySQL result resource in /home/sites/startend/site/admin/modules/factuur/error_test.php on line 24

nu geeft hij dus alsnog de waring: bla, en daar worden bepaalde mensen hier heel zenuwachtig van, dus wil het liever verborgen houden.
Die warning zal je _altijd_ krijgen en is ook precies de uitzondering die drm al noemde.
Ook als je wel een geldige productid/klantid invoert.

Dit omdat je query gewoon ongeldig is. Wat er ongeldig aan is kan ik niet zien want ik ken je db-model niet, maar zet achter die mysql_query maar es
'mysql_query() or die(user_error("Error in query: $query " . mysql_error()));'
(evt zonder die user_error())

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Geloof mij nou maar, als je query correct is, geeft mysql_num_rows () gewoon 0 terug. Als je daar dus problemen mee krijgt, klopt je query gewoon niet
volgens mij slikt mysql die spaties bij de functie-aanroep niet, maar dat weet ik niet zeker
code:
1
$result = mysql_query ( $query );

Als je daar nou voor de grap eens
code:
1
2
$result = mysql_query ( $query )
   or die ( mysql_error () );

van maakt?


edit: ACM, niet zo vlug, joh...

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

ik heb hier ff gebrobeerd en als ik select * from doe werkt het wel.

Kan aan mijn instellingen van php liggen maar het valt te proberen.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op maandag 03 juni 2002 12:27 schreef drm het volgende:
edit: ACM, niet zo vlug, joh...
En mijne is nog mooier ook :P

Verwijderd

Topicstarter
Yups ACM u're right.
stom en ook logisch:
code:
1
2
Notice: Error in query: You have an error in your SQL syntax near '' at line 1 in /home/sites/startend/site/admin/modules/factuur/totaal_overzicht.php on line 140
1

super logisch want omdat de query in een while loop loopt waarin er een aantal gewoon leeg, alsin niet bestaande produkten zijn krijg je dus in de query een aantal keer een:
where produkt_id = and klant_id =

dus dat is idd weldegelijk een error :(

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

ACM:
En mijne is nog mooier ook :P
tsk, je hebt niet eens code-tags gebruikt :+
</ot>

Ik moet er nog wel even aan toevoegen dat het wel om een SELECT of SHOW query moet gaan.

Zodra je met DELETE, INSERT, UPDATE en REPLACE queries gaat werken, geeft mysql_num_rows idd een warning.
maar dat was niet aan de orde... ;)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op maandag 03 juni 2002 12:31 schreef IceFlame het volgende:
krijg je dus in de query een aantal keer een:
where produkt_id = and klant_id =

dus dat is idd weldegelijk een error :(
Snap je nu waarom je die isset()'s moet doen? :+
Scheelt je ook een heleboel keer een query onterecht uitvoeren EN dat scheelt behoorlijk veel tijd.

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 10:30
Dit is dus gewoon een stomme fout }:O

Verwijderd

Topicstarter
okee ik heb er een if omheen gevouwen en het werkt nu idd prima :)
code:
1
if( isset( $row_produkten["produkt_id"] ) && isset( $row_klant_info["klant_id"] ) ){  };

nu geen errors meer, thnx guys voor jullie hulp en tijd :)

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

ddc:
Dit is dus gewoon een stomme fout }:O
En wederom ddc met een uitermate waardevolle bedrage :Z

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Op maandag 03 juni 2002 12:38 schreef drm het volgende:

[..]

En wederom ddc met een uitermate waardevolle bedrage :Z
Yup lekker handig DCC |:(
Pagina: 1