/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Redirect, hvordan?
Fra : Jakob Munck


Dato : 06-11-05 19:13

Jeg har forsøgt mig med tre forskellige koder til at lave redirect, men
ingen af dem virker.

//Her ser du hvad jeg ønsker, men det virker bare ikke:
redirect("visito.php?mode=indmeldelse_3");

//dette virker heller ikke:
header ("Location: [visito.php?mode=indmeldelse_3]");

//Og dette virker heller ikke:
Replace ["visito.php?mode=indmeldelse_3"];


Hvordan skal koden for "redirect" skrives for at virke?


v.h.
Jakob



 
 
Kasper Johansen (06-11-2005)
Kommentar
Fra : Kasper Johansen


Dato : 06-11-05 19:19

"Jakob Munck" <jm2_fjern_dette@webspeed.dk> skrev i en meddelelse
news:436e47ac$0$47066$edfadb0f@dread15.news.tele.dk...
> Hvordan skal koden for "redirect" skrives for at virke?

Der er ikke en egentlig kode for at redirecte i PHP (da det er et script der
køres på serveren).

I stedet kan du udnytte PHP til at udskrive Javascript (der køres
clientsidet).

F.eks:

<?
function Redirect($url){
?><script
language="JavaScript">location.href="<?=$url?>";</script><?
exit();
}

Redirect(http://jubii.dk);
?>


Læg mærke til at jeg har sat en "exit();" til sidst, da der ikke er nogen
egentlig grund til at brugeren skal modtage det resterende indhold af siden
(han skal jo redirectes).

En anden mulighed er at bruge headere til at redirecte, men disse kan jo
ikke sendes efter du har sendt indhold (da headerne sendes før indholdet).
Jeg vurdere derfor at Javascript var det bedste.


--
Mvh Kasper Johansen



Ove Lie (06-11-2005)
Kommentar
Fra : Ove Lie


Dato : 06-11-05 19:19

"Jakob Munck" <jm2_fjern_dette@webspeed.dk> skrev i melding
news:436e47ac$0$47066$edfadb0f@dread15.news.tele.dk...


> //Og dette virker heller ikke:
> Replace ["visito.php?mode=indmeldelse_3"];
>
>
> Hvordan skal koden for "redirect" skrives for at virke?

header("Location: kalender.php");

virker her hos meg



-Ove




philaweb (06-11-2005)
Kommentar
Fra : philaweb


Dato : 06-11-05 19:38

Jakob Munck skrev:
> Jeg har forsøgt mig med tre forskellige koder til at lave redirect, men
> ingen af dem virker.


> Hvordan skal koden for "redirect" skrives for at virke?

<?php
header('HTTP/1.1 301 Moved Permanently');
header('Location: ' . $_GET['visito.php?mode=indmeldelse_3']);
?>


--

venlige hilsener...

Philaweb


MacOS X 10.4.2 server ~ Mini Mac - siden 15. september 2005.

Jakob Munck (06-11-2005)
Kommentar
Fra : Jakob Munck


Dato : 06-11-05 19:52

>
> <?php
> header('HTTP/1.1 301 Moved Permanently');
> header('Location: ' . $_GET['visito.php?mode=indmeldelse_3']);
> ?>
>

Det ser godt ud, men den giver følgende fejlmelding:

-------------------
Warning: Cannot modify header information - headers already sent by (output
started at C:\Programmer\xampp\htdocs\web\visito.org\visito.php:17) in
C:\Programmer\xampp\htdocs\web\visito.org\visito.php on line 192
------------------------------

Linie 192 er denne:
header('HTTP/1.1 301 Moved Permanently');


Hvad skal ændres?

v.h.
Jakob



Geert Lund (06-11-2005)
Kommentar
Fra : Geert Lund


Dato : 06-11-05 19:56

Jakob Munck wrote:

>><?php
>>header('HTTP/1.1 301 Moved Permanently');
>>header('Location: ' . $_GET['visito.php?mode=indmeldelse_3']);
>>?>

> Linie 192 er denne:
> header('HTTP/1.1 301 Moved Permanently');

Disse headers må _selvfølgelig_ ikke udlæses til browseren efter du har
sendt noget output - men skal derimod sendes før du udlæser noget andet
fra dit script til browseren.

--
Med venlig hilsen
Geert Lund
www.GLD.dk

Jakob Munck (06-11-2005)
Kommentar
Fra : Jakob Munck


Dato : 06-11-05 20:12


"Geert Lund" <glund-news@post.tele.dk> skrev i en meddelelse
news:436e51aa$0$2106$edfadb0f@dtext02.news.tele.dk...
> Jakob Munck wrote:
>
>>><?php
>>>header('HTTP/1.1 301 Moved Permanently');
>>>header('Location: ' . $_GET['visito.php?mode=indmeldelse_3']);
>>>?>
>
>> Linie 192 er denne:
>> header('HTTP/1.1 301 Moved Permanently');
>
> Disse headers må _selvfølgelig_ ikke udlæses til browseren efter du har
> sendt noget output - men skal derimod sendes før du udlæser noget andet
> fra dit script til browseren.
>

Undskyld, men jeg er kun begynder i php og jeg forstår ikke, hvad du mener.
Hvad skal jeg lave om? Kan du forklare det mere præcis? Først klikker jeg på
formen, og den sender noget indhold, som puttes ind i en database. Når dette
er sket, vil jeg gerne have redirectet til en liste, hvor de indtasted data
vises. Derfor skal jeg bruge "redirect". Men hvad er - helt præcis - galt
med den angivne kode?


v.h.
Jakob



Geert Lund (06-11-2005)
Kommentar
Fra : Geert Lund


Dato : 06-11-05 20:31

Jakob Munck wrote:

> Undskyld, men jeg er kun begynder i php og jeg forstår ikke, hvad du mener.
> Hvad skal jeg lave om? Kan du forklare det mere præcis? Først klikker jeg på
> formen, og den sender noget indhold, som puttes ind i en database. Når dette
> er sket, vil jeg gerne have redirectet til en liste, hvor de indtasted data
> vises. Derfor skal jeg bruge "redirect". Men hvad er - helt præcis - galt
> med den angivne kode?

Nu har du jo meget behændigt valgt ikke at vise noget af din kode og det
er derfor ikke særlig nemt at give dig anden forklaring end den jeg
allerede har givet dig...

Du kan ikke redirecte ved brugen af header() funktionen på et vilkårligt
sted i din kode - du er nød til at sikre dig din kode ikke har udlæst
noget til browseren (html, fejlmeddelelser o.lign.) inden du sender
redirect headeren.

Altså sætter man den typisk ind øverst i sin kode - men det kommer helt
an på hvordan koden er struktureret.

Men fejlmeddelelsen du får fra PHP:

Warning: Cannot modify header information - headers already sent by (output
started at C:\Programmer\xampp\htdocs\web\visito.org\visito.php:17) in
C:\Programmer\xampp\htdocs\web\visito.org\visito.php on line 192

Fortæller dig jo netop at du allerede i linie 17 af din php-kode har
udlæst noget til browseren (output) - og du først forsøger at sætte din
header i linie 192.

Jeg gætter altså på som skrevet før - at du skal rykke dine headers op i
starten af dit script.

Yderligere bør du måske læse lidt op på http://dk.php.net/header

--
Med venlig hilsen
Geert Lund,
www.GLD.dk

Jakob Munck (06-11-2005)
Kommentar
Fra : Jakob Munck


Dato : 06-11-05 21:16

> Fortæller dig jo netop at du allerede i linie 17 af din php-kode har
> udlæst noget til browseren (output) - og du først forsøger at sætte din
> header i linie 192.
>

Linie 17 i koden ser sådan ud:

<?include "visito.css";?>

Koden i sin helhed ser sådan ud:
--------------------------------------------------------
<?php

$linkDB = mysql_connect("localhost","root","");
mysql_select_db("jmtestdb",$linkDB);
?>

<HTML>
<HEAD>

//Linie 17:
<?include "visito.css";?>

</HEAD>

<BODY leftMargin=0 topMargin=0 MARGINHEIGHT="0" MARGINWIDTH="0"
bgcolor="ffffff">

<?php
$mode = $_GET["mode"];
switch ($mode){

case "indmeldelse":
?>


<form method="post" action="visito.php?mode=indmeldelse_2" target="_self">
Navn: <br>
<input type="text" name="navn">
<br>
Addrese: <br>
<textarea name="adresse" rows="5" cols="40"></textarea>
<br>
<input type="submit" value="send">
</form>


<?php
break;
case "indmeldelse_2":

header("HTTP/1.1 301 Moved Permanently");

$navn = $_POST[navn];
$adresse = $_POST[adresse];

//navn og adresse skrives ind i databasen....

//Og her skal der så redirectes, men det virker ikke:
header("HTTP/1.1 301 Moved Permanently");
header ("Location:
http://localhost/web/visito.org/visito.php?mode=indmeldelse_3");
exit;

break;
case "indmeldelse_3":
?>

//her skal der redirectes til (når det virker)
//Her listes de indsatte adresser....

<?
break;
default:
print "Du har valgt $mode men den eksisterer ikke";
break;
}
?>

</body>
</html>
----------------------------------------

Stadig forstår jeg ikke, hvad der er galt?

v.h.
Jakob



Jacob Atzen (06-11-2005)
Kommentar
Fra : Jacob Atzen


Dato : 06-11-05 20:52

On 2005-11-06, philaweb <philaweb@> wrote:
> Jakob Munck skrev:
>> Jeg har forsøgt mig med tre forskellige koder til at lave redirect, men
>> ingen af dem virker.
>
>
>> Hvordan skal koden for "redirect" skrives for at virke?
>
><?php
> header('HTTP/1.1 301 Moved Permanently');
> header('Location: ' . $_GET['visito.php?mode=indmeldelse_3']);
> ?>

Ifølge RFC'en[1] skal Location angives med en absolut uri som parameter,
dvs. den fulde form: http://www.example.com/etc...

Derudover skal 301 kun bruges i det tilfælde, at en ressource er flyttet
permanent til et nyt sted. Normalt vil man bruge 302 som redirect,
f.eks. i forbindelse med redirect efter formular afsendelse.

[1]: <http://www.faqs.org/rfcs/rfc2616.html>

--
Med venlig hilsen
- Jacob Atzen

Jakob Munck (07-11-2005)
Kommentar
Fra : Jakob Munck


Dato : 07-11-05 00:07

jeg takker for de gode råd. Jeg tror jeg har forstået meningen med de gode
råd, men jeg kunne ikke få det til at virke. Men heldigvis fandt jeg et
stykke php/JavaScript, som løste problemet straks. Her er det:

-----------
print "<script>";
print "self.location='visito.php?mode=indmeldelse_3';";
print "</script>";
---------------

v.h.
Jakob



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408927
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste