[php] regelnummer achterhalen in script

Pagina: 1
Acties:
  • 168 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo allemaal,

Ik heb al gezocht op php.net op "sentence" en "row", maar ik kom niet op de goede functie uit.
Mijn bedoeling is dat als er iets fout gaat in het script, dat php dan de regelnummer van de file retouneerd. Hoe krijg ik dit voor elkaar?
Ff een voorbeeld script:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
if(!$connectie = mysql_connect("localhost", "username", "wachtwoord")){
  echo "Er kon geen verbinding gemaakt worden met de MySQL server. MySQL retouneerde: Error ".mysql_errno().": ".mysql_error().". Regel: ".deze_regel();
} else {
  if(!mysql_select_db("database", $connectie)){
    echo "Er kon geen database geselecteerd worden. MySQL retouneerde: Error ".mysql_errno().": ".mysql_error().". Regel: ".deze_regel();
  } else {
    $query = "SELECT * FROM tabel";
    if(!$resultaat = mysql_query($query, $connectie)){
      echo "Er konden geen gegevens worden geselecteerd. MySQL retouneerde: Error ".mysql_errno().": ".mysql_error().". Regel: ".deze_regel().". Query: ".$query;
    } else {
      while($rij = mysql_fetch_assoc($resultaat)){
        echo "Waarde 1: ".$rij["waarde1"]."<br>";
        echo "Waarde 2: ".$rij["waarde2"];
      } // einde while-lus
    } // einde query-if
  } // einde select_db-if
} // einde connectie-if
?>

Dus wie weet wat de code van deze_regel() zou moeten zijn?
Geef me eigenlijk liever maar een tip, anders zou het een script-request zijn en dat mag niet :)
Alvast bedankt.

Groeten, Cybertinus

[ Voor 11% gewijzigd door Verwijderd op 20-10-2003 10:17 ]


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:21

crisp

Devver

Pixelated

kijk eens naar trigger_error tesamen met set_error_handler

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Sircuri
  • Registratie: Oktober 2001
  • Niet online

Sircuri

Volledig Appelig

Variable __LINE__ geeft de huidige regelnummer terug van het script. __FILE__ de huidige filenaam.

Signature van nature


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Let wel dat die "constanten" enkel bruikbaar zijn op de regel waar ze staan in je script. Als je ze dus in een functie zet krijg je altijd dezelfde bestandsnaam en regelnummer.

Daarom kun je het best gebruik maken van trigger_error () of user_error ()

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


Acties:
  • 0 Henk 'm!

  • jan-marten
  • Registratie: September 2000
  • Laatst online: 16-09 14:45
Ik denk niet dat dat zo gaat lukken.

Ik doe het op een andere manier, even een voorbeeldje:

PHP:
1
2
3
4
// bestand.php
include "functies.php";
$sql = "SQL";
$query = mysql_query($sql) or geterrdesc($sql,"Er treed een fout op in " . __FILE__ . " op regel " . __LINE__ );

PHP:
1
2
3
4
5
6
7
//functies.php
function geterrdesc($sql,$error)
{
   print $error;
   // log error met betreffende error message en mysql_error()
   die;
}

[ Voor 7% gewijzigd door jan-marten op 20-10-2003 11:48 . Reden: de ' werd ge-HTML-ed :? ]


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Bovenstaande werkt dan toch goed?

Maar als je er nou voor zorgt dat je geen queries dubbel in je code hebt (want dan ben je sowieso eigenlijk fout bezig, dan kun je beter een functie toevoegen ;) ), dan is het geen probleem om enkel de "foute query" af te laten drukken, zonder de precieze regelnummers.

Maar eerlijk gezegd vind ik het wel een enorm gemis om niet een "stacktrace" te kunnen krijgen, dat je dus bij een fout in je code kan achterhalen waarvandaan ie aangeroepen werd.
Wat vooral handig is als je klasse-wrappers voor bijv je db-toegang/aanroepen gebruikt.

Hmm, ze hebben een nieuwe functie gemaakt? http://nl3.php.net/manual/en/function.debug-backtrace.php

[ Voor 9% gewijzigd door ACM op 20-10-2003 12:36 ]


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

ACM:
Hmm, ze hebben een nieuwe functie gemaakt? http://nl3.php.net/manual/en/function.debug-backtrace.php
Hey, idd! Dat wist ik ook niet :) Eens proberen of dat een beetje werkt.

[ Voor 56% gewijzigd door drm op 20-10-2003 12:39 ]

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


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik denk dat al heel wat heb aan de constante __LINE__. Ik denk dat, zeker als je altijd op dezelfde manier script, dat je dan wel hetvolgende script kan maken:
PHP:
1
2
3
4
5
6
7
8
9
<?php
// hier wordt de connectie gemaakt
$query = 'SELECT * FROM tabel';
if(!$resultaat = mysql_query($query)){
  echo 'Er ging wat fout in de query op regel '.__LINE__ - 2;
} else {
  // verwerking geslaagde query
}
?>

Ik weet dit nog niet zeker, ik zoek dit ff uit, ik laat het resultaat weten.

edit:

Je kan inderdaad er wat cijfers afhalen, maar niet op de bovenstaande manier. Je moet het dan op devolgende manier doen:
<?php
// Hier wordt de connectie gemaakt
$query = 'SELECT * FROM tabel';
if(!$resultaat = mysql_query($query)){
$regel = __LINE__ - 2;
echo 'Er ging wat fout in de query op regel '.$regel;
} else {
// verwerking query
}
?>


Groeten, Cybertinus
offtopic:
Hoe zorg ik ervoor dat ik een mailtje krijg als er een reactie is op een topic?

[ Voor 32% gewijzigd door Verwijderd op 20-10-2003 17:17 ]


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:21

crisp

Devver

Pixelated

Verwijderd schreef op 20 oktober 2003 @ 17:09:
offtopic:
Hoe zorg ik ervoor dat ik een mailtje krijg als er een reactie is op een topic?
GoT biedt die mogelijkheid niet; gezien het aantal leden op dit forum zou dat ook een te zware belasting op de server betekenen.
Groeten, Cybertinus
Tweakers doen elkaar al permanent de groeten, dus die mag je voortaan ook achterwege laten ;)

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
crisp schreef op 20 October 2003 @ 17:14:
[...]

GoT biedt die mogelijkheid niet; gezien het aantal leden op dit forum zou dat ook een te zware belasting op de server betekenen.
Jammer, maar wel een hele logische verklaring.
crisp schreef op 20 October 2003 @ 17:14:
[...]

Tweakers doen elkaar al permanent de groeten, dus die mag je voortaan ook achterwege laten ;)
Sorry, zal het niet meer doen. Ik doe dit op ieder forum, dus het is een gewoonte, maar hier zal ik het laten.
Pagina: 1