Archief - PHP: meteen variabele inladen.

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Bram

Legacy Member
OK, na css ben ik nu ook eens beginnen experimenteren met php, aangezien ik een handig vervangmiddel voor iframes zocht, kwam ik uit op includes, gecombineerd met variables... Nu heb ik een kleine layout gemaakt: http://www.bramme.vekien.co.uk/test, er is nog geen index pagina, de huidige try.php zou index.php moeten worden.
maar m'n vraag is eigenlijk de volgende: als je op de site zou komen (dus naar www.bramme.vekien.co.uk surft, en op index.php terechtkomt) je niet page not found krijgt, maar dat hij eigenlijk onmiddellijk naar index.php?id=home surft, zodat je op home terechtkomt en niet op 404 (page not found)... De php code heb ik gekopieerd van http://www.free2code.net/plugins/articles/read.php?id=199. Hoe ik doe ik dat???

EDIT: kheb ondertussen ook even de link van home aangepast zodat die in ieder geval id al correct invult en een index.php aangemaakt...

Radiance

Legacy Member
Dat doen we met

PHP:
// als er geen id wordt meegegeven
if (isnull($_GET['id']) || $_GET['id'] == "")
{
// dan zetten we er de standaard in
	$_GET['id'] = home;
}

Verschrikkelijke code op die site trouwens, vervang aub alle $id's naar $_GET['id'].
Het nut van de lege strings (de ""'s) in deze lijn:
PHP:
$id = "".$id."".$ext."";
ontgaat mij overigens volledig,
PHP:
$_GET['id'] = $_GET['id'] . $ext;
werkt evengoed naar mijn weten.

Bram

Legacy Member
dank radiance, ik zei het al eerder, ik ben nog maar juist begonnen met php te gebruiken, en de code die ik nu gebruik is gewoon rechtstreeks gekopieerd uit die "tutorial"... voorts hoeft de code ook niet honderd procent professioneel te zijn, het is tenslotte maar voor een chiro sitetje... maar alvast bedankt! ik ga je code eens proberen en kijken of ze werkt (als ze niet werkt doe ik wel iets verkeerd en vraag ik het wel nog eens... ;))
Ok, klopt het als dit de code is die ik in m'n index.php moet zetten???
PHP:
<?
$ext = ".php";
$_GET['id'] = $_GET['id'] . $ext;
if (isnull($_GET['id']) || $_GET['id'] = "home")
{
if (file_exists($id))
{
include($id);
} else {
include("404.php");
}
?>
(zonee, wat is het dan wel?)

killgore

Legacy Member
Radiance zei:
Dat doen we met

PHP:
// als er geen id wordt meegegeven
if (isnull($_GET['id']) || $_GET['id'] == "")
{
// dan zetten we er de standaard in
	$_GET['id'] = home;
}

Verschrikkelijke code op die site trouwens, vervang aub alle $id's naar $_GET['id'].
Het nut van de lege strings (de ""'s) in deze lijn:
PHP:
$id = "".$id."".$ext."";
ontgaat mij overigens volledig,
PHP:
$_GET['id'] = $_GET['id'] . $ext;
werkt evengoed naar mijn weten.
Beste versie die ik ken van dat eerste:
PHP:
$id = isset($_GET["id"])?$_GET["id"]:"";
//Verdere checks of id een bestaande pagina is en indien niet, op home zetten:
$paginas = array("pagina1","pagina2");
if(!in_array($paginas,$id)) $id = "home";
foolproof ;), maar ik ben persoonlijk tegen het pagina-in-layout systeem.
Merk op dat ik niet verderwerk met $_GET['id'], ik kijk 1x of ze bestaat en werk dan voort met een lokale variabele, veel "beter", anders moet je in principe bij ELK gebruik van de get-var gaan testen of ze bestaat.
Deze versie is beter dan het file_exists systeem omdat zij gelijk welke php file kunnen includen dan (bv een config.php of layoutup.php of ...). In dit systeem bepaal JIJ welke pagina's er mogen worden opgeroepen. Nadeel is dat je dan natuurlijk bij elke nieuwe pagina dit moet aanpassen (je kan eventueel met een mysql-db en admin panel werken, ma das wat overpower voor zoiets vind ik :p). Aan de andere kant moet je normaal gezien toch ergens de links plaatsen naar die pagina's, als je je array goed opbouwt kan je deze links in menu's e.d. ook automatisch laten genereren ;), waardoor het aantal aanpassingen weer evenveel blijft als vroeger.

de "".$var."".$var komt denk ik gedeeltelijk voort uit het impliciet casten in java. (blijkbaar geschreven door iemand die zowel java als php niet goed kent, want php code zou gewoon $var.$var zijn en java ""+var+var, niet ""+var+""+var).

ok $id = $id . $ext; is beke rare code, normaal is het $id .= $ext;

Bram

Legacy Member
killgore, beste vriend, wat je me daar allemaal vertelt is chinees voor me... ik ben gewoon op zoek naar het eenvoudigste scriptje waarmee ik vanaf het eerste bezoek home.php include in index.php. dus alsjeblieft geen losse brokken code, maar gewoon simpelweg: kijk, dit moet je in je index.php zetten, van <?php tot ?> opdat ik in de url bv kan zetten ?id=home of ?id=contact. Maar ik vrees dat ik jullie brein beledig, dus ik zwijg nu, de persoon die mij dit scriptje zou kunnen bezorgen ben ik eeuwig dankbaar.

Nog iets anders: als ik de tutorials van w3schools overloop (over php) is dat dan voldoende? of zijn er betere sites die die basis uitleggen of combineer ik beter w3schools met anderen???

WHiSPy

Legacy Member
killgore zei:
Beste versie die ik ken van dat eerste:
de "".$var."".$var komt denk ik gedeeltelijk voort uit het impliciet casten in java. (blijkbaar geschreven door iemand die zowel java als php niet goed kent, want php code zou gewoon $var.$var zijn en java ""+var+var, niet ""+var+""+var).

ok $id = $id . $ext; is beke rare code, normaal is het $id .= $ext;

In java zou 'k eerder een StringBuffer gaan gebruiken aangezien stringconcatenatie een vrij "zware" bewerking is. (strings zijn immutable in java, dus bij concatenatie moet er 'n nieuw object aangemaakt worden per bewerking)

