Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

php_self gebruiken voor redirect?

Anoniem
Lord Wodan
15 antwoorden
  • jaja daar ben ik weer…

    ik ben bezig met een soort van een catalogus.

    Iedereen kan er vrolijk doorheen bladeren (+-500 artikelen).

    Maar zodra iemand ergens op wilt reageren/aanschaffen/wijzigen moet hij of zij inloggen..

    op zich zal ik dat wel prima voor elkaar krijgen maar zodra de inlog-pagina akkoord gaat met de gegevens wordt de bezoeker door het inlogscript teruggestuurd naar index.php

    stel dat diegene nu bij catalogus.php?artikel=244 zat te snuffelen en dacht "daar wil ik op reageren!" dan gaat hij inloggen en jawel… terug naar index.php (snetver, waar stond dat artikel nou??)

    kan ik zijn huidige positie opslaan in een sessie variabele met php_self en die variabele gebruiken om hem terug te brengen waar hij was?

    of is hier een andere functie voor?
  • Op het moment dat die gebruiker wordt doorverwezen naar jouw inlogpagina is voor je script een variabele beschikbaar die laat zien waar de gebruiker vandaan kwam, namelijk:

    $_SERVER["HTTP_REFERER"];

    als je aan het einde van je inlogscript de volgende code gebruikt:

    header("Location:" . $_SERVER["HTTP_REFERER"]);

    gaat de bezoeker weer terug naar die pagina.

    Het is net als bij een formulier natuurlijk beter om eerst de waarde van $_SERVER["HTTP_REFERER"] te controleren en eventueel kun je het adres vasthousen in een session variabele als je bijvoorbeeld bij een verkeerde login de pagina nogmaals zou herladen (en dus de referer verandert)
  • maar ik moet de variabele opslaan terwijl hij nog op de "oude" pagina kijkt…

    als ik het doe zoals jij bedoelt en hij komt van www.rotjeknor.nl (hahaha ff geklikt en hij bestaat ook nog!! :lol: :lol: , was niet de bedoeling)dan gaat hij daar naar terug..

    met de manier waarop ik het wou proberen kan ik controleren of hij bij mijn eigen site vandaan kwam door

    if isset(oudepositie)

    else index.php

    toch?
  • [quote:b681100809]maar ik moet de variabele opslaan terwijl hij nog op de "oude" pagina kijkt…[/quote:b681100809]

    dat is onmogelijk, maar op zich denk je wel juist. Idd, als iemand van rotjeknor.nl komt, dan zou die daar niet naar terug moeten, vandaar ook dat je de waarde van $_SERVER["HTTP_REFERER"] zou moeten controleren. Je zou kunnen controleren of de waarde ervan wel begint met het de url van je website.

    Maar in ieder geval, 'jouw techniek' en 'mijn techniek' zijn hetzelfde, maar $_SERVER["HTTP_REFERER"] is dus de variable die je moet hebben om te zien waar iemand vandaan komt.
  • toch loop ik te worstelen met referer..

    ten 1 ste heb ik op php.net gelezen dat hij niet betrouwbaar is maar het belangrijkste is het volgende..

    mijn login.php is selfredirecting.. dus als iemand een verkeerd wachtwoord invoerd komt hij weer in login.php terecht..
    net zolang tot hij het opgeeft of het goede wachtwoord intikt.

    bij de eerste poging kan de referer netjes index.php zijn maar bij de tweede poging is het login.php…. daar gaat mijn idee…

    ik kan toch de link naar login.php in een include zetten met daar ongeveer in:

    if !isSet $_SESSION['user'] {
    $_SESSION['redirect'] = $PHP_SELF;
    echo "u moet eerst inloggen";
    link naar inloggen
    }

    else

    Hallo gebruiker


    en dan bij de login de variabele $_session['redirect'] gebruiken voor de functie HEADER?
  • Als ik het geod begrijp wil je du siemadn laten registreren/inloggen en als dat is gebeurd, wil je de gebruiker weer naar het juiste artikel/pagina sturen. Ik zag dat je gebuik maar van een artikel_ID. Deze zou ik meesturen naar de login en bij de redirect weer meegeven aan de index.php.

    Misschien moet je in de index.php wel iets doen als een artikelnummer gevuld of leeg is.
  • [quote:3efbf7ef3c="maIRnaairruJ"]Het is net als bij een formulier natuurlijk beter om eerst de waarde van $_SERVER["HTTP_REFERER"] te controleren en eventueel kun je het adres vasthousen in een session variabele als je bijvoorbeeld bij een verkeerde login de pagina nogmaals zou herladen (en dus de referer verandert)[/quote:3efbf7ef3c]

    Je hebt alle stukjes van de puzzel bij elkaar. Je weet nu van sessie variabelen, je weet hoe je het adres moet uitlezen waar iemand vandaan kwam (de id is ook een idee, maar dat werkt niet meer zodra iemand niet vanaf een pagina komt met artikelen, zoals bijv. een contact pagina).

    Dus de eerste keer in het loginscript zet je die referrer in een sessie variabele en de volgende keren gebruik je die waarde. bijv:

    [code:1:3efbf7ef3c]
    if(empty($_SESSION['referer']))
    $_SESSION['referer'] = $_SERVER["HTTP_REFERER"];



    // login correct
    $loc = $_SESSION['referer'];
    $_SESSION['referer'] = '';
    header("Location:" . $loc);

    // login niet goed
    header('Location:login.php');[/code:1:3efbf7ef3c]

    Ook als je de ID zou gebruiken zou het zo gaan, alleen is $_SERVER["HTTP_REFERER"] dan die ID
  • doe het als phpBB … als er niet ingelogd is, stuur dan naar de inlogpagina en geef de url/pagina mee in de URI die de gebruiker wilde openen. Is dat geen idee?
  • ik dacht dat ze dat deden met de phpself

    daar kwam mijn idee dus ook vandaan
  • @MAIR

    Dit werkt inderdaad goed, maar ik las op php.net dat sommige browsers die servervariabele niet ondersteunen…
  • [quote:f0be342169="maIRnaairruJ"]
    [code:1:f0be342169]
    // login correct
    $loc = $_SESSION['referer'];
    $_SESSION['referer'] = '';
    header("Location:" . $loc); ######–> Location tussen " en de .$loc
    // login niet goed
    header('Location:login.php'); #######–> nu de hele inhoud tussen ' (enkel)[/code:1:f0be342169]

    [/quote:f0be342169]

    Hee! dit valt me nu pas op! waarom is dit?

    waarin werkt dit niet?

    [code:1:f0be342169]header('Location: $loc');[/code:1:f0be342169]
    of
    [code:1:f0be342169]header('Location:' $loc);[/code:1:f0be342169]

    Sorry voor de misschien idiote vragen hoor maar soms wordt ik gek van die enkele en dubbele aanhalingstekens.

    ook die . bij .$loc snap ik niet… $loc werkt toch ook?

    alvast wederom bedankt!
  • Ja hoor! ik gebruik nu de $_SERVER["HTTP_REFERER"]

    en degene waarvoor ik de site maak, kijkt met IE5 naar de vooruitgang en $_SERVER["HTTP_REFERER"] wordt niet gevuld!?!?

    Wat ik ook doe om de $_SERVER["HTTP_REFERER"] weer te geven… Bij hem blijft ie leeg??

    hoe kan dat?
  • Heel simpel, zoals je zelf al zei:
    (Bron: http://nl.php.net
    eserved.variables)

    'HTTP_REFERER'

    The address of the page (if any) which referred the user agent to the current page. This is set by the user agent. Not all user agents will set this, and some provide the ability to modify HTTP_REFERER as a feature. In short, it cannot really be trusted.

    Oftewel gebruik dit niet, maar bijv. het volgende:

    login.php
    ———–
    <?php
    error_reporting(E_ALL);
    // dit zorgt voor redirect initialisatie voor gebruik :)
    if(isset($_GET['redirect']) && $_GET['redirect'] != '') {
    $redirect = htmlentities(stripslashes(trim($_GET['redirect'])));
    }else{
    $redirect = '';
    }
    // check of de surfer op de knop heeft gedrukt
    if(isset($_POST['login_submit'])) {
    // check login
    if(login == correct) { // gebruik hier je eigen manier om je login te checken
    echo 'Ingelogd! Klik <a href="'.$redirect.'">hier</a>';
    }else{
    echo 'Niet Ingelogd! Klik <a href="./login.php?redirect='.$redirect.'">hier</a> om te herkansen';
    }
    }else{
    ?>
    <form name="login_form" action="./login.php?redirect=<?=$redirect?>" method="post">
    <input type="text" name="login_username" value="Username"></input><br />
    <input type="password" name="login_password" value="Password"></input><br /><br />
    <input type="submit" name="login_submit" value="Login"></input>
    </form>
    <?php
    }
    ?>

    catalogue.php
    —————-
    <?php
    echo 'Klik <a href="./login.php?redirect='.$_SERVER['PHP_SELF'].'">hier</a> om in te loggen';
    ?>

    Dat zou in principe moeten werken (niet gechecked overigens, type fouten voorbehouden :D)
  • zoiets had ik ook inmiddels in elkaar geflanst..

    maar ik dacht dat dat niet netjes was..

    maar goed, het werkt!

    Bedankt!
  • Geen probleem.

    Das ff het eerste wat me te binne sprong, ik weet niet of het nog netter kan ;)

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.