Probleme mit "foreach" & "include"

Alles, was PHP betrifft, kann hier besprochen werden.

Probleme mit "foreach" & "include"

Postby Majora » 06. January 2007 10:26

Ich habe eine Datenbank angelegt, die Beschreibungen zu (noch hochzuladenden) Bildern speichert. Ein file (gallery_contents.php) extrahiert diese Daten und speichert sie in einem Array $gallery wiefolgt:

while($row=mysql_fetch_array($result)) //creates multidimensional array containing the gallery data
{
foreach($row as $key=>$value)
{
$gallery[$row['Dateiname']][$key]=$value;
}
}

Diese foreach-Schleife scheint zu funktionieren. Das Problem liegt im folgenden file. Ich integriere "gallery_contents.php" mittles include in ein anderes file (fnc_upload_form.php) um das $gallery-array zur Verfügung zu haben. Dann möchte ich gerne die Werte aus diesem multidimensionalen Array auslesen, um sie dann in einzelnen statements verwenden zu können. Dazu verwende ich folgende Konstruktion:

foreach($gallery as $image) //extracts the values of the $gallery-array
{
foreach($image as $key=>$value)
{

Ich sehe in dieser Konstruktion keinen Fehler, aber da muss einer sein, denn ich sehe folgende Fehlermeldung:

Warning: Invalid argument supplied for foreach() in /home/.../httpdocs/admin/fnc_upload_form.php on line 14

Line 14 ist die erste der beiden foreach-Schleifen. Kann mir hier jemand helfen?


Das zweite Problem ist mehr technischer Natur. Ich habe die files zur Website in verschiedenen Ordner organisiert und habe nun das Problem, dass ich in einem Script, dass sich im Unterordner a befindet, ein Script aus Unterordner b integrieren möchte. Ein einfach "include"-Befehl geht ja nicht, da er automatisch im Unterordner a nach dem zu integrierenden file sucht. Gebe ich aber die komplette URL zum file im Unterordner b im "include"-Befehl an, meldet er:

Warning: main(): URL file-access is disabled in the server configuration in /home/.../gallery_contents.php on line 10

Da ich nicht der Administrator und somit keinen Zugang zu php.ini habe, kann ich dort nichts entsprechendes aktivieren oder ist mein statement doch falsch?
Ansonsten: Gibt es noch andere Möglichkeiten ein file aus einem anderen Unterordner in das Main-script zu integrieren als der "include"-Befehl mit vollem Pfad?

Vielen Dank für Eure Hilfe!
Majora
 
Posts: 6
Joined: 06. January 2007 10:00

Postby Wiedmann » 06. January 2007 12:01

Code: Select all
while($row=mysql_fetch_array($result)) //creates multidimensional array containing the gallery data
{
foreach($row as $key=>$value)
{
$gallery[$row['Dateiname']][$key]=$value;
}
}

Diese foreach-Schleife scheint zu funktionieren.

Wieso scheint? Entweder es funktioniert oder nicht (kannst du ja einfach überprüfen...).

Allerdings schreibst du ja hier:
Code: Select all
Warning: Invalid argument supplied for foreach() in /home/.../httpdocs/admin/fnc_upload_form.php on line 14

Line 14 ist die erste der beiden foreach-Schleifen.

Ergo: diese foreach-Schleife tut also nicht...
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Majora » 06. January 2007 12:54

Bzgl. des integrierten fies "gallery_contents.php" bekomme ich keine Fehlermeldung. Die Fehlermeldung bezieht sich auf die doppelte foreach Schleife im main-script und zwar auf die erste, wo er mir eben den Fehler bzgl. Linie 14 bringt. Das die nicht funktioniert, sehe ich entsprechend. Was ich aber nicht begreife ist, wieso diese Schleife nicht funktioniert. Ich mein ich kopiere das Muster ja quasi von einer Vorlage (Auslesen eines multidimensionalen arrays), nur mit anderen Variablennamen, was ja keinen Unterschied machen sollte. Ich hab's noch weiter überprüft: Das script stoppt beim ersten "as" der doppelten foreach Schleife mit der entsprechenden Fehlermeldung - wieso?
Majora
 
Posts: 6
Joined: 06. January 2007 10:00

Postby Wiedmann » 06. January 2007 13:35

Erst einmal komm ich bei deiner Beschreibung nicht wirklich mit:
Die Fehlermeldung bezieht sich auf die doppelte foreach Schleife im main-script

Was für eine doppelte foreach-Schleife? Du hast doch nur zwei einzelne Schleifen aus 2 Scripten gepostet?

und zwar auf die erste, wo er mir eben den Fehler bzgl. Linie 14 bringt.

Ist die Zeile 14 bei dem dabei was ich zitiert habe vorher?

Poste doch bitte nur mal genau den Codeteil der Fehlermeldung, zusammen mit den Zeilennummern.
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Majora » 06. January 2007 15:54

Sorry, ich dachte es sei klar, was ich damit meine. Aber wenn man nicht selbst schon stundenlang nach dem Fehler sucht, sieht's natürlich anders aus.

Also das hier ist der Code im zu integrierenden file (vielleicht steckt der Fehler eben doch hier, auch wenn mir keiner angezeigt wird, und ich finde ihn nicht, deshalb schreib ich das auch rein):
Code "gallery_contents.php":
...
$result=mysql_query($sql,$connect) or die("Query failed: ".mysql_error());

while($row=mysql_fetch_array($result)) //creates multidimensional array containing the gallery data
{
foreach($row as $key=>$value)
{
$gallery[$row['Dateiname']][$key]=$value;
}
}
...
Und das hier ist der Code vom main-script, wo er mir den oben genannten Fehler auf Zeile 14 gibt:
...
session_start();
include("gallery_contents.php"); //includes an array $gallery containing the contents of the gallery database

function upload_form($formname,$newdata_check,$newdata="")
{
foreach($gallery as $image) //extracts the values of the $gallery-array, Line 14
{
foreach($image as $key=>$value)
{
...
Ich poste das script mal nur bis dahin, da die Funktion länger ist und der Fehler auf Linie 14 liegt. Der weitere Code dürfte für den Fehler also irrelevant sein, oder?
Ich bezeichne die foreach-Schleifen deshalb als doppelte Schleifen, weil ich zwei hintereinander öffne (geschlossen werden sie einiges weiter unten) um den Inhalt des multidimensionalen arrays $gallery zu lesen.
Ist der Aufbau des files und wo der Fehler steckt nun klarer oder soll ich weitere Elemente posten?
Majora
 
Posts: 6
Joined: 06. January 2007 10:00

Postby Wiedmann » 06. January 2007 18:28

Code: Select all
function upload_form($formname,$newdata_check,$newdata="")
{
    foreach($gallery as $image) //extracts the values of the $gallery-array, Line 14
    {
        foreach($image as $key=>$value)
        { }
    }
}

http://de.php.net/manual/en/language.va ... .scope.php
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Majora » 07. January 2007 12:08

Vielen Dank für den Hinweis. Ich vermute, du wolltest mir damit sagen, dass ich die $gallery array-Variable global machen muss, um sie auch innerhalb der Funktion verändern zu können. (Oder hab ich was übersehen?) Ich habe daraufhin mein Script wiefolgt abgeändert:

"fnc-upload_form.php":

include("gallery_contents.php"); //includes an array $gallery containing the contents of the gallery database

function upload_form($formname,$newdata_check,$newdata="")
{
global $gallery; //needed to use the $gallery-array inside the function
foreach($gallery as $image) //extracts the values of the $gallery-array, Line 21
{
foreach($image as $key=>$value)
{
}
}
Mit dem global statement müsste die Variable nun innherlab der Funktion ebenfalls gelten, oder? Für mich unverständlich bringt er mir aber immer noch den gleichen Fehler:

Warning: Invalid argument supplied for foreach() in /home/.../httpdocs/admin/fnc_upload_form.php on line 21

Die Zeilennummerierung hat sich etwas verschoben, bezieht sich aber immer noch auf die gleiche Zeile.
Was ist an diesem foreach-statement nur so falsch??
Majora
 
Posts: 6
Joined: 06. January 2007 10:00

Postby Wiedmann » 07. January 2007 12:45

"$gallery" wird kein Array sein.
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Majora » 07. January 2007 15:56

Sorry, aber nach langem Suchen und Probieren muss ich sagen, ich sehe das Problem wirklich nicht. Ich habe auf der Seite, die du mir angegeben hast, folgende statements gefunden:

This will work:
<?php
$MyArray = array("Dog");

function SeeArray(){
global $MyArray;
if (in_array("Dog",$MyArray)){
foreach ($MyArray as $Element){
echo "$Element <hr/>";
}
}
}

SeeArray();
?>

Ich mein, ich programmier die foreach-Schleife doch genau gleich (abgesehen des einen statements, dass ich nicht brauche). Wieso also ist $MyArray hier ein array und bei mir $gallery keins?
Kannst du mir nicht einen Tipp geben, wie es korrekt heissen müsste, damit er $gallery als array erkennt und die foreach-Schleife funktioniert?
Majora
 
Posts: 6
Joined: 06. January 2007 10:00

Postby Wiedmann » 07. January 2007 16:12

und bei mir $gallery keins?

Ist es denn keines?
Bzw.: ist es nur in dieser Function keines oder schon nach dem ersten foreach in gallery_contents.php nicht?
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Majora » 07. January 2007 18:57

Also diese foreach-Schleife bringt mich noch zur Verzweiflung. Also ich hab lange rumprobiert und nachgedacht, aber ich kann Dir nicht folgen, wieso $gallery kein valides array sein soll.
Du willst mir doch sagen, dass folgende Zeile kein array erzeugt (eingebettet in die entsprechende Schleife), oder:

$gallery[$row['Dateiname']][$key]=$value;

Aber wieso denn nicht?
Majora
 
Posts: 6
Joined: 06. January 2007 10:00

Postby Wiedmann » 07. January 2007 19:20

Du willst mir doch sagen,

Ich will gar nichts sagen...

Eigentlich will ich nur, dass du 2 Sachen überprüfst, damit wir definitiv wissen von was wir ausgehen können (ohne wild zu spekulieren was denn sein könnte...).
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany


Return to PHP

Who is online

Users browsing this forum: No registered users and 4 guests