php_self veranderen
ik probeer de php_self te veranderen maar daardoor werkt het script niet meer.
Code (php)
1
echo '. <br><br><a href="'.$_SERVER['PHP_SELF'].'?id='.$data['id'].'">Klik hier om naar de reacties te gaan</a></u><hr><br><br>';
Ik probeerde het op deze manier maar die werkte niet.
Code (php)
1
echo '. <br><br><a href="'index.php?pagina=nieuws'?id='.$data['id'].'">Klik hier om naar de reacties te gaan</a></u><hr><br><br>';
Toevoeging op 31/07/2015 18:41:53:
edit: ook al opgelost dit werkt:
- je gebruikt twee keer een "?" in je URL, dat lijkt mij niet kloppen
Ook zou je kunnen overwegen om een "interne link functie" te bouwen, zodat als je je naamgeving ooit nog eens aanpast je mogelijk wat minder/geen werk hebt aan het aanpassen van je links.
Code (php)
1
2
3
2
3
case '1': $content = 'includes/pagina1.php'; break;
case '2': $content = 'includes/pagina2.php'; break;
case '3': $content = 'includes/pagina3.php'; break;
case '2': $content = 'includes/pagina2.php'; break;
case '3': $content = 'includes/pagina3.php'; break;
die twee ?'s ? Daar zit ik vast.
Ik heb een nieuws pagina.
op die nieuwspagina kan je naar een pagina met reacties gaan:
nieuws.php?id=x
Hoe krijg ik dat in index.php?page=nieuws?id=x
&arg2=val2.
De ? markeert de start van je querystring.
De & is het scheidingsteken voor tussen de verschillende key-value paren van je querystring.
Daarnaast zou je, als je URLs in een href-property van een a-tag zet, de & moeten schrijven als &.
En je zou ook (op zijn minst) de values van je querystring key-value paren moeten urlencoden.
De correcte opbouw van een URL is: http(s)://(subdomein.)domein.tld/script.php?arg1=val1De ? markeert de start van je querystring.
De & is het scheidingsteken voor tussen de verschillende key-value paren van je querystring.
Daarnaast zou je, als je URLs in een href-property van een a-tag zet, de & moeten schrijven als &.
En je zou ook (op zijn minst) de values van je querystring key-value paren moeten urlencoden.
Gewijzigd op 31/07/2015 20:53:01 door Thomas van den Heuvel
In de toekomst nooit php_self meer gebruiken, mensen kunnen html code invoeren via de url die dan word uitgevoerd.. (XSS)
PHP Maarten op 01/08/2015 10:20:55:
In de toekomst nooit php_self meer gebruiken, mensen kunnen html code invoeren via de url die dan word uitgevoerd.. (XSS)
Een valide punt, maar als je je bedient van het credo "escape output" is dit veilig lijkt mij.
(EDIT: bij PHP_SELF heb je dit probleem toch niet? Wellicht dacht je aan REQUEST_URI?)
Hulpfunctie:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
// aanname: je gebruikt UTF-8
function escape($in) {
return htmlspecialchars($in, ENT_QUOTES, 'UTF-8');
}
?>
// aanname: je gebruikt UTF-8
function escape($in) {
return htmlspecialchars($in, ENT_QUOTES, 'UTF-8');
}
?>
Je formulier:
Code (php)
1
2
3
2
3
<form action="<?php echo escape($_SERVER['PHP_SELF']) ?>" method="whatever" accept-charset="UTF-8">
...
</form>
...
</form>
Het nadeel van PHP_SELF is wel dat deze enkel de naam van het (uitvoerende) script bevat, en geen querystring-parameters.
Daarnaast zou je ook beter een soort van interne link functie kunnen gebruiken zodat de URL niet hardcoded is. Zo gebruik ik zelf bijvoorbeeld een methode in mijn routing class die SEO-vriendelijke URL's uitspuugt op grond van een pagina-id. Je kunt ook querystring-parameters als argument meegeven die automatische ge-urlencode() worden. Het enige wat je dan bij afdrukken nog hoeft te doen is escaping voor de HTML-context zelf.
Bijvoorbeeld een link voor het (verwerken van het) wijzigen van een artikel:
Code (php)
In de eerste parameter kun je het pagina-id opgeven, of false voor dezelfde pagina. De tweede parameter bevat de querystring variabelen. De actionVar (waarvan de naam configurabel is) geeft aan welke actie uitgevoerd dient te worden.
De link-methode zorgt voor het opbouwen van de URL en alles, daarna is het simpelweg een kwestie van afdrukken:
$formAction bevat bijvoorbeeld: http://www.domein.tld/admin/articles?action=editArticleProcess&id=73
Je hoeft de code van de article-admin dan nooit meer aan te passen afhankelijk van waar deze code staat of wordt aangeroepen, dit maakt dan namelijk niet uit als je de adressering regelt volgens zo'n intern link stramien die de opbouw van de URL verzorgt.
Gewijzigd op 01/08/2015 12:08:52 door Thomas van den Heuvel