Error melding in een div element
Code (php)
1
2
3
4
2
3
4
error_reporting(1);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL & ~E_WARNING);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL & ~E_WARNING);
Nu wil ik dit in een <div></div> wegzetten, zodat ik die regels, er iets fout is, dat ik het in boven in de page zie.
Maar dat lukt mij niet, heb ik via een maat van mij, een een stukje hulp gekregen voor een eigen error reporting te maken.
Code (php)
1
2
3
4
2
3
4
function errorHandler(int $type, string $msg, ?string $file = NULL, ?int $line = NULL) {
echo $type.' : '. $msg.' in : '. $file.' on line : '. $line;
}
$warning = set_error_handler('errorHandler' , E_ALL);
echo $type.' : '. $msg.' in : '. $file.' on line : '. $line;
}
$warning = set_error_handler('errorHandler' , E_ALL);
en heb ik in de ingelade page, dit gemaakt.
Code (php)
1
2
3
4
2
3
4
if($error == 1){
include('./inc/Errors.php');
echo "<div class='warningbox'>Still under construction<br />".$warning."</div>";
}
include('./inc/Errors.php');
echo "<div class='warningbox'>Still under construction<br />".$warning."</div>";
}
Maar echter als er een fout is op een page. Dan laat hij het zien op de page die geincluded wordt.
En niet in de warningbox waar ik het juist wil hebben.
De $warnig wordt wel uitgespuugd, maar niet in de div element.
Hoe kan dat? Ligt dat aan de error reporting zelf? of heb ik iets over het hoofd gezien? of is het niet mogenlijk om het in een div element te plaatsen?
Code (php)
Je moet je classe zelf opmaken via css natuurlijk
Hmmmm, dus dit moet ik eens gaan testen.
Bekijk jouw code in het eerste bericht. Je gebruikt de functie set_error_handler. Ga naar php.net en zoek die functie op. (Dat kun je heel makkelijk doen door de naam van de functie achter de URL php.net te plakken, dus php.net/functienaam).
Ga dit eens doen en kijk bij de uitleg wat die functie teruggeeft, ofwel wat de "return value" is. Laat maar eens weten of je dat kunt vinden, en laat maar eens weten wat het antwoord is.
Bedoel je dit?
Returns the previously defined error handler (if any). If the built-in error handler is used null is returned. If the previous error handler was a class method, this function will return an indexed array with the class and the method name.
Jij doet dit:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$warning = set_error_handler('errorHandler' , E_ALL);
echo "<div class='warningbox'>Still under construction<br />".$warning."</div>";
?>
$warning = set_error_handler('errorHandler' , E_ALL);
echo "<div class='warningbox'>Still under construction<br />".$warning."</div>";
?>
Met de uitleg die je zojuist zelf hebt opgezocht, snap je nu als het goed is waarom het niet werkt.
Toevoeging op 02/05/2023 14:21:10:
Maar ik moet dus even goed zoeken, waar de rest van de uitleg is die ik gevonden had.
Dan zal het misschien wel in daar komen waar ik het wil.
Wat gaat er niet goed denk je?
Lang leve var_dump()!
No return.... hmmmm
Jep, je moet nog even verder doorspitten.
Arno van Zanten op 02/05/2023 16:35:34:
@ozzie,
No return.... hmmmm
No return.... hmmmm
Lees wat er staat op php.net (vertaal het). Kijk vervolgens wat jij hebt gedaan. Vraag jezelf dan eens af wat je niet goed hebt gedaan. ;-)
Quote:
Retourneert de eerder gedefinieerde fouthandler (indien aanwezig). Als de ingebouwde fouthandler wordt gebruikt, wordt null geretourneerd. Als de vorige fouthandler een klassemethode was, retourneert deze functie een geïndexeerde array met de klasse en de naam van de methode.
Ook al maak ik een eigen error_handler, hij gebruikt toch de in gebakken error_handler van de PHP?
want deze :
Quote:
error_reporting(1);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL & ~E_WARNING);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL & ~E_WARNING);
Heb ik uitstaan of liever gezegd, verwijderd in de php script.
Teminste zo lees en begrijp ik het uit dat verhaal.
Code (php)
1
2
3
4
2
3
4
<?php
$warning = set_error_handler('errorHandler' , E_ALL);
echo "<div class='warningbox'>Still under construction<br />".$warning."</div>";
?>
$warning = set_error_handler('errorHandler' , E_ALL);
echo "<div class='warningbox'>Still under construction<br />".$warning."</div>";
?>
Met een eigen errorhandler kan je zelf de foutafhandeling in PHP uitbreiden. Je kan de foutmeldingen in een eigen jasje stoppen, maar ook bijvoorbeeld zelf functies toevoegen, zoals het sturen van mails of wat je maar wilt. Theoretisch kan je zelfs je huisverlichting rood laten oplichten, om maar wat geks te bedenken.
Ikzelf gebruik in mijn site de exception-handler, omdat ik (en andere door mij gebruikte packages) exceptions gebruiken. Als er een exception wordt opgeroepen, dan laat ik een aparte pagina zien met een gebruiksvriendelijke foutmelding, en in de ontwikkelmodus toon ik een 'stacktrace' die laat zien waar de fout zit.
Een aparte pagina is altijd nog het beste, zo voorkom je dat je een halve pagina ziet met dingen die niet werken vanwege je fout.
Gewijzigd op 03/05/2023 16:06:09 door - Ariën -
Genereer bijvoorbeeld een fout ...
$failure = 42 / 0;
... en bedenk hoe je van daaruit uitkomt bij je foutmelding:
<div><p>Delen door nul is niet toegestaan.</p></div>
Je hoeft echt niet gelijk aan test-driven development (TDD) te gaan doen, maar gestructureerd werken brengt je sneller veel verder dan ad hoc dingen aan- en uitzetten.
Quote:
function errorHandler(int $type, string $msg, ?string $file = NULL, ?int $line = NULL) {
echo $type.' : '. $msg.' in : '. $file.' on line : '. $line;
}
$warning = set_error_handler('errorHandler' , E_ALL);
echo $type.' : '. $msg.' in : '. $file.' on line : '. $line;
}
$warning = set_error_handler('errorHandler' , E_ALL);
en met deze roep ik hem aan (wordt in de index.php ingeladen)
Quote:
if($error == 1){
include('./inc/Errors.php');
echo "<div class='warningbox'>Still under construction<br />".$warning."</div>";
}
include('./inc/Errors.php');
echo "<div class='warningbox'>Still under construction<br />".$warning."</div>";
}
Gewijzigd op 03/05/2023 16:37:05 door Arno van Zanten
Kijk eens wat die errorHandler() functie doet? Die regelt de vormgeving.
Toevoeging op 03/05/2023 17:56:44:
Ward van der Put op 03/05/2023 16:09:53:
Begin nou eerst eens met een eenvoudige test.
Genereer bijvoorbeeld een fout ...
$failure = 42 / 0;
Genereer bijvoorbeeld een fout ...
$failure = 42 / 0;
En dan kom je bij exceptions uit, in plaats van errors.
Test maar uit door ook EOL-versies te kiezen.
https://3v4l.org/UR6dF
Gewijzigd op 03/05/2023 17:57:38 door - Ariën -
Ik heb in de index.php een <div></div> aangemaakt helemaal bovenaan in de page.
Nu heb ik met de index.php een paar includes, die bepaalde dingen doen.
Nu heb ik zeg maar een page hallo.php geinclude, daar zit zeg maar 1 foutje in bv en de $warning doet het, maar zet het niet in de <div></div> bovenaan in de page waar ik het speciaal heb aangemaakt, maar in daar waar de page hallo.php aangeroepen is.
Voor zover ik weet kan je niet zomaar zeggen: "Hier wil ik het".
Gewijzigd op 03/05/2023 18:01:36 door - Ariën -
Juist