include() mit variable

menzimuck

menzimuck

Aktives Mitglied
Thread Starter
Dabei seit
20.04.2005
Beiträge
294
Reaktionspunkte
0
guten abend

ich würde gerne per include() eine weitere datei einbinden, allerdings mit gewissen attributen in der url, nämlich datei.php?id=$id
wie kann ich sowas einbinden? wenn ichs normal mit include schreibe, so sucht er nach einer datei mit dem ganzen namen "datei.php?id=$id", was natürlich blöd ist. er sollte jeweils nur datei.php einbinden, und diese sollte die id-anfrage aus der url interpretieren.

gut nacht und danke für eure hilfe
 
Definiere doch vor dem "includen" eine variable. Die kannste dann benutzen. Wenn du innerhalb der Datei die du einbindest FUNCTIONS hast, mußte halt ne globale machen.

Ist vielleicht nicht die schönste Lösung, aber ich habs mal so gemacht. Wenn ich mich recht erinner. :)
 
Ich nehme an es geht um PHP?

Wenn du mit include nicht lokale Dateien einbinden willst, muss dafür ein fopen wrapper installiert/aktiviert sein.

aber: das kann ins Auge gehen wenn Du nicht richtig damit umgehst, deswegen empfehle ich dir eine andere Lösung zu suchen.
 
schon mal die doku zu include gelesen? mit include('http://server/script.php?id=123'); klappt es, du musst aber vollständige url angeben.
ansonsten sollten die variablen auch im "includierten" file vorhanden sein. hast du da eine funktion, ggfs. dann global verwenden?
 
Schau dir nochmal genau an, was include macht!

Die eingebundene Datei wird nicht separat ausgewertet. Der Code darin wird einfach an die Stelle kopiert, wo das include steht und dann die gesamte PHP-Datei ausgewertet.

Dateien, die mit include() eingebunden werden, landen in dem Scope in dem der Befehl steht.

Das bedeutet, dass alle Variablen, die im Ausgangsskript zum Zeitpunkt des include() definiert sind, existieren auch innerhalb des eingebundenen Skripts.

Einfaches Beispiel:

b.php
PHP:
<?php

echo $id;

?>

a.php
PHP:
<?php

$id = "Ich wurde schon in a.php definiert!";

include( 'b.php' );

?>

Rat mal, was ausgegeben wird… ;)
 
was include bewirkt und das variabeln von oben weiterhin gültig sind ist mir schon klar... und das phpmanual habe ich schon gelesen, der trick mit der gesamten url hat mir auch gleich gefallen, nur funktioniert der nicht. könnte das an der phpkonf meines ordners liegen oder wieso tut sowas nicht?

eine variabel oder global zu definieren macht nicht viel sinn denke ich. denn was ich möchte, ist folgendes: in einer tabelle habe ich x zeilen mit je einer id und dazu weiteren feldern. auf der seite, die ich per include einbinden will, lassen sich jeweils alle felder derjenigen zeile darstellen, deren id ich oben in der url eingegeben habe.
auf der hauptseite allerdings, wo der include befehl steht, wird errechnet, wieviele ids vorhanden sind in der tabelle und dann wird soviele mal der include befehl ausgeführt, mit allen ids, schön der reihe nach.

ich hoffe, man versteht noch was ich meine. vielen dank auf jeden fall für eure bisherigen antworten. und noch so nebenbei: wenn ich anstatt per include die seite mit iframe einbinde, kann ich das ohne probleme machen, die sache mit der variable funktioniert hier. aber iframe ist halt schon nicht so super wie include...
 
:confused: :kopfkratz:

Ich werde das Gefühl nicht los.. das dieses Konzept nicht das beste ist.
 
ja das gefühl krieg ich auch bald...;)
 
Na, vielleicht kann ja jemand spontan so helfen. Ansonsten kannste ja mal das Projekt erklären, damit man n anderes Konzept finden kann. Sofern du das möchtest. :hum:
 
Was sagt allow_url_open in der php.ini?
 
ich finde nur allow_url_fopen, und die sind off
 
mit allow_url_fopen=on funktioniert aber auch nicht...
 
oke ich führ mal kurz aus:

PHP:
        <?php
        include("include/db_connection.php");

        $erg = mysql_query("SELECT * FROM galerie_foto_sessions ORDER BY id DESC;");
        if ( mysql_num_rows($erg) ) {
            while ( $sql = mysql_fetch_assoc($erg) ) {
            include('http://www.elmariachi.ch/fotos.php?id=$sql[id]');
        }
        }

        ?>

damit wird also in der tabelle "galerie_foto_sessions" geschaut, wieviele zeilen vorhanden sind. anschliessend wird soviele male der include befehl ausgeführt wie zeilen vorhanden sind.
sehts euch an: index
wenn ihr jetzt auf der include seite oben in der url die id auf 2 setzt, wird ein anderer inhalt ausgegeben, da nicht mehr zeile(id)=1 gezeigt wird sondern zeile(id)=2. und so geht dann das weiter, nur sind im moment zum testen nur zwei zeilen online.
 
