Allen ik heb een raar fenomeen

ik wil een php include in een pagina.
dit werkt perfect in de pagina zelf als ik onderstaande intype


<td width="201"><?php include("datumdropdown.php");?></td>


maar als ik echter deze pagina in een Case functie steek waar ik al mijn html wil echoen
dan krijg ik de melding als in de titel

<?php
echo"    <td width='201'>". include('datumdropdown.php')."</td>";
?>


Failed opening 'datumdropdown.php' for inclusion (include_path='.')

wat doe ik mis?
Als de eerste schrijfwijze wel werkt houd je die toch gewoon aan? De constructie van de tweede variant is gewoon raar, een echo van een geconcateneerde include?

What does that even mean :/
de include zit in een tabel
en ik wil deze tabel alleen laten zien als er een requirement is voldaan
zoiets als onderstaand



<?php

switch (1){

Case 1:
echo"<table >";
echo"<tr>";
echo"    <td width='201'>". include('datumdropdown.php')."</td>";
echo"</tr>";
echo"</table>";

break;
}
?>

Waarom elke regel een echo gebruiken? Je kan een echo ook over meerdere regels gebruiken.

Verder lijkt het mij zinvoller om een functie aan te maken in je datumdropdown.php die je dropdown-menu genereert. En dat je die functie aanroept in je echo. Dat lijkt me een stuk netter.

<?php
// hoop code
echo'<td width="201">'.generate_dropdown().'</td>';
?>
Ok ik kan meedere echo samen nemen maar wou effen de situatie schetsen.

het zal goed zijn dat jouw functie aanroepen werkt- maar ik zou niet weten hoe dat werkt

ik vroeg me gewoon af waarom dit niet werkt?
omdat het op dezelfde pagina maar dan niet in de switch / case wel werkt
Op zich zou je gewoon include moeten kunnen gebruiken, geconcateneerd in een string.
Die foutmelding vertelt meer dat hij in de huidige working-directory geen datumdropdown.php kan vinden.

Maar persoonlijk vind ik een eigen geschreven functie veel netter.
OK Ariën

dat dacht ik ook maar blijf die error krijgen, en zou echt die datum drop down in die tabel moet hebben

dit is mijn datumdropdown.php
hoe zou ik dit dan in een functie moeten steken? heb hier geen verstand van

<?php
// De variabelen die gevuld worden zijn: $iDag, $iMaand en $iJaar

// Geef hier zelf de jaartallen die ingevuld mogen worden in de dropdown
$jaar        = range( 2006, 2015 );   

// Array met de namen van de maanden
$maand    = array(    "Januari", "Februari", "Maart", "April", "Mei", "Juni",
                        "Juli", "Augustus", "September", "Oktober", "November", "December");
                        
// Dropdown voor de dagen
echo '<select name="iDag">';
for($i=1; $i<=31; $i++)
{
    echo '<option value="' . $i . '">' . $i . '</option>';
}
echo '</select>';

// Dropdown voor de maanden
$count    = count($maand);
echo '<select name="iMaand">';
for($i=1; $i<=$count; $i++)
{
    echo '<option value="' . $i . '">' . $maand[$i-1] . '</option>';
}
echo '</select>';

// Dropdown voor de jaren
$count    = count($jaar);
echo '<select name="iJaar">';
for($i=1; $i<=$count; $i++)
{
    echo '<option value="' . $jaar[$i-1] . '">' . $jaar[$i-1] . '</option>';
}
echo '</select>';
?>	

mijn inziens zijn er twee type "nette" includes:

1) om classes of functies in te laden (zoals Aar al een beetje aangaf)
2) om de view ofwel template in te laden

In alle andere gevallen ( en zeker midden in een regel): bad practice!

Daarbij zijn includes erg confusing. Stel je de volgende directory structuur voor:

/index.php
/lib/config.php
/lib/functions.php

nu wil je config.php vanuit index.php inladen:
<?php include 'lib/config.php'; // dit werkt ?>

Maar nu wil je (stel dat) vanuit config.php functions.php includen:
<?php include 'functions.php' // of was het nou include lib/functions.php ??? ?>

Volgens mij één van de belangrijkste redenen om over te stappen op (een framework met) een frontcontroller
Een framework, wat Frank zegt, is handig als je wat meer ervaring in PHP hebt, en goed weet hoe je eigen functies moet bouwen en kan organiseren tot classes.

Voor nu lijkt het mij het beste om eerst een eigen functie aan te maken voor je dropdown-menu.
Zie daarvoor deze tutorial: http://www.tizag.com/phpT/phpfunctions.php

Het komt er dan op neer dat je dat je dus zo een structuur krijgt:

<?php
function generate_dropdown(){
// jouw code hier.
return $code;
}
?>

Let er dan wel op dat alles wat je in je functie echo'd, dat je dit dan in een variabele opslaat (bijv. $code), welke je aan het eind dan returned.
De eerste variant werkt nog steeds in een switch-statement, er hoeft niets te veranderen:
<?php
switch ($whatever):
    case 'something':
        ?><td width="201"><?php
            include("datumdropdown.php");
        ?></td><?php
    break;
}
?>

Als je ook zorgt dat je maar 1 of enkele scripts hebt (denk bijvoorbeeld aan index.php) die in dezelfde directory staan (EDIT: die als kapstok dienen om de rest van je includes aan op te hangen), dan kun je altijd alle andere onderdelen op dezelfde manier includen. Idealiter heb je "one point of entry" (index.php).

@Ariën
Als je een vast onderdeel in je site hebt zitten wat je maar 1x gebruikt in je hele layout, zou ik hier persoonlijk geen functie van maken. Een functie heeft pas een zekere meerwaarde als je deze meerdere keren (tegelijkertijd) gebruikt. Ik denk dat hier een include meer op zijn plaats is (pun intended :)).

@Frank
Een framework is wellicht een beetje overkill, je zou ook kunnen volstaan met een simpele autoloader.
De intentie was een beetje om er op te hameren dat je een duidelijk beeld hebt van je mappenstructuur en nu we het er toch over hebben zijn er ook verschillende typen .php bestanden. Ik zelf maak graag de volgende onderverdeling:

- landing bestanden -> de pagina waar een gebruiker op 'landt' zoals index.php about.php en contact.php
- libraries -> hierin schrijf je classes of functies
- configuratie -> hierin staat je database servername, username en wachtwoord en meer van dat soort zaken.
- templates -> hierin staat de HTML met wat php variabelen die ge-echo-ed worden.

Als je hier nu al eens over nagedacht hebt dan ben je volgens mij al een aardig eindje in de goede richting.

@Thomas: Natuurlijk is autoloading een geweldige tool maar ook deze is onbekend voor een PHP beginneling...

Reageren