Maar dat ff terzijde. Voor de rest is de manier die killgore aanhaalt volgens mij ook de efficiëntste, aangezien je zelf 100% controle hebt over wat er allemaal gebeurt. Je zou dan eventueel zelfs met een associatieve array kunnen werken zodat de naam van je pagina niet overeen moet komen met de waarde van de get-parameter.

killgore

Legacy Member
wel, men vorig scriptje met enkele uitbreidingen (er staan // achter het statement dat je moet aanpassen).
PHP:
$id = isset($_GET["id"])?$_GET["id"]:"";
$paginas = array("pagina1","pagina2");//
if(!in_array($paginas,$id)) $id = "home";
require($id.".php");


$paginas = array("pagina1","pagina2"); moet je dan omvormen tot iets als:

$paginas = array("home","contact","nieuws");

waarbij home verwijst naar home.php, contact naar contact.php en nieuws naar nieuws.php .

Een alternatief waarbij je id niet exact dezelfde naam moet geven als de pagina is:
PHP:
$id = isset($_GET["id"])?$_GET["id"]:"";
$paginas = array( "eerste pagina" => "pagina1",
                         "tweede pagina" => "pagina2");//
if(!isset($paginas[$id])) $id = "eerste pagina";//
require($paginas[$id].".php");
dit is wat whispy bedoelde denk ik ;).

jij moet je array dan bv. als volgt aanpassen:
PHP:
$paginas = array( "home" => "home",
                        "thuis" => "home",
                         "mail" => "contact");
Je ziet dat je zo bv. voor .php?id=home en .php?id=thuis naar dezelfde pagina verwijst.

ik heb ook een // gezet achter die if-structuur, daar moet je $id="eerste pagina" veranderen naar dan $id="home", $id="thuis" of $id="mail", wat je als std-pagina wilt (niet de pagina-naam maar de indexnaam van de array). in het eerste script moest je dit wijzigen naar de pagina zelf (dus "home"), in het tweede naar dan bv. "thuis".

Zo kan je dus andere namen gebruiken in de url. Vereist gewoon een heeeeel klein beetje meer typwerk :p.

@whispy: uhu, ik bedoelde gewoon dat dit de "std" conversie van een getal naar een string was in java, niet wat het beste om te gebruiken is :p. Ik prefereer ook stringbuffer (hoewel ek et vo men lessen niet mag gebruiken), hoewel dat ook gedeeltelijk uit c++ achtergrond is ;).

Bram

Legacy Member
dus als ik dit
PHP:
 $id = isset($_GET["id"])?$_GET["id"]:"";
$paginas = array("pagina1","pagina2");//
if(!in_array($paginas,$id)) $id = "home";
require($id.".php");
tussen <? > zet dan komt het goed?
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan