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] else if statements

None
13 antwoorden
  • Een goedenmiddag,

    Ik heb een klein php probleempje. De volgende code bekijkt de variabele $url_array en aan de hand van de waarde die deze code heeft moet er een bepaalde actie ondernomen worden. Deze variabele werkt verder goed, maar ergens in deze code zit een fout die zorgt voor een eindeloze aanroep:[code:1:56c5a9f50a]/* Indien index wordt opgevraagd doorverwijzen naar home */
    if(empty($url_array)){
    header("Location:/home/");
    exit();
    }
    /* kijken wat opgevraagd wordt en doorverwijzen naar de inleiding */
    if(!isset($url_array[1])){
    if($url_array[0] == 'profiel'){
    header("Location:/profiel/inhetkort/");
    exit();
    }
    elseif($url_array[0] == 'werkwijze'){
    header("Location:/werkwijze/inleiding/");
    exit();
    }
    elseif($url_array[0] == 'projecten'){
    header("Location:/projecten/inleiding/");
    exit();
    }
    elseif($url_array[0] == 'contact'){
    header("Location:/contact/algemeen/");
    exit();
    }
    }
    /* variabelen aanmaken */
    if(file_exists($_SERVER["DOCUMENT_ROOT"]."/content/menu/nav".$url_array[0].".php") and file_exists($_SERVER["DOCUMENT_ROOT"]."/content/".$url_array[0].".php") and !isset($url_array[1])){
    $incnav = $_SERVER["DOCUMENT_ROOT"]."/content/menu/nav".$url_array[0].".php";
    $inccontent = $_SERVER["DOCUMENT_ROOT"]."/content/".$url_array[0].".php";
    }
    elseif(file_exists($_SERVER["DOCUMENT_ROOT"]."/content/menu/nav".$url_array[0].".php") and file_exists($_SERVER["DOCUMENT_ROOT"]."/content/".$url_array[0]."/".$url_array[1].".php") and !isset($url_array[2])){
    $incnav = $_SERVER["DOCUMENT_ROOT"]."/content/menu/nav".$url_array[0].".php";
    $inccontent = $_SERVER["DOCUMENT_ROOT"]."/content/".$url_array[0]."/".$url_array[1].".php";
    }
    /* error geven als de pagina niet bestaat */
    else{
    header("Location:/error/404/");
    exit();
    }[/code:1:56c5a9f50a]Alvast bedankt,

    -termin8or

    PS: waarneer gaat dit forum syntax highlighting ondersteunen :roll:
  • Ik weet het niet heel zeker, maar ik dacht dat "exit" het hele script stopt. Als je alleen uit de if loop wilt moet je "break" gebruiken.

    Maar misschien zit je probllem heel ergens anders…

    wimb
  • Je komt niet eens bij die exits, voor die tijd ben je al naar een andere page gestuurd…

    Weet je zeker dat je niet constant naar dezelfde page gestuurd wordt die je vervolgens weer doorstuurt naar eenzelfde page (met dezelfde check etc)?
  • Misschien is het ook handig om te weten hoe $url_array tot stand komt? :roll:

    - Bas
  • [quote:0063d86e6f="Bill Gates"]Weet je zeker dat je niet constant naar dezelfde page gestuurd wordt die je vervolgens weer doorstuurt naar eenzelfde page (met dezelfde check etc)?[/quote:0063d86e6f]Dat lijkt inderdaad te gebeuren. Maar ik zou niet weten waarom.

    Het volgende gedeelte stond er nog boven. Ik wist niet zeker of het nog van belang was aangezien daar geen fouten in zitten (hoop ik dan):[code:1:0063d86e6f]/* Lange URI's blokkeren */
    if(strlen($_SERVER["REQUEST_URI"])>100){
    header("Location:/error/404/");
    exit;
    }
    /* Controle of het bestand bestaat */
    if(file_exists($_SERVER["DOCUMENT_ROOT"].$_SERVER["REQUEST_URI"])
    and (!is_dir($_SERVER["DOCUMENT_ROOT"].$_SERVER["REQUEST_URI"]))
    and ($_SERVER["SCRIPT_FILENAME"] != $_SERVER["DOCUMENT_ROOT"].$_SERVER["REQUEST_URI"])
    and ($_SERVER["REQUEST_URI"] != "/"))
    {
    $url=$_SERVER["REQUEST_URI"];
    include($_SERVER["DOCUMENT_ROOT"].$url);
    exit();
    }
    /*
    Opgevraagde URI filteren en in array plaatsen.

    1. De eerste regel van het volgende script verwijdert alle HTHML code en JavaScript code
    2. De tweede regel deelt de uri op in een array
    3. De laatste regel verwijdert de eerste array waarde waardoor alles opschuift 1 word dan 0
    */
    $url = strip_tags($_SERVER["REQUEST_URI"]);
    $url_array = explode("/",$url);
    array_shift($url_array);
    /* Deze filtreert twee puntjes in de array eruit. */
    $temp_array = array();
    $i = 0;

    foreach($url_array as $param){
    if($param != "" && $param != "." && $param != ".."){
    array_push($temp_array, strtolower($url_array[$i]));}
    $i++;
    }
    $url_array = $temp_array;[/code:1:0063d86e6f]-termin8or
  • Gebruik eens volledige URL's in je headerverwijzingen, want volgens mij mogen dit geen relatieve zijn.

    Geen Apache (rewrite) :wink: ?

    p.s. Gebruik switch, waar je dit kan gebruiken, want dat leest volgens mij beter dan meedere elsif achter elkaar.
  • Hoi Remy, bedankt voor je reactie.

    Relatieve links geven werkt wel. Ik doe namelijk hetzelfde op een andere site (alleen daar iets simpeler) en daar werkt het wel.

    [b:56f4f7b109]Edit: http://www.php.net/manual/nl/function.header.php, maar het mag dus niet :roll: [/b:56f4f7b109]

    Case switch heb ik ook gedaan, alleen dat werkte ook niet.

    -termin8or

    [b:56f4f7b109]Edit2: Apache rewrite? Dat klinkt wel interessant, alleen denk ik niet dat ik daar toegang tot heb. Het enige waar ik zeker van ben is dat ik toegang heb tot .htaccess :) [/b:56f4f7b109]
  • [quote:e4b20135bd="termin8or"]Het enige waar ik zeker van ben is dat ik toegang heb tot .htaccess[/quote:e4b20135bd]Waar je prima de rewrite regels in kwijt kan ;)
  • @termin8or:

    Je gebruikt allang Apache rewrites, weet je nog? :D

    Ennuh, die code komt me ook ergens vaag bekend voor… :roll:

    - Bas
  • @bas echt waar? :) Het is alleen het probleem dat ik er zelf iets aan wilde toevoegen. Dat als de aanroep is: /contact/ dat het dan wordt /contact/algemeen/

    Iemand een oplossing? Alle mod_rewrite via .htaccess laten verlopen, is dat merkbaar sneller? Want in dat geval is het misschien de moeite waard om me erin te gaan verdiepen.

    -termin8or
  • Aangezien .htaccess nu toch elke keer wordt aangeroepen om een aantal regels te doorlopen kan je ook best via datzelfde bestand dergelijke dingen transformeren. Het is niet eens echt moeilijk. Voeg het volgende toe aan het bestand:[code:1:b2755d9984]RewriteRule ^contact/$ /home/www/path/to
    oot/contact/algemeen/[/code:1:b2755d9984]

    [b:b2755d9984]!!![/b:b2755d9984] Let er wel even op dat dit [i:b2755d9984]niet[/i:b2755d9984] in de adresbalk komt, maar voor de server werkt het wel hetzelfde.

    - Bas
  • Ik had het al opgelost met php:[code:1:417e11f357] if($url_array[0] == 'profiel' and !isset($url_array[1])){
    header("Location:/profiel/inhetkort/");
    exit();
    }
    elseif($url_array[0] == 'werkwijze' and !isset($url_array[1])){
    header("Location:/werkwijze/inleiding/");
    exit();
    }
    elseif($url_array[0] == 'projecten' and !isset($url_array[1])){
    header("Location:/projecten/inleiding/");
    exit();
    }
    elseif($url_array[0] == 'contact' and !isset($url_array[1])){
    header("Location:/contact/algemeen/");
    exit();
    }[/code:1:417e11f357]Om een of andere reden werkt dit wel.

    -termin8or
  • Oke, nu wilde ik het toch gaan proberen via .htaccess op te lossen, ik had de apache docs al een beetje doorgespit en het volgende zou moeten werken:[code:1:f89e2ee1a3]RewriteRule ^/$ /home/ [R]
    RewriteRule ^/profiel/$ /profiel/inhetkort/ [R]
    RewriteRule ^/werkwijze/$ /werkwijze/inleiding/ [R]
    RewriteRule ^/projecten/$ /projecten/inleiding/ [R]
    RewriteRule ^/contact/$ /contact/algemeen/ [R][/code:1:f89e2ee1a3]Maar dat doet het dus niet. Iemand ervaring hiermee?

    -termin8or

Beantwoord deze vraag

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