Toon posts:

[PHP] Error message in include openen

Pagina: 1
Acties:
  • 46 views sinds 30-01-2008

Verwijderd

Topicstarter
De situatie is als volgt. Ik heb een website gemaakt (draait momenteel nog op localhost). De content draait binnen een PHP include.

Als volgt dus:
PHP:
1
2
3
4
5
6
7
8
9
<!-- Begin content -->
<?php if (empty($content)) {
// Indien $content leeg is, vul em dan met welkom.htm
// Oftewel als er geen pagina meegegeven wordt, start dan met de welkomstpagina
$content = "content/welkom.htm";
}
include ("$content");
?>
<!-- Einde content -->


Dit loopt allemaal prima.

Nu heb ik dus een reactieformulier gemaakt, waarbij ik gebruik maak vaneen php script. Als je het reactieformulier verkeerd invult, krijg je een error melding. Nu wil ik dat de error melding binnen de include verschijnt, nu neemt ie de hele pagina in beslag.

Volgens mij print ie hier de error melding:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// BELANGRIJK
function display_errors($errors){
$errors = '<li>' . join('<li>', $errors);
print <<<EOF
<head>
<title>Mailformulier fout melding</title>
</head>
<body>
    <br>
    <br>
    <h3 align=center><font>Een fout is opgetreden</font></h3>
    <br>
    <br>
    <table align=center><tr><td>
    $errors
    </td></tr></table>
    <p align=center>
    <a href="javascript: history.back(-1)">Ga terug</a> en verander de fout melding
    </p>
    </body>
    </html>
EOF;
}


Het hele script vind je hier:
http://members.home.nl/br.bakker/mailformulier.txt

De vraag is dus hoe ik error melding binnen de include krijg, in plaats van de hele pagina.

Hij print de error melding volgens mij met het commando:
print <<<EOF

Dit zou iets moeten worden in de trant van:
print index.php?content=<<<EOF

Maar dan anders. Zou niet moeilijk moeten zijn.

[ Voor 12% gewijzigd door Verwijderd op 14-05-2005 18:56 ]


  • Wacky
  • Registratie: Januari 2000
  • Laatst online: 28-04 21:25

Wacky

Dr. Lektroluv \o/

Waarom maak je gebruik van EOF? Haal die EOF's eens weg en verander de code in zoiets:
code:
1
2
3
echo "<head>
<title>Mailformulier fout melding</title>
etc. etc.


Let wel even op het gebruik van " en ' binnen deze echo :)

Nu ook met Flickr account


  • Shadowman
  • Registratie: Januari 2002
  • Niet online
Ehm, als ik goed begrijp wat jij wil, dan mag je er wel rekening mee houden dat er een max len zit op de query-string van het http-protocol. Is het niet mogelijk om ?error=$error te doen en dan daarin display_errors($_GET['error']). (Of je maakt een lijstje van standaard errors, welke je elk een id geeft en dan doe je ?error=id_van_error).

@Wacky: dat EOF is gewoon goede syntax hoor.

// Indien $content leeg is, vul em dan met welkom.htm
// Oftewel als er geen pagina meegegeven wordt, start dan met de welkomstpagina
ehm, ik hoop dan niet dat $content rechtstreeks van de query-string komt. (?content=/etc/passwd oid).

Verwijderd

Topicstarter
Ik heb inmiddels gezocht naar een oplossing.

Deze code zou kunnen:
PHP:
1
2
3
4
5
6
7
8
// BELANGRIJK
function display_errors($errors){
global $redirect_error;
$errors = '<li>' . join('<li>', $errors);
$redirect_error = 'http://localhost/kopschoon/index.php?content=$errors';
header("Location: $redirect_error");
exit();
}


Alleen pikt ie het niet dat $errors als content wordt meegegeven. Ik krijg dan een error:
Warning: main($errors) [function.main]: failed to open stream: No such file or directory in D:\xampplite\htdocs\kopschoon\index.php on line 77

Warning: main() [function.include]: Failed opening '$errors' for inclusion (include_path='.;\xampplite\php\pear\') in D:\xampplite\htdocs\kopschoon\index.php on line 77

Verder moet ie behalve de $errors variabele ook een aantal regels html tonen. Hoe doe ik dit?

Verwijderd

Include zoiets;

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?php

    // error functie
    function errortonen($fouten)
    {

        $result = null;
        foreach($fouten AS $fout) $result .= $fout.'<br>';
        return $result;

    }
    
    // formulier tonen
    if($_SERVER['REQUEST_METHOD'] != 'POST')
    {

        // toon formulier
        echo '<form method="POST">Formulier, etc...';

    } else
    // toon resultaat (error of vervolg handeling uitvoeren)
    if($_SERVER['REQUEST_METHOD'] == 'POST')
    {

        // fouten?
        if(/*conditie voor fouten == true*/1==2)
        {

            // roep error functie aan en toon evt. html
            echo errortonen($array_met_foutmeldingen);
            echo '<extra html>';


        } else
        // geen fouten
        if(/* conditie voor fouten == false*/1==1) 
        {

            // doe iets nuttigs met de POST-data
            echo 'okay.';

        }

    }

?>

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Verwijderd schreef op zaterdag 14 mei 2005 @ 21:08:
Ik heb inmiddels gezocht naar een oplossing.

Deze code zou kunnen:
PHP:
1
//snip


Alleen pikt ie het niet dat $errors als content wordt meegegeven. Ik krijg dan een error:
Warning: main($errors) [function.main]: failed to open stream: No such file or directory in D:\xampplite\htdocs\kopschoon\index.php on line 77

Warning: main() [function.include]: Failed opening '$errors' for inclusion (include_path='.;\xampplite\php\pear\') in D:\xampplite\htdocs\kopschoon\index.php on line 77

Verder moet ie behalve de $errors variabele ook een aantal regels html tonen. Hoe doe ik dit?
Gek he, dat dat niet werkt? :X Je hebt <li>-tags in je $errors variabele staan, en die druk je vrolijk af in je querystring. Om te beginnen moet je die tekens bij mijn weten al encoden, en verder kun je natuurlijk geen bestand openen dat "<li>blaat" heet..

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
Ik heb een oplossing gevonden.

Ik schrijf nu de error tekst weg naar een html pagina. En deze html pagina open ik dan binnen de include. Dat werkt dus wel! Ik zit nog met 1 probleempje. Ik schrijf dus HTML + de error variabele weg naar de html file maar ook een stukje javascript. Alleen het wegschrijven van het javascript naar een string en die weer naar een html file, pikt ie dus niet. Ik krijg dan een error. Wie weet hoe ik dit kan omzeilen?

Dit is de code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// BELANGRIJK
function display_errors($errors){
global $redirect_error;
global $data;
global $fp;
$errors = '<li>' . join('<li>', $errors);

$data = "
<head>
<title>Mailformulier fout melding</title>
</head>
<body>
    <br>
    <br>
    <h3 align=center><font>Een fout is opgetreden</font></h3>
    <br>
    <br>
    <table align=center><tr><td>
    $errors
    </td></tr></table>
    <p align=center>
// dit stukje pikt ie dus niet
    <a href="javascript: history.back(-1)">Ga terug</a> en verander de fout melding
// tot hier
    </p>
    </body>
    </html>";

$fp = fopen ("error.htm", "w");
fwrite($fp, $data);
fclose($fp);

$redirect_error = 'http://localhost/kopschoon/index.php?content=mailformulier/error.htm';
header("Location: $redirect_error");
exit();
}

[ Voor 58% gewijzigd door Verwijderd op 16-05-2005 19:16 ]


  • Koeniepoenie
  • Registratie: Oktober 2003
  • Laatst online: 06-05 17:12
Euh, escapen?

PHP:
1
echo "<a href=\"javascript: history.back(-1)\">Ga terug</a>";

Parse error: syntax error, unexpected GOT_USER in https://gathering.tweakers.net on line 1337


Verwijderd

Topicstarter
Koeniepoenie schreef op maandag 16 mei 2005 @ 19:17:
Euh, escapen?

PHP:
1
echo "<a href=\"javascript: history.back(-1)\">Ga terug</a>";
Pikt ie ook niet.

  • blizt
  • Registratie: Januari 2003
  • Laatst online: 01-05 08:39

blizt

Wannabe-geek

Verwijderd schreef op zaterdag 14 mei 2005 @ 18:54:
Volgens mij print ie hier de error melding:
[knip]
Volgens jou? Dat weet je niet?
* blizt twijfelt of het wel eigen code is...

Verder zou het moeten werken als je de boel escaped, maar als je even 'n error zou geven zou dat al makelijker zoeken zijn natuurlijk.

United we stand, and divided we fall


Verwijderd

Topicstarter
blizt schreef op maandag 16 mei 2005 @ 19:38:
[...]

Volgens jou? Dat weet je niet?
* blizt twijfelt of het wel eigen code is...

Verder zou het moeten werken als je de boel escaped, maar als je even 'n error zou geven zou dat al makelijker zoeken zijn natuurlijk.
Dit is de error die die geeft:
Parse error: syntax error, unexpected T_STRING in D:\xampplite\htdocs\kopschoon\mailformulier\mailformulier.php on line 329

Als je dit regeltje er uit haalt:
<a href="javascript: history.back(-1)">Ga terug</a> en verander de fout melding

dan werkt het script weer.

  • Room42
  • Registratie: September 2001
  • Niet online
Jawel, maar je moet die echo niet gebruiken. Vervang dat stukje dus met dit:
code:
1
2
3
// dit stukje pikt ie dus niet
    <a href=\"javascript: history.back(-1)\">Ga terug</a> en verander de fout melding
// tot hier


Zoals je in je eigen post al kan zien is dat stukje buiten de string gegooid (door de ") en verwacht PHP daar geldige syntax.

Gebruik jij uberhoubt wel syntax highlighting?

[ Voor 9% gewijzigd door Room42 op 16-05-2005 19:44 ]

Koop al mijn ads!


Verwijderd

Topicstarter
Room42 schreef op maandag 16 mei 2005 @ 19:43:
[...]


Jawel, maar je moet die echo niet gebruiken. Vervang dat stukje dus met dit:
code:
1
2
3
// dit stukje pikt ie dus niet
    <a href=\"javascript: history.back(-1)\">Ga terug</a> en verander de fout melding
// tot hier


Zoals je in je eigen post al kan zien is dat stukje buiten de string gegooid (door de ") en verwacht PHP daar geldige syntax.

Gebruik jij uberhoubt wel syntax highlighting?
That does the trick.

Bedankt.

[ Voor 29% gewijzigd door Verwijderd op 16-05-2005 19:55 ]


  • Room42
  • Registratie: September 2001
  • Niet online
JA! Maar dat is dus weer geen goede HTML! Niet doen dus!

Edit: Haha dat had je zelf dus ook al door, gezien je edit :)

[ Voor 40% gewijzigd door Room42 op 16-05-2005 19:57 ]

Koop al mijn ads!


Verwijderd

Topicstarter
Je bent net iets te snel.

  • Shadowman
  • Registratie: Januari 2002
  • Niet online
als je de quotes weghaalt klopt de html niet.

Ik neem aan dat $errors iets is dat je zelf genereert, maar ik raad je toch aan om dat in een sessie-var op te slaan en na een redirect die data te laten zien.

Want wat het lijkt me niet helemaal de bedoeling als een user per ongeluk de verkeerde foutmelding te zien krijgt, en dat is nu zeer zeker wel mogelijk als bv twee gebruikers gelijktijdig iets fout doen.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Ok, genoeg geweest. Bas123, je mist duidelijk een hele bulk aan basiskennis, die wij hier in Programming & Webscripting gewoon als bekend achten. Dat is niet erg hoor, maar het betekent wel dat je misschien wat meer tijd moet steken in het lezen van boeken en tutorials, in plaats van hier elk klein vraagje te dumpen. 10 minuten rondkijken op php.net had beide problemen die ik hier van je gelezen heb opgelost. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1

Dit topic is gesloten.