Error melding in een div element

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Arno van Zanten

Arno van Zanten

02/05/2023 00:35:27
Quote Anchor link
Ik heb dit in de index.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
error_reporting(1);
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)
PHP script in nieuw venster Selecteer het PHP script
1
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);

en heb ik in de ingelade page, dit gemaakt.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
if($error == 1){
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?
 
PHP hulp

PHP hulp

26/04/2024 17:26:02
 
- Ariën  -
Beheerder

- Ariën -

02/05/2023 01:46:14
Quote Anchor link
Als er een error is, dan kan je dit beter in een Exception throw'en, en dan deze laten zien in je catch.

https://www.w3schools.com/php/php_exception.asp
 
Jan R

Jan R

02/05/2023 08:06:58
Quote Anchor link
Zelfs als je errors opvang om later te tonen kan je ze in een array steken en met een lusje ze tonen
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
    $_SESSION
['fouten'] = ['fout1', 'fout2'];
    if($_SESSION['fouten'] && is_array($_SESSION['fouten'])) {
        foreach($_SESSION['fouten'] as $fout) {
            echo '<div class="fout" onclick="this.remove();">' . $fout . '</div>';
        }
    }

?>


Je moet je classe zelf opmaken via css natuurlijk
 
Arno van Zanten

Arno van Zanten

02/05/2023 13:50:56
Quote Anchor link
Hmmmm, dus dit moet ik eens gaan testen.
 
Ozzie PHP

Ozzie PHP

02/05/2023 14:08:51
Quote Anchor link
Goed lezen wat ik schrijf.

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.
 
Arno van Zanten

Arno van Zanten

02/05/2023 14:16:21
Quote Anchor link
@Ozzie PHP,

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.
 
Ozzie PHP

Ozzie PHP

02/05/2023 14:18:41
Quote Anchor link
Ja, dat is precies wat ik bedoel ;-)

Jij doet dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php

$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.
 
Arno van Zanten

Arno van Zanten

02/05/2023 14:19:40
Quote Anchor link
Nou de warning krijg ik wel als er iets fout is, maar op de geinclude pagina en niet in de <div> element waar ik het wil.

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.
 
Ozzie PHP

Ozzie PHP

02/05/2023 14:31:37
Quote Anchor link
Nee ... lees goed wat er in het stukje staat dat je hebt opgezocht. En bekijk vervolgens jouw code.

Wat gaat er niet goed denk je?
 
- Ariën  -
Beheerder

- Ariën -

02/05/2023 14:41:35
Quote Anchor link
Lang leve var_dump()!
 
Arno van Zanten

Arno van Zanten

02/05/2023 16:35:34
Quote Anchor link
@ozzie,

No return.... hmmmm
 
- Ariën  -
Beheerder

- Ariën -

02/05/2023 16:50:50
Quote Anchor link
Jep, je moet nog even verder doorspitten.
 
Ozzie PHP

Ozzie PHP

02/05/2023 18:33:04
Quote Anchor link
Arno van Zanten op 02/05/2023 16:35:34:
@ozzie,

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. ;-)
 
Arno van Zanten

Arno van Zanten

03/05/2023 15:53:48
Quote Anchor link
@ozzie
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);

Heb ik uitstaan of liever gezegd, verwijderd in de php script.
Teminste zo lees en begrijp ik het uit dat verhaal.
 
- Ariën  -
Beheerder

- Ariën -

03/05/2023 16:00:48
Quote Anchor link
En wat verwacht je dan met dit?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$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 -
 
Ward van der Put
Moderator

Ward van der Put

03/05/2023 16:09:53
Quote Anchor link
Begin nou eerst eens met een eenvoudige test.

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.
 
Arno van Zanten

Arno van Zanten

03/05/2023 16:36:37
Quote Anchor link
Kijk dit stukje code staat in de error.php
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);


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>";
}
Gewijzigd op 03/05/2023 16:37:05 door Arno van Zanten
 
- Ariën  -
Beheerder

- Ariën -

03/05/2023 17:31:30
Quote Anchor link
Wat verwacht je precies te zien met $warning?

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;

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 -
 
Arno van Zanten

Arno van Zanten

03/05/2023 17:58:35
Quote Anchor link
Die doet het, maar hij zet het niet daar waar ik het wil.
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.
 
- Ariën  -
Beheerder

- Ariën -

03/05/2023 18:01:04
Quote Anchor link
Je wilt dergelijke errors bij voorkeur op een schone pagina plaatsen. Niets zo vervelend als een error te tonen, en daarna data die daardoor niet zichtbaar is, terwijl je dat anders wel zou verwachten.

Voor zover ik weet kan je niet zomaar zeggen: "Hier wil ik het".
Gewijzigd op 03/05/2023 18:01:36 door - Ariën -
 
Arno van Zanten

Arno van Zanten

03/05/2023 18:01:37
Quote Anchor link
Juist
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.