Zuletzt bearbeitet:
Die Schreibweise mit der eckigen Klammer kenn ich nicht; aber wenns funktioniert...
Ich machs immer mit dem Pfeil ($sql->id)
Jedenfalls brauchst du die Variable nicht mit der Adresse mitgeben, wie meine Vorposter schon sagten. Sie ist ohnehin in deiner fotos.php als $sql->id verfügbar.

Kleiner Denkanstoß:
Möglicherweise funktionierts nicht weil in deiner fotos.php noch geschrieben steht $sql->id = $_GET['id']. Das musst du natürlich löschen da sonst das ganze ja überschrieben wird.
Ich vermute so ein ähnliches Problem.
 
Zuletzt bearbeitet:
Code:
include('http://www.elmariachi.ch/fotos.php?id=[B]$sql[id[/B]');
Das sind gleich 3 1/2 Fehler in einem...

1) Hier fehlt eine schliessende Klammer.

2) In einfachen Anführungszeichen werden Variablen nicht interpretiert.

3) Selbst in doppelten Anführungszeichen werden nur eindimensionale Variablen aufgelöst. Arrays müssen in anderer Schreibweise oder ausserhalb des Strings gesetzt werden.

3.5) Nur ein halber, da es nur ein Notice erzeugt: Array-Schlüssel sollten in Anführungszeichen gesetzt werden. Andernfalls wäre es eigentlich eine Konstante und kein String.

Richtig wäre also
Code:
include([COLOR="#ff00ff"]"[/COLOR]http://www.elmariachi.ch/fotos.php?id=[COLOR="#ff8c00"]{[/COLOR]$sql[[COLOR="#00ffff"]'[/COLOR]id[COLOR="#00ffff"]'[/COLOR][COLOR="#ff0000"]][/COLOR][COLOR="#ff8c00"]}[/COLOR][COLOR="#ff00ff"]"[/COLOR]);
oder
Code:
include('http://www.elmariachi.ch/fotos.php?id='.[COLOR="#2e8b57"]$sql[/COLOR][[COLOR="#00ffff"]'[/COLOR]id[COLOR="#00ffff"]'[/COLOR][COLOR="#ff0000"]][/COLOR]);
oder ...

Edit:
Und zu dem Konzept, das ist alles andere als gut. :) Ich wette das was Du vor hast kann man auch mit einer einfachen Kapselung in eine Funktion lösen. Statt dem include rufst Du dann Deine Funktion auf. Ist um Meilen performanter, sauberer, sicherer etc.
 
Code:
include('http://www.elmariachi.ch/fotos.php?id=[B]$sql[id[/B]');
Das sind gleich 3 1/2 Fehler in einem...

1) Hier fehlt eine schliessende Klammer.

oder
Code:
include('http://www.elmariachi.ch/fotos.php?id='.[COLOR="#2e8b57"]$sql[/COLOR][[COLOR="#00ffff"]'[/COLOR]id[COLOR="#00ffff"]'[/COLOR][COLOR="#ff0000"]][/COLOR]);

Hab zuvor 1:1 das Selbe geschrieben, aber dachte mir dann dass die Schreibweise .php?id=$sql[id gleichzusetzen ist mit .php?id=$sql->id ...und das mit den einfachen Anführungsstrichen wusste ich selbst nicht...
 
Ich kapiere immer noch nicht, warum Du die ID in der URL übergeben willst – die Variable ist durch den include doch eh schon definiert. Zwar nicht als $id, sondern als $sql['id'], aber das kannst Du ja leicht umschreiben:

PHP:
<?php
include("include/db_connection.php");

$erg = mysql_query("SELECT * FROM galerie_foto_sessions ORDER BY id DESC;");
if ( mysql_num_rows($erg) )
{
    while ( $sql = mysql_fetch_assoc($erg) )
    {
        $id = $sql['id'];
        include('fotos.php');
    }
}
?>

Somit kannst Du in der Datei fotos.php auf die Variable $id zugreifen; und sie hat bei jedem Durchlauf der Schleife genau den Wert der ID des aktuellen Datensatzes...

Wo ist also das Problem?
 
Ich habe die kompletten 2 Seiten auch nicht gelesen :), aber ich verstehe die Idee auch nicht.

Das hier macht doch das, was der TE will:
<?php
hier irgendwelcher Quellcode

$id = $sql["id"];
include("xyz.php");
?>

Und in der Datei xyz.php ist die Variable $id dann doch bekannt.

Das include("xyz.php") muß man so sehen, als ob der Quellcode aus der Datei "xyz.php" anstatt dem Befehl include("xyz.php") an genau dieser Stelle steht.
 
Noch einfacher wäre es vielleicht, wenn man sogar in der fotos.php einfach auf die Variable $sql['id'] zugreift. Und nicht erst den Heckmeck mit einzelner Neuzuweisung macht…
 
Zurück
Oben Unten