Avatar billede claushelth Nybegynder
03. februar 2003 - 20:57 Der er 23 kommentarer og
1 løsning

redirect virker ikke! får fejlmedd.

Jeg laver en side hvor jeg kan indsætte data i min DB fra min hjemmeside.

Min side hedder ny_artikel.shtml -> Her er der en form der skal udfyldes.
Formen sender en videre hen til en php side som indsætter tuplen. Alt dette virker fint.

Jeg bruger en fil til hjælpefunktioner til databasen, ligesom den der er beskrevet hos webcafe.dk under php med sql.
Mine hjælpefil sørger for at sende fejlmeddelelser hvis der sker fejl ved DB.

Problemet er at når min indsættelse er gået godt, så står jeg i min php-fil, og jeg vil gerne lede brugere videre.
Jeg har forsøgt at redirecte på denne måde:

    header("Location:..\index.shtml");

Men får denne fejl:

Warning: Cannot modify header information - headers already sent by (output started at c:\apache\htdocs\hj_funktioner\db_funktioner.php:23) in c:\apache\htdocs\test\phpsql\ny_artikel\ny_artikel.php on line 15

og så bliver der ikke indsat noget...

Alle mine hjælpefunktioner bliver omhyggeligt hver især omkranset af <?php ...delfunktion...  ?>

Jeg vil bare gerne videre efter indsættelsen!!!
Avatar billede svoeber Nybegynder
03. februar 2003 - 21:00 #1
Som der står skrevet, bliver der skrevet noget ud på linie 23 i din fil med DB-hjælpe funktioner.
Der må ikke have været noget output forud for et header()-kald
Avatar billede jakoba Nybegynder
03. februar 2003 - 21:01 #2
Headers skal sendes FØR der skrives nogetsomhelst til den fil dit php script genererer til browseren.

din fil funktioner.php  indeholder åbenbart noget kode der skriver til output (i linie 28.

Hvis du sørger for at din redirect foretages før da skulle det virke.
Avatar billede svoeber Nybegynder
03. februar 2003 - 21:07 #3
Det, at der har været output fra dine DB-hjælpefunktioner, kunne tyde på at de har opdaget en fejl og printet en fejl-besked - får du andet frem på skærmen?

jakoba> han kan vist ikke lægge redirect før han inkluderer db_funktioner.php, da de sandsynligvis indeholder funktioner, han skal bruge før han redirecter :)
Avatar billede ksostack Nybegynder
03. februar 2003 - 21:15 #4
Prøv at kigge på ob_start() og ob_flush().
De er altid gode, når man skal bruge header().

//ksostack
Avatar billede claushelth Nybegynder
03. februar 2003 - 21:54 #5
jeg får ingen fejlmeddeleser fra min funktioner-fil...det er det der er lidt mærkeligt...

Hvis jeg fjerner header-funktionen (redirection), så kommer der ingen fejlmeddeleser...bare en blank .php side, men indsættelsen sker alligevel (det gør den også selvom fejlen sniger sniger sig ind, uden headeren).

jeg udskriver ikke et eneste stede i funktionsfilen med mindre der er gået noget galt.
Jeg har testet den et par steder og satte et par udskrivninger ind for at se om alt gik godt...og det gjodre det tilsyndeladende.

Her er min php kode:

<?php
if(isset($_POST['send_artikel']))
{
    require($_SERVER["DOCUMENT_ROOT"] . "/hj_funktioner/db_funktioner.php");

    aabn_forbindelse_og_vaelgdb();

    $forfatter     = $_POST["forfatter"];
    $overskrift = $_POST["overskrift"];
    $tekst     = $_POST["tekst"];

    $query = "insert into artikeldbtest1(Forfatter,Overskrift,Tekst)
            values ('$forfatter','$overskrift','$tekst')";

    sql_spoerg($query);

    header("Location:..\index.shtml");
    luk_forbindelse();
    exit;
}
else
{
    header("Location:ny_artikel.shtml");
    exit;
}

?>

Min fejl er stadig:
Warning: Cannot modify header information - headers already sent by (output started at c:\apache\htdocs\hj_funktioner\db_funktioner.php:23) in c:\apache\htdocs\test\phpsql\ny_artikel\ny_artikel.php on line 17
Avatar billede svoeber Nybegynder
03. februar 2003 - 21:56 #6
Hvad sker der på linie 23 i din "db_funktioner.php"-fil?
Avatar billede claushelth Nybegynder
03. februar 2003 - 21:58 #7
fejlen kommer som sagt kun når headeren bliver sat ind.

Jeg er ikke klar over hvad de 23 betyder i fejlkoden, men hvis det er den linje i funktionsfilen der er noget galt, så kan jeg sige at her står starten på min luk_forbindelse.

<?php  //linje 23
//Luk forbindelsen til DB

function luk_forbindelse()
{
  if(!mysql_close())
  {
    udskriv_fejl("Kunne ikke lukke forbindelsen til MySQL!");
  }
}
?>

er det fordi jeg ikke sætte en exit i alle hjælpefunktionerne?
Avatar billede ksostack Nybegynder
03. februar 2003 - 21:58 #8
Prøv med:
<?php
ob_start();
if(isset($_POST['send_artikel']))
{
    require($_SERVER["DOCUMENT_ROOT"] . "/hj_funktioner/db_funktioner.php");

    aabn_forbindelse_og_vaelgdb();

    $forfatter    = $_POST["forfatter"];
    $overskrift = $_POST["overskrift"];
    $tekst    = $_POST["tekst"];

    $query = "insert into artikeldbtest1(Forfatter,Overskrift,Tekst)
            values ('$forfatter','$overskrift','$tekst')";

    sql_spoerg($query);

    header("Location:..\index.shtml");
    luk_forbindelse();
    exit;
}
else
{
    header("Location: ny_artikel.shtml");
    exit;
}
ob_flush();
?>
//ksostack
Avatar billede claushelth Nybegynder
03. februar 2003 - 22:02 #9
ksotack -> Takker ...det hjalp. Kan du ikke lige sende et "svar" så for du "præmien" hehe.

Kan du så ikke lige hurtigt skrive hvad ob_start(); og ob_flush(); gør?

VH
Claus
Avatar billede svoeber Nybegynder
03. februar 2003 - 22:03 #10
ksostack's løsning løser symptomet, men ikke problemet :)
Men det vil i hvert fald fungere - det der sker, er at ob_start() sørger for, at der ikke kommer noget output på siden før ob_flush() kaldes.

Det vil dog også betyde at fejlbeskeder forsvinder, når du redirecter...
Avatar billede claushelth Nybegynder
03. februar 2003 - 22:06 #11
Men jeg vil jo stadig gerne bruge mine fejlmeddelser fra min funktionsfil...

ksotack -> Sorry...håber ikke jeg var for hurtigt ude

Det er jo det der er meningen med de fælles funktioner -> varable der fanger den korrekte fejlmeddelse
Avatar billede svoeber Nybegynder
03. februar 2003 - 22:08 #12
Prøv at kigge din db_funktioner.php igennem og sørg for at der ikke er ét eneste tegn (også space-tegn og linieskift) før <?php og efter ?>
Avatar billede claushelth Nybegynder
03. februar 2003 - 22:08 #13
Nej det dur altså ikke rigtig...jeg skal hva fat i fejlmeddelelsen. Ellers ved brugeren ikke det er gået skidt i Dabtabasen
Avatar billede claushelth Nybegynder
03. februar 2003 - 22:13 #14
svoeber ->Jeg tror ikke jeg er helt sikker på hvad du mener. Der må jo både forekomme linjeskift og mellemrum i en php funktion, bare de ikke står i en echo...eller hvad? Ellers bliver det jo et stort kaos med kode?
Avatar billede claushelth Nybegynder
03. februar 2003 - 22:15 #15
Jeg ved godt at det er rigtig grimt, og det er også meget sjældent at jeg gør dette, men her er min funktionskode:

<?php
//Åben forbindelsen til DB og vælg DB
function aabn_forbindelse_og_vaelgdb()
{
  $server = "localhost";
  $bruger = "claushelth";
  $kodeord = "gotfred";
  $database = "chelthdb";

  if (!mysql_connect("$server","$bruger","$kodeord"))
  {
    udskriv_fejl("Kunne ikke oprette en forbindelse til MySQL.");
  }
  if(!mysql_select_db("$database"))
  {
    udskriv_fejl("Kunne ikke vælge databasen: $database");
  }
}
?>

<?php
//Luk forbindelsen til DB
function luk_forbindelse()
{
  if(!mysql_close())
  {
    udskriv_fejl("Kunne ikke lukke forbindelsen til MySQL!");
  }
}
?>

<?php
//Forespørgelser der IKKE returnerer data.
function sql_spoerg($query)
{
  $resultat = mysql_query($query);

  if(!$resultat)
  {
        udskriv_fejl("Kunne ikke udføre: <em>$query</em>");
  }
}
?>

<?php
//Udskriv fejl

function udskriv_fejl($fejl) {
  echo "<p>$fejl";

  if ($mysql_fejl = mysql_error())
  {
    echo "<br><br>Der opstod en fejl: <em>$mysql_fejl</em>
        <br><br>Hvis du mener denne fejl ikke burde opstå, send så venligst fejlmeddelelsen
            til <a href='mailto:admin@chelth.dk'>admin@chelth.dk</a><br><br><br><br><br>
            <center><a href='www.chelth.dk</a><br><br><br></center>";" target="_blank">http://www.chelth.dk'>www.chelth.dk</a><br><br><br></center>";
  }
}
?>
Avatar billede svoeber Nybegynder
03. februar 2003 - 22:15 #16
Ja, men det jeg mener er i toppen af din fil - der hvor der startes med "<?php" - og i bunden af din fil - der hvor der sluttes med "?>"
Avatar billede ksostack Nybegynder
03. februar 2003 - 22:16 #17
må jo nok give svoeber ret i, at fejlen nok ligger i din db_funktioner.php!!!!
//ksostack
Avatar billede svoeber Nybegynder
03. februar 2003 - 22:17 #18
Ahhh, der var den :)
Du har kun brug for at have ét "<?php" i toppen
og ét "?>" i bunden
Avatar billede svoeber Nybegynder
03. februar 2003 - 22:18 #19
Dvs. fjern alle de mellemliggende "<?php"'er og "?>"'er - og sørg ikke at have nogen blanke tegn efter det sidste "?>"
Avatar billede claushelth Nybegynder
03. februar 2003 - 22:25 #20
svoeber -> Mange tak...for denne løsning...jeg er næsten lige startet på php så de grundliggende ting er ikke helt på plads endnu. Du får pointene (Håber det er iorden ksostack)

;-)
Avatar billede claushelth Nybegynder
03. februar 2003 - 22:26 #21
hvad...nu kan jeg ikke give point...vender tilbage omlidt igen og prøver igen...de skal nok komme.
:-)
Avatar billede claushelth Nybegynder
03. februar 2003 - 22:28 #22
når du fik dem...hmmm, jeg forstår ikke helt deres system her, mht pointgivningen...med de kom frem.
Avatar billede svoeber Nybegynder
03. februar 2003 - 22:28 #23
Jeg vil så lige tilføje, at de to funktioner ksostack foreslog er glimrende at bruge sammen med header()-funktionen - bare ikke i de tilfælde, hvor man gerne vil have evt. output fra fejlbeskeder.
Avatar billede svoeber Nybegynder
03. februar 2003 - 22:29 #24
Takker...
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