Avatar billede kimhinge Nybegynder
07. maj 2004 - 14:42 Der er 6 kommentarer og
1 løsning

Hjælp til PHP-fejl

Jeg får denne fejl fra min gæstebog:

Warning: Cannot modify header information - headers already sent by (output started at /customers/crossroadz.dk/crossroadz.dk/httpd.www/gaestebog/gbog-ting/indstillinger.php:34) in /customers/crossroadz.dk/crossroadz.dk/httpd.www/gaestebog/gem.php on line 103


Nogen der kan hjælpe??? Filen der bliver refereret til ser sådan ud:

<?php

require("./gbog-ting/mysql-funktioner.php");
require("./gbog-ting/design-funktioner.php");
require("./gbog-ting/indstillinger.php");

/*
* Foerst napper vi variablerne fra miljoet.
*/

if(is_array($HTTP_POST_VARS)) {
  $navn = $HTTP_POST_VARS['navn'];
  $epost = $HTTP_POST_VARS['epost'];
  $besked = $HTTP_POST_VARS['besked'];
} elseif (is_array($_POST)) {
  $navn = $_POST['navn'];
  $epost = $_POST['epost'];
  $besked = $_POST['epost'];
}


/*
* Her er en simpel funktion der spytter en fejlmelding ud.
* Den bruger vi senere, når vi checker, at folk har skrevet noget i formularen.
*/

function gbog_fejl($fejl) {

    $generel_tekst = "<p>V&aelig;r venlig at g&aring; tilbage og ret til.</p>";

    $fejlmelding = "<ul>";

    for($i=0;$i<count($fejl);$i++) {
        $fejlmelding .= "<li>". $fejl[$i];
    }

    $fejlmelding .= "</ul>";

    echo top("Fejl") . "G&aelig;stebogen brokkede sig lidt over dit input:" . $fejlmelding . $generel_tekst . bund();
    exit;

}

/*
* Denne funktion skriver i gæstebogen - altså i databasen.
* Bemærk, at vi ikke bruger PHP til at indsætte tiden, men
* bruger MySQLs indbyggede funktion now().
*/

function skriv_i_gbog($navn, $epost, $besked) {
   
    $ip = getenv('REMOTE_ADDR');

    $sql = "insert into gaestebog(navn,epost,besked,ip,tid)
        values('$navn','$epost','$besked','$ip',now())";

    aabn_forbindelse_og_vaelgdb();
    sql_spoerg($sql);
    luk_forbindelse();

}

/*
* Vi laver lidt simpelt fejlcheckeri og ser, om der overhovedet
* er skrevet noget. Hvis ikke, bruger vi fejlfunktionen til at brokke os.
* Fejlfunktionen slutter med "exit", der sørger for, at PHP stopper.
*/

if(!ereg("[A-z0-9]+", $navn)) {

    $fejl[] = "Du har ikke skrevet dit navn";

}

if(!ereg("[A-z0-9]+", $besked)) {

    $fejl[] = "Du har ikke skrevet nogen besked";

}

if(count($fejl) > 0) {
    gbog_fejl($fejl);
}

/*
* Hvis vi er nået hertil, så står der i det mindste et eller andet i felterne og vi
* knalder det i databasen med funktionen skriv_i_gbog().
* Vi escaper alle fyfy-tegn med addslashes(). Når vi senere præsenterer indholdet
* af gBogen bruger vi stripslashes() til at "afkode".
*
* Alt dette besvær er til for at folk ikke skal snige ondsindede SQL-kommandoer
* ind i deres indlæg. Nyere versioner af PHP gør alt dette automatisk,
* men vi kan godt li' at være på den sikre side.
*/

skriv_i_gbog(addslashes($navn),addslashes($epost),addslashes($besked));

/*
* Så er skidtet banket i databasen og vi sender folk videre til selve gBogen
* hvor de kan se deres eget indlæg.
*/

header("Location: gbog.php");

/*
* Skal der sendes epost til administratoren?
*
* Bemærk, at vi godt kan gøre dette selv om folk er sendt videre til gBogen.
* Der er ingen grund til at gæsterne skal vente på, at der bliver sendt
* post - derfor kommer det først allersidst.
*/

if($epost_p == "t") {

  $ip = getenv('REMOTE_ADDR');
  $epostens_indhold = "$navn har skrevet denne besked fra IP-adressen $REMOTE_ADDR:\n-----------------------------------------------------\n\n$besked";

  mail($admin_epost, "Der er skrevet i din gBog!", $epostens_indhold);

}

?>
Avatar billede hmortensen Nybegynder
07. maj 2004 - 14:50 #1
Det er fordi su sender noget uotput til browseren inden headeren

Alt html og udskrift med echo/print skal stå efter header
Avatar billede detox Nybegynder
07. maj 2004 - 14:50 #2
Du må ikke lave output på siden inden du bruger: header() (Det giver iøvrigt heller ikke mening, når brugeren alligevel bliver sendt videre). Så fjern al unødigt putput.
Avatar billede leon_hunt Nybegynder
07. maj 2004 - 14:55 #3
Det vil hjælpe hvis du også paster din indstillinger.php fil.

For på linje 34 i indstillinger.php er der et output f.eks. echo, som gør header("Location: gbog.php"); på linje 103 i din gem.php fil ikke kan udføres.

Du kan se mere her: http://dk.php.net/manual/en/function.header.php
hvor der står følgende:
"Remember that header() must be called before any actual output is sent, either by normal HTML tags, blank lines in a file, or from PHP."
Avatar billede kimhinge Nybegynder
07. maj 2004 - 15:39 #4
Jeg forstår det simpelt hen ikke... Har prøvet alt muligt forskelligt...

Det er vidst fordi den vil sende en email efter at den har sendt brugeren videre...

Her er min instilliger.php:

<?php

#
# Maa der bruges HTML i dine indlæg?
# Hvis ja, skal denne variabel sættes til "t" - ellers til "f" (True eller False)
#

$html_p = "f";

#
# Hvor mange indlæg skal vises ad gangen?
#

$antal_ad_gangen = 10;

#
# Hvor bred skal tabellen i gBogen vaere? (pixels)
#

$tabel_bredde = 400;

#
# Skal der sendes en epost til dig når der er nye indlæg?
#

$epost_p = "f";

#
# Hvis ovenstående er "t", hvor skal eposten så sendes hen?
#

$admin_epost = "webmaster@crossroadz.dk";

?>


NOGEN DER KAN HJÆLPE???
Avatar billede detox Nybegynder
07. maj 2004 - 15:45 #5
Måske du har et dumt lille mellemrum (det er nok) efter: ?>
Avatar billede kimhinge Nybegynder
07. maj 2004 - 15:47 #6
Hehe...... Det hjalp at fjerne et par mellemrum :)
Kom lige med et svar

Tak for hjælpen
Avatar billede detox Nybegynder
07. maj 2004 - 15:54 #7
Velbekommen
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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