webForumDet fria alternativet

Kört fast med funktion i samband med include

PHP

12 svar · 381 visningar · startad av Helmertz

Medlem sedan maj 2005353 inlägg
Frågan#1

Hej!
Nu är klockan mycket, idag igen.. ;)

Jag inleder en php-sida med två stycken includes efter varandra, de angivs med absolut sökväg och det enda som skiljer är filnamnet. Båda avslutas korrekt med citattecken, parantes och semikolon.

Saken är att filen med HTML-kod inkluderas snyggt och prydligt men när min "functions.php" (endast innehållandes funktioner i stil med nedan nämnda) inkluderas och en funktion sedan anropas med funktionensNamn får jag felmeddelandet

Fatal error: Call to undefined function: firstnews() in /home/virtual/helmertz.com/public_html/index.php on line 5

Så här kan en funktion se ut:

function firstNews(){
  $sql = mysql_query("SELECT * FROM nyheter ORDER BY nyhet_id DESC LIMIT 1");
  print '<div id="firstNews">'."\n";
  while($z = mysql_fetch_assoc($sql)){
    echo '<h1>' . $z['nyhet_titel'] . ' <span class="date">| '.$z['nyhet_datum'].'</span></h1>'."\n";
    echo $z['nyhet_text']."\n";
    echo '<p>&#149; <a href="/log/'.$z['nyhet_id'].'"> Läs hela inlägget / kommentera</a></p>'."\n";
  }
  print "</div>\n";
}

Vad gör jag fel? Är det något som ska vara globalt men inte är det? Har jag glömt något väldigt basic? (det känns så!)

Medlem sedan juli 20023 617 inlägg
#2

Nu blev jag osäker, men har det stora N:et betydelse?

Medlem sedan maj 2005353 inlägg
#3

Mysteriet tätnar: funktionen anropas faktiskt med firstNews();

Medlem sedan juli 20023 617 inlägg
#4

Fungerar funktionen som den ska om du skriver in den direkt på sidan?

Medlem sedan maj 2005353 inlägg
#5

fiddler skrev:

Fungerar funktionen som den ska om du skriver in den direkt på sidan?

Yes.

Medlem sedan juli 20023 617 inlägg
#6

Har du testat med en relativ sökväg?

Medlem sedan maj 2005353 inlägg
#7

I och med att jag har två filer som inkluderas precis under varandra och den ena fungerar kan det nog inte vara det (ordningen spelar ingen roll, ändrar jag blir det samma resultat).

Medlem sedan maj 2005353 inlägg
#8

fiddler skrev:

Har du testat med en relativ sökväg?

Oj, tänkte att jag skulle spara tid och svara innan jag testade men du hade faktiskt rätt!

Varför fungerar den ena inkluderingsfilen men inte den andra med abs. sökväg?! Och hur undviker jag att behöva skriva relativ sökväg i alla mina filer? :)

Medlem sedan juli 20023 617 inlägg
#9

Jag antar att det blir detsamma som om du försöker öppna filerna i en webbläsare. Html-filen skrivs ut men php-filen skriver ingenting.

Medlem sedan maj 2005353 inlägg
#10

fiddler skrev:

Jag antar att det blir detsamma som om du försöker öppna filerna i en webbläsare. Html-filen skrivs ut men php-filen skriver ingenting.

Det stämmer, men php-filen innehåller bara funktioner och så länge de inte anropas skriver de ju inte ut någonting. Lägger jag till firstNews(); i min fil med funktioner så skrivs den ut korrekt (om det nu skulle spela någon roll).

Medlem sedan juli 20023 617 inlägg
#11

Bra att du fick det att fungera! Du slipper nog dessvärre inte ifrån att ändra dina absoluta sökvägar.

Att include inte "ser" koden vid absoluta sökvägar kan vi vara glada för. Tänk vilken säkerhetsrisk det skulle vara. Du skulle kunna komma runt det genom att döpa om php-filen till något annat, men det vore nog inte så smart.

Medlem sedan juni 20014 290 inlägg
#12

Ett enkelt sätt för att slippa hålla reda på var dokumentrooten är och så att man kan ge relativa sökvägar mot dokumentrooten oavset var den är är att skriva följande:

include($_SERVER['DOCUMENT_ROOT']."/moduler/nyheter.php");

Ett annat vanligt fel är att man glömer gå över i php läge igen i filen man gör include på.

Medlem sedan maj 2005353 inlägg
#13

fiddler skrev:

Att include inte "ser" koden vid absoluta sökvägar kan vi vara glada för. Tänk vilken säkerhetsrisk det skulle vara. Du skulle kunna komma runt det genom att döpa om php-filen till något annat, men det vore nog inte så smart.

Det har du rätt i!

GunnarD skrev:

include($_SERVER['DOCUMENT_ROOT']."/moduler/nyheter.php");

Den koden fungerar utmärkt!

408 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
131 ms — deklarationer (db)
0 ms — hämta statistik (cache)
274 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)