Redirect in php

Status
Niet open voor verdere reacties.

Frenske123

Terugkerende gebruiker
Lid geworden
2 jul 2007
Berichten
1.260
Laatst bewerkt:
Niet verwonderlijk als je naar dezelfde pagina verwijst die zich weer verwijst die zich weer verwijst die zich weer verwijst etcetera.....

Aan de functie ligt het zeker niet.
 
Het was jou idee toch;)

Volgens mij trap je in de valkuil dat een cookie pas actief is na een refresh nadat je het plaatst. Bij een session gebeurt dit direct.
Na het plaatsen van de cookie moet je even een location-header plaatsen.
 
Laatst bewerkt:
Het was jou idee toch;)

Volgens mij trap je in de valkuil dat een cookie pas actief is na een refresh nadat je het plaatst. Bij een session gebeurt dit direct.
Na het plaatsen van de cookie moet je even een location-header plaatsen.

Klopt. Als je het goed toepast, dan moet het goed gaan.
Als je er moeite mee hebt. Probeer eerst even een stroomlijn diagram te maken met wat er moet gebeuren.
Dat kan je later vertalen naar een goede if-else structuur.
 
Laatst bewerkt:
Heb je het zelf al eens geprobeerd


Je komt iedere keer met wat nieuws .
Je hebt gisteren de code toch ook gezien , toen was het probleem volgens jou dat ik een volledige URL moest gebruiken met header refresh.


Klopt. Als je het goed toepast, dan moet het goed gaan. wat is er dan fout? wat is die goede toepassing.
 
Laatst bewerkt:
Je redirect naar je eigen site die weer naar zichzelf redirect, en die dan zichzelf weer redirect. Een oneindige loop dus. Ergens moet je een voorwaarde creëren waardoor dat niet gebeurt.
Misschien met GET. Probeer eens wat. :)

Maak je code ook eens overzichtelijker met commentaar. Dat helpt voor jou en anderen ook om je script goed te begrijpen.

Lukt het daarna nog niet, dan wil ik wel even kijken.
 
Laatst bewerkt:
Wat wil je eigenlijk bereiken met die header refresh?

Die code heb ik toch geplaatst lijkt me vrij duidelijk.
 
Laatst bewerkt:
Ziet er netjes uit. Ik neem aan dat je de eerder genoemde functie gebruikt die de URL zelfstandig opbouwt?
Of parse_url() ?
 
Laatst bewerkt:
Ik heb die hele functie erin gezet.

PHP:
function url_origin( $s, $use_forwarded_host = false )
{
    $ssl      = ( ! empty( $s['HTTPS'] ) && $s['HTTPS'] == 'on' );
    $sp       = strtolower( $s['SERVER_PROTOCOL'] );
    $protocol = substr( $sp, 0, strpos( $sp, '/' ) ) . ( ( $ssl ) ? 's' : '' );
    $port     = $s['SERVER_PORT'];
    $port     = ( ( ! $ssl && $port=='80' ) || ( $ssl && $port=='443' ) ) ? '' : ':'.$port;
    $host     = ( $use_forwarded_host && isset( $s['HTTP_X_FORWARDED_HOST'] ) ) ? $s['HTTP_X_FORWARDED_HOST'] : ( isset( $s['HTTP_HOST'] ) ? $s['HTTP_HOST'] : null );
    $host     = isset( $host ) ? $host : $s['SERVER_NAME'] . $port;
    return $protocol . '://' . $host;
}

function full_url( $s, $use_forwarded_host = false )
{
    return url_origin( $s, $use_forwarded_host ) . $s['REQUEST_URI'];
}

$absolute_url = full_url( $_SERVER );
 
Bedankt.

Allen nog ff lijken wat ik met andere pagina's doe of alleen op index de taalkeuze.

Anders alleen cookie ophalen en mischien nog een cookie tijd al zal een dag goed zijn
 
Gaat het toch mis , pagina ververs niet of in elk geval moet ik hem weer verversen om als ik bij Frans heb gekozen fr te kunnen zien
(
HTML:
<p>Gekozen taal: <?php echo $_COOKIE['language']; ?></p>
)
Juiste Cookie wordt ook pas na verversen (dus 2e maal) geplaatst.

Doe ik
PHP:
header("Location:$absolute_url");
Krijg ik melding pagina werkt niet

PHP:
<!DOCTYPE HTML>
<?php
// Browser taal van bezoeker

 function url_origin( $s, $use_forwarded_host = false )
{
    $ssl      = ( ! empty( $s['HTTPS'] ) && $s['HTTPS'] == 'on' );
    $sp       = strtolower( $s['SERVER_PROTOCOL'] );
    $protocol = substr( $sp, 0, strpos( $sp, '/' ) ) . ( ( $ssl ) ? 's' : '' );
    $port     = $s['SERVER_PORT'];
    $port     = ( ( ! $ssl && $port=='80' ) || ( $ssl && $port=='443' ) ) ? '' : ':'.$port;
    $host     = ( $use_forwarded_host && isset( $s['HTTP_X_FORWARDED_HOST'] ) ) ? $s['HTTP_X_FORWARDED_HOST'] : ( isset( $s['HTTP_HOST'] ) ? $s['HTTP_HOST'] : null );
    $host     = isset( $host ) ? $host : $s['SERVER_NAME'] . $port;
    return $protocol . '://' . $host;
}

function full_url( $s, $use_forwarded_host = false )
{
    return url_origin( $s, $use_forwarded_host ) . $s['REQUEST_URI'];
}

$absolute_url = full_url( $_SERVER );
echo $absolute_url;
 
// Als $_COOKIE['language'] niet bestaat: Maak cookie aan.
if (!isset($_COOKIE['language']) ) {
    setcookie('language', 'nl');
    header("$absolute_url");
}
 
// kijk naar GET-waardes, en maak de cookie aan, en daarna doorsturen
if  (isset($_GET['language']) && $_GET['language'] == "nl") {
    setcookie('language', 'nl'); 
    header("$absolute_url");
} 
elseif (isset($_GET['language']) && $_GET['language'] == "en") {
    setcookie('language', 'en'); 
    header("$absolute_url");
}
elseif (isset($_GET['language']) && $_GET['language'] == "de") {
    setcookie('language', 'de'); 
    header("$absolute_url");
}
elseif (isset($_GET['language']) && $_GET['language'] == "fr") {
    setcookie('language', 'fr'); 
    header("$absolute_url");
}

//echo $url =  "//{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}";
//echo $directoryURI =basename($_SERVER['SCRIPT_NAME'])
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Cookie test 5</title>
</head>
<body>
    <p>Gekozen taal: <?php echo $_COOKIE['language']; ?></p>
<p><a href="">Geen GET</a></p>
<p><a href="?language=nl">Nederlands</a></p>
<p><a href="?language=en">Engels</a></p>
<p><a href="?language=de">Duits</a></p>
<p><a href="?language=fr">Frans</a></p>
<p><a href="?language=xc">Niet bestaand</a></p>
</body>
</html>
 
Laatst bewerkt:
Waar gebeurt dat niet dan?
 
zoals in code aangegeven.

in de vorige versie met relative url gaat het goed.

Location zal in hele URL ook niet hoeven neem ik aan.

Dit werkt maar wel dus geen vorledige URL

PHP:
$directoryURI =basename($_SERVER['SCRIPT_NAME']);
 
// Als $_COOKIE['language'] niet bestaat: Maak cookie aan.
if (!isset($_COOKIE['language']) ) {
    setcookie('language', 'nl');
    header("Location:$directoryURI");
}
 
// kijk naar GET-waardes, en maak de cookie aan, en daarna doorsturen
if  (isset($_GET['language']) && $_GET['language'] == "nl") {
    setcookie('language', 'nl'); 
    header("Location:$directoryURI");
} 
elseif (isset($_GET['language']) && $_GET['language'] == "en") {
    setcookie('language', 'en'); 
    header("Location:$directoryURI");
}
elseif (isset($_GET['language']) && $_GET['language'] == "de") {
    setcookie('language', 'de'); 
    header("Location:$directoryURI");
}
elseif (isset($_GET['language']) && $_GET['language'] == "fr") {
    setcookie('language', 'fr'); 
    header("Location:$directoryURI");
}
 
Laatst bewerkt:
Dus die met functie (post #13) werkt niet of ik doe iets fout...

Beetje vreemd vandaar dat het mij ook niet opviel.

Cookie wordt zo te zien juist geplaats maar

PHP:
 <p>Gekozen taal: <?php echo $_COOKIE['language']; ?></p>

Loop een stap achter , geeft na verversen pas juiste taal afkorting weer.
 
Laatst bewerkt:
Zoals ik eerder zei is het verstandig om in een Location-header de volledige URL te gebruiken. Let er ook op dat je geen output voor je setcookie() hebt, en zet je error-afhandeling maximaal open.
 
Ik heb die absolute URL toch met die functie , ook gecontroleerd.

errors krijg ik niet.

URL en cookies zijn correct, (url geeft goede land afk. aan en gekozen cookie wordt juist gezet.


Het gaat mis vanaf hier ...Gekozen taal....als ik hierboven bijv, Frans heb gekozen is de echo bijv. Duits (de vorige keuze)
loopt dus een stap achter

PHP:
  <p>[B]Gekozen taal[/B]: <?php echo $_COOKIE['language']; ?></p>

Ik wou taalbestande include en toen merkte ik het pas

Kan het met de If conditie te maken hebben } haakje sluiten
 
Dus tot regel 49 gaat het goed

Deze geeft het juiste resultaat pas weer na verversen


PHP:
<?php echo $_COOKIE['language']; ?>

PHP:
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
// Browser taal van bezoeker
$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
/////
 function url_origin( $s, $use_forwarded_host = false )
{
    $ssl      = ( ! empty( $s['HTTPS'] ) && $s['HTTPS'] == 'on' );
    $sp       = strtolower( $s['SERVER_PROTOCOL'] );
    $protocol = substr( $sp, 0, strpos( $sp, '/' ) ) . ( ( $ssl ) ? 's' : '' );
    $port     = $s['SERVER_PORT'];
    $port     = ( ( ! $ssl && $port=='80' ) || ( $ssl && $port=='443' ) ) ? '' : ':'.$port;
    $host     = ( $use_forwarded_host && isset( $s['HTTP_X_FORWARDED_HOST'] ) ) ? $s['HTTP_X_FORWARDED_HOST'] : ( isset( $s['HTTP_HOST'] ) ? $s['HTTP_HOST'] : null );
    $host     = isset( $host ) ? $host : $s['SERVER_NAME'] . $port;
    return $protocol . '://' . $host;
}

function full_url( $s, $use_forwarded_host = false )
{
    return url_origin( $s, $use_forwarded_host ) . $s['REQUEST_URI'];
}

$absolute_url = full_url( $_SERVER );
//echo $absolute_url;
 
// Als $_COOKIE['language'] niet bestaat: Maak cookie aan.
if (!isset($_COOKIE['language']) ) {
    setcookie('language', 'nl');
    header("$absolute_url");
}
 
// kijk naar GET-waardes, en maak de cookie aan, en daarna doorsturen
if  (isset($_GET['language']) && $_GET['language'] == "nl") {
    setcookie('language', 'nl'); 
    header("$absolute_url");
} 
elseif (isset($_GET['language']) && $_GET['language'] == "en") {
    setcookie('language', 'en'); 
    header("$absolute_url");
}
elseif (isset($_GET['language']) && $_GET['language'] == "de") {
    setcookie('language', 'de'); 
    header("$absolute_url");
}
elseif (isset($_GET['language']) && $_GET['language'] == "fr") {
    setcookie('language', 'fr'); 
    header("$absolute_url");
} 
//echo $url =  "//{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}";
//echo $directoryURI =basename($_SERVER['SCRIPT_NAME'])
?>
/////////////////////T[B]ot hier gaat het goed[/B]///////////////

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Cookie test 5</title>
</head>
<body>
    <p>Gekozen taal: <?php echo $_COOKIE['language']; ?></p>
<p><a href="">Geen GET</a></p>
<p><a href="?language=nl">Nederlands</a></p>
<p><a href="?language=en">Engels</a></p>
<p><a href="?language=de">Duits</a></p>
<p><a href="?language=fr">Frans</a></p>

</body>
</html>
 
Laatst bewerkt:
Rarara ...
Wat mist hier?
Code:
header("$absolute_url");
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan