Avatar billede Slettet bruger
22. marts 2005 - 15:31 Der er 21 kommentarer og
1 løsning

Fejl skal ikke vises "normalt", men skal vises med mit design

Er det muligt at få lagt fejlbeskeder som f.eks. parse error og alle de "die()" der måtte være, over i en variabel. Der så derefter naturligvis skal udskrives, bare inde i mit design, jeg også har i en variabel.

Min hjemmeside er bygget op sådan, at al indholdet på siden er i én variabel, før den bliver udskrevet. Dette gør det forholdsvis let at lave én eller flere if e.l. inden noget indhold bliver udskrevet,
Avatar billede rednex Nybegynder
22. marts 2005 - 15:41 #1
Hvis du slår display_errors fra og slår track_errors til i din php.ini vil fejlmeddelelser ikke automatisk blive udskrevet til brugeren og sidste fejlmeddelelse skulle så ligge i variablen $php_errormsg. Det kræver dog at du selv undersøger om der er sket en fejl og derefter formaterer fejlmeddelelsen.

Det er liiiidt svært at overtale scriptet til at lave noget formattering efter du har råbt "DØØØ SVIN!" (die()).
Avatar billede barklund Nybegynder
22. marts 2005 - 15:41 #2
Parse-errors er deciderede fejl-fejl - altså fejl så din php slet ikke er gyldig php og derfor slet ikke kan eksekveres. Men derudover har du en del muligheder for at håndtere diverse fejl-meddelelser:

http://dk.php.net/manual/en/ref.errorfunc.php

Dog har du selv skrevet dine die() - dem kan du derfor ikke begynde at lave om. Men du kan sikkert lave dem om til at du selv laver en fejl-meddelelse - for eksempel med:

mysql_query($sql) or trigger_error("Mysql fejl (".$sql.):".mysql_error(), E_USER_ERROR);

Det ville være en "lidt" nydelig løsning PHP4-style.

--
Morten Barklund
Avatar billede Slettet bruger
22. marts 2005 - 15:55 #3
Det skal lige siges at jeg kører med php 4.XX.XX på et webhotel(!) www.i123.dk, altså er der ikke mulighed for at ændre noget i php.

Det var lige præcis sådan noget jeg regnede med barklund :o)

Jeg ved at man med php 5 kan få php til at "gemme" fejlen på én eller anden måde, derfor troede jeg også at det kunne lade sig gøre i php4. Det er dog ikke det store problem med parse errors osv, idet jeg jo naturligvis har testet mine scripts før jeg ligger dem ud på nettet :o)


-> Morten
Jeg bruger oop ( eller i hvert fald klasser ), og regner derfor med at lave noget lignenden

$this->query("SELECT ...") or die($this->mysqlfejl(mysql_error()));

Idet jeg laver den funktion, er det jo muligt at sige:

function mysqlfejl($fejl) {
$udskrift = $this->design();
$udskrift = ereg_replace("--content--", $fejl, $udskrift);
return $udskrift;
}


Jeg ved ikke om det kan lade sig gøre på den måde, hvis du lige vil komme med noget input :o)
Avatar billede barklund Nybegynder
22. marts 2005 - 16:00 #4
Jeg ville flytte min die() ind i funktionen - det er der jo ingen grund til at lave udenfor. Det vil bare tvinge dig til, at det eneste du kan er at die - flytter du det ind i funktionen kan du håndtere det lidt mere detaljeret - og måske annulerer nogle fejlmeddelser.

Dog, hvis du bruger OOP, så tag et kig på PEAR DB[1] - det er rart at arbejde med!

[1] http://pear.php.net/manual/en/package.database.db.php

--
Morten Barklund
Avatar billede Slettet bruger
22. marts 2005 - 16:13 #5
jeg tror jeg holder mig til mit eget (indtil videre i hvert fald). Tak for linket - til senere brug måske :o)

Jeg vil prøve at se på hvad du mener. det lyder helt sikkert som noget der skal prøves i hvert fald
Avatar billede Slettet bruger
22. marts 2005 - 16:13 #6
smid svar tak
Avatar billede Slettet bruger
22. marts 2005 - 16:16 #7
Yes det var hurtig lavet :o)
jeg har lavet det sådan:

//query funktion
    function query($id)
        {
        $query = mysql_query($id) or $this->mysqlfejl($id);
        return $query;
        }
   
    //mysqlfejl funktionen til at vise mysql fejl
    function mysqlfejl($id)
        {
        $udskrift = mysql_error() . nl2br($id);
        echo $udskrift;
        }
Avatar billede barklund Nybegynder
22. marts 2005 - 16:18 #8
Nu mangler du så en die() i din mysqlfejl - og du vil nok gerne have mysql_error() printet også.

--
Morten Barklund
Avatar billede detox Nybegynder
22. marts 2005 - 16:18 #9
Ellers er der ikke noget i vejen for at formatere det i den her stil med inline css eller class:

die("<span style='color: red'>" . mysql_error() . "</span>");
die("<span class='fejl'>" . mysql_error() . "</span>");
Avatar billede Slettet bruger
22. marts 2005 - 16:22 #10
Jeg skal lige have kringlet den med die osv. jeg skal jo have designet med. :o)
Avatar billede Slettet bruger
22. marts 2005 - 16:29 #11
Er der en funktion i php der sletter alt der er udskrevet før den.. lyder måske ikke rigtigt men her er et eks:

<?
echo "hej";
denfunktionejeglederefter();
echo "farvel";
exit();
?>

skal udskrive "farvel";
Avatar billede rednex Nybegynder
22. marts 2005 - 16:33 #12
Ja, du kan bruge output buffering - brug ob_start() i starten af scriptet og flush() i slutningen. Hvis du vil tømme indholdet af output bufferen undervejs bruger du ob_clean().
Avatar billede Slettet bruger
22. marts 2005 - 16:34 #13
dem bruger jeg allerede. så det er godt nok kan man sige :o)
Avatar billede Slettet bruger
22. marts 2005 - 16:34 #14
Er der en fejl i dette:


    //query funktion
    function query($id)
        {
        $query = mysql_query($id) or $this->mysqlfejl($id);
        return $query;
        }
   
    //mysqlfejl funktionen til at vise mysql fejl
    function mysqlfejl($id)
        {
        $udskrift = mysql_error() . nl2br($id);
        return $udskrift;
        }

jeg får nemlig ingen fejl :S
Avatar billede barklund Nybegynder
22. marts 2005 - 16:38 #15
Well, tark for points :)
Avatar billede barklund Nybegynder
22. marts 2005 - 16:39 #16
Du die'er jo aldrig:

    //query funktion
    function query($id)
        {
        $query = mysql_query($id) or $this->mysqlfejl($id);
        return $query;
        }
 
    //mysqlfejl funktionen til at vise mysql fejl
    function mysqlfejl($id)
        {
        $udskrift = mysql_error() . nl2br($id);
        die($udskrift);
    }
Avatar billede Slettet bruger
22. marts 2005 - 16:43 #17
Det er fordi at hvis jeg die'er, kan mit design ikke komme med :)
Avatar billede barklund Nybegynder
22. marts 2005 - 16:48 #18
Så kan du jo bare die() hele dit design med?

Altså:

    //mysqlfejl funktionen til at vise mysql fejl
    function mysqlfejl($id)
        {
        require "top.html";
        print mysql_error() . nl2br($id);
        require "bottom.html";
        exit;
    }

Det er du jo nødt til hvis du skal have din tekst ind i designet. Du kan jo ikke afbryde noget php-script men fortsætte noget andet.

Derudover bør der ikke være ting der dør helt inden du er begyndt at outputte. Alle den slags fatale fejl bør fanges, før du sender headers og dermed før første output.
Avatar billede Slettet bruger
22. marts 2005 - 17:09 #19
ahh så virker det.. !!! :o)

Det er lige gået op for mig, at mine klasser måske skal ændres en smule, det tog mig en krig at gen-forstå hvad det egentlig er der sker på min hjemmeside :o)
Avatar billede Slettet bruger
22. marts 2005 - 17:09 #20
barklund-> det ser _helt_ anderledes ud i mine klasser og funktioner, det er derfor det er rimelig svedigt at finde ud af, hvad der sker :o)
Avatar billede barklund Nybegynder
22. marts 2005 - 17:16 #21
Ja, det er jeg med på - men så er det jo bare at prøve sig frem.

Især med "hobby websites", som man hele tiden arbejder på og udvikler, så får man aldrig tænkt det ordentligt igennem fra starten :)

Men håber det virker :)

--
Morten Barklund
Avatar billede Slettet bruger
22. marts 2005 - 17:50 #22
jep. det er dog ikke helt en "hobby website". :o)

www.cykeltjek.dk. Den er ikke aktiv endnu, men vil meget snart blive det!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester