php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2006

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 13.03.2006, 21:15  
Erfahrener Benutzer
 
Registriert seit: 10.10.2007
Beiträge: 104
horstenpeter befindet sich auf einem aufstrebenden Ast
Standard Verschachteltes Array: Daten auswählen

Hallo,

ich habe gerade das Problem, daß ich ein verschachteltes Array mit Hilfe
einer foreach - Schleife auslesen und weiterverarbeiten möchte. Diese
sieht z.Zeit so aus:

Code:
	  foreach ($grundrisse as $grundriss)
	  {
	    echo ("Code für Grundrisse wird ausgeführt
");
	    echo ("Teil:");
	    echo ("<pre>");
	    print_r($grundriss);
	    echo ("</pre>");
	   $gtitel = $titel;
	   mysql_query("INSERT INTO grundriss (titel, sub_id) VALUES '$gtitel', '$sub_id'"); 
	   $g_id = mysql_insert_id();
	   $grfilename = sprintf("grundriss_%s_%s.%s", $new_id, $g_id, $extension);
	   mysql_query("UPDATE grundriss SET bild = '$grfilename' WHERE g_id = '$g_id'");
	   move_uploaded_file($grundriss['tmp_name'], $images_dir . '/' . $grfilename);
	   $echo = $grundriss['tmp_name'];
	   echo ("tmpname: $echo");
	  }
Jetzt habe ich das Problem, daß das Array (es enthält Grafiken) offenbar nicht so aufgebaut habe, wie ich es mir dachte, denn die Ausgabe der foreach - Schleife liefert mir folgendes:

Code:
Code für Grundrisse wird ausgeführt
Teil:

Array
(
    [0] => Array
        (
            [0] => kgeg.jpg
            [1] => ogdg.jpg
        )

    [1] => Array
        (
            [0] => kgeg.jpg
            [1] => 
        )

)

Notice: Undefined index: tmp_name in D:\arbeit\server\endfassung\redaktion\upload_immo.php on line 98

Notice: Undefined index: tmp_name in D:\arbeit\server\endfassung\redaktion\upload_immo.php on line 99
tmpname: Code für Grundrisse wird ausgeführt
Teil:

Array
(
    [0] => Array
        (
            [0] => image/jpeg
            [1] => image/jpeg
        )

    [1] => Array
        (
            [0] => image/jpeg
            [1] => 
        )

)

.
.
.
Ich bearbeite also mit meiner foreach - Schleife nicht die einzelnen im
Array gespeicherten Grafiken, sondern immer eine bestimmte Eigenschaft
aller im Array vorhandenen Grafiken. Wie muss ich die Schleife
verändern, damit die einzelnen Grafiken der Reihenfolge nach
angesprochen werden ?

Vielen Dank,
Johannes
horstenpeter ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 13.03.2006, 21:39  
Erfahrener Benutzer
 
Registriert seit: 20.01.2005
Beiträge: 1.557
PHP-Kenntnisse:
Fortgeschritten
Buhmann ist zur Zeit noch ein unbeschriebenes Blatt
Buhmann eine Nachricht über ICQ schicken Buhmann eine Nachricht über MSN schicken
Standard

mach doch mal pitte einfach nur print_r($grundrisse) und sag uns ausserdem, was du für eine ausgabe genau haben willst
Buhmann ist offline  
Alt 13.03.2006, 21:49  
Erfahrener Benutzer
 
Registriert seit: 10.10.2007
Beiträge: 104
horstenpeter befindet sich auf einem aufstrebenden Ast
Standard

Hallo, hier ist print_r($grundrisse);

Code:
Array
(
    [name] => Array
        (
            [0] => Array
                (
                    [0] => kgeg.jpg
                    [1] => ogdg.jpg
                )

            [1] => Array
                (
                    [0] => kgeg.jpg
                    [1] => 
                )

        )

    [type] => Array
        (
            [0] => Array
                (
                    [0] => image/jpeg
                    [1] => image/jpeg
                )

            [1] => Array
                (
                    [0] => image/jpeg
                    [1] => 
                )

        )

    [tmp_name] => Array
        (
            [0] => Array
                (
                    [0] => C:\Programme\PHP\uploadtemp\php116.tmp
                    [1] => C:\Programme\PHP\uploadtemp\php117.tmp
                )

            [1] => Array
                (
                    [0] => C:\Programme\PHP\uploadtemp\php118.tmp
                    [1] => 
                )

        )

    [error] => Array
        (
            [0] => Array
                (
                    [0] => 0
                    [1] => 0
                )

            [1] => Array
                (
                    [0] => 0
                    [1] => 4
                )

        )

    [size] => Array
        (
            [0] => Array
                (
                    [0] => 32784
                    [1] => 35562
                )

            [1] => Array
                (
                    [0] => 32784
                    [1] => 0
                )

        )

)
Was der Code am Schluß machen soll, ist, jede der Grafiken umzubenennen, abzuspeichern und in der Datenbank zu vermerken.
horstenpeter ist offline  
Alt 13.03.2006, 22:38  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Hallo,
eine Kleinigkeit zu deinem Code oben:
- Muss die ID wirklich im Dateinamen stehen, denn dann könntest du auf das unschöne Konstrukt INSERT mit anschließendem UPDATE verzichten.
- Ich würde den INSERT erst machen, wenn move_uploaded_file() erfolgreich war, sonst hast du eventuell tote Links. Die Datenbank bockt zumindest seltener als Dateioperationen.

Zu deinem Problem:
Ich verstehe nicht so ganz was du machst bzw. willst und das hat unter anderem damit zu tun, dass du deine Variablen schwammig benennst, auch Zuweisungen wie
PHP-Code:
<?php
$gtitel 
$titel;
?>
machen doch - erst Recht in einer Schleife - keinen Sinn! Woher kommen denn deine verwendeten Variablen?

Wenn du einfach nur hochgeladene Dateien in die DB speichern und in dein gewünschtes Pfadsystem kopieren willst dann sag das doch einfach und wurschtel nicht so rum
http://www.lugbz.org/documents/smart...s_de.html#goal
Zergling-new ist offline  
Alt 13.03.2006, 22:45  
Erfahrener Benutzer
 
Registriert seit: 10.10.2007
Beiträge: 104
horstenpeter befindet sich auf einem aufstrebenden Ast
Standard

Hallo Zergling,

die ID steht halt im Dateinamen, damit ich die Grafiken nachher den richtigen Objekten zuordnen kann. INSERT erst nach move_uploaded_file() zu machen ist wahrscheinlich eine gute Idee. Aber erstmal muss ich das drängendere Problem lösen.

Daß die Zuweisung $gtitel=$titel wahrscheinlich keinen Sinn macht ist mir auch schon aufgefallen - aber ich dachte das merke ich dann schon, wenn der Code erstmal läuft. Das könnte ich dann wahrscheinlich selbst lösen.

Ich weiß daß mein Code etwas unübersichtlich ist, deswegen poste ich ja auch bei den Anfängern Aber ist die Frage wirklich so unklar ?

Was mich jetzt einfach beschäftigt ist, warum das Array mit den Grundrissen nicht so abgearbeitet wird, daß eine Grafik nach der anderen bearbeitet wird, sondern eine Eigenschaft nach der anderen. Das ist die einzige Frage, die ich im Moment habe - um alles andere versuche ich mich dann schon zu kümmern.

Es geht hier nicht um einen einfachen Dateiupload, sondern um X Dateien, die aus einem Formular mit Y Feldern kommen, und die Z Objekten zugeordnet werden sollen. Das ganze Ding jetzt auszupacken würde den Thread nur unübersichtlicher machen....

Danke für die Hilfe,
J.
horstenpeter ist offline  
Alt 13.03.2006, 23:08  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Dein $grundrisse-Array ist sehr merkwürdig. Warum setzt du ihn so komisch zusammen?

Folgender Quellcode
PHP-Code:
<?php
if (count($_FILES) > 0) {
    print 
'<pre>';
    
print_r($_FILES);
    print 
'</pre>';
}
?>
<html>
<body>

<form action="<?php print $_SERVER['PHP_SELF']; ?>" enctype="multipart/form-data" method="post">
<input type="file" name="fileUpload_1" />


<input type="file" name="fileUpload_2" />


<input type="submit" />
</form>

</body>
</html>
liefert nach dem Upload folgendes Ergebnis:
PHP-Code:
Array
(
    [
fileUpload_1] => Array
        (
            [
name] => Visual.exe
            
[type] => application/x-msdownload
            
[tmp_name] => C:Programmexampptmpphp55.tmp
            
[error] => 0
            
[size] => 421888
        
)

    [
fileUpload_2] => Array
        (
            [
name] => test.html
            
[type] => text/html
            
[tmp_name] => C:Programmexampptmpphp56.tmp
            
[error] => 0
            
[size] => 1723
        
)


Den könntest du mittels PHP so ansprechen:

PHP-Code:
<?php
foreach ($_FILES as $inputName) {
  
$tmp_name $_FILES[$inputName]['tmp_name'];
  
// ..
}
?>
Wenn du deinen $grundrisse-Array selbst schon nicht verstehst, solltest
du auf ihn verzichten und den einfachen Weg direkt über $_FILES wählen!
Zergling-new ist offline  
Alt 13.03.2006, 23:18  
Erfahrener Benutzer
 
Registriert seit: 10.10.2007
Beiträge: 104
horstenpeter befindet sich auf einem aufstrebenden Ast
Standard

Hallo,

vielleicht sollte ich das doch mal ausführlich schildern:

Das Formular wird dynamisch erzeugt und enthält X Objekte. Jedem dieser Objekte sind bis zu Y Grundrisse zugeordnet. Das sieht im Code so aus:

PHP-Code:
<?php
$counter 
0;
while (
$counter $sub_objects)
    {
      echo (
"<div id='bez'>Titel des Objektes</div>");
      echo (
"<div id='feld'><input name='objekt[".$counter."]' type='text' cols='30'></div>");
      echo (
"<div id='erk'>Titel des Objektes, z.B. 'Reihenendhaus'.</div>");
      
$gcounter 0;
      while (
$gcounter $grundrisse)
      {
        echo (
"<div id='bez'>Titel der Grafik</div>");
        echo (
"<div id='feld'><input name='titel[".$counter."][]' type='text')></div>");
        echo (
"<div id='feld'><input name='grundriss[".$counter."][]' type='file'></div>");
        echo (
"<div id='erk'>Die Grafik, Format JPG, H&ouml;he 300 Pixel, Breite 280 Pixel.</div>");
        
$gcounter++;
      }
    
$counter++;
    }
?>
<input type="hidden" name="verkauf" value='$verkauf'>

     <input type="submit" name="submit"
       value="Hinzuf&uuml;gen">
Das übergebe ich dann in die Variablen

$objekte = $_POST['objekt'];
$grundrisse = $_FILES['grundriss'];
$titel = $_POST['titel'];

und versuche es mit dem obigen Code wieder so auseinanderzunehmen, daß ich die Grafiken in den Datenbanken sub_obj und grundriss speichern kann und später noch feststellen kann, welche Grafiken wozu gehören.
horstenpeter ist offline  
Alt 13.03.2006, 23:32  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

PHP-Code:
<?php
for ($o 0$o count($objekte); $o++) { // o = Objekte
  
$aktuellesObjekt $objekte[$o];
  for (
$d 0$d count($grundrisse['size'][$o]); $d++) { // d = Dateien
    
if ($grundrisse['size'][$o][$d] > 0) { // 0-Byte Dateien interessieren nicht
      
$tmp_name $grundrisse['tmp_name'][$o][$d];
      
// hier dein jeweiliger INSERT
    
}
  }
}
?>
So müsste es klappen (ungetestet)

Übrigens benutzt du die Variable $grundrisse einmal als INT, einmal als Array. Das
und dein katastrophaler Array deuten auf eine schlampige Programmierung hin,
daran solltest du etwas ändern! Das ist ein gut gemeinter Rat, keine Beleidigung!
So ich schau Akte-X - hoffe das Konstrukt oben klappt, war etwas ungünstig von dir
2 Objekte mit jeweils 2 Dateien als Beispiel zu nehmen, kann sein dass ich
durcheinander gekommen bin.
Zergling-new ist offline  
Alt 14.03.2006, 00:12  
Erfahrener Benutzer
 
Registriert seit: 10.10.2007
Beiträge: 104
horstenpeter befindet sich auf einem aufstrebenden Ast
Standard

Hallo Zergling,

klar, meine Programmierung ist nicht gut. Die will ich auch verbessern. Ich muss echt nochmal die Grundlagen auffrischen bzw ergänzen....
Soweit erstmal danke, ich schau mir das morgen dann genau an, probier es aus und melde mich wieder. Jetzt bin ich erstmal müde.

Danke !
horstenpeter ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Soapfault: Undefined Property Argi PHP-Fortgeschrittene 0 28.07.2008 11:17
mehrdimensionales Array als HTML-Formular mindhead PHP Tipps 2008 3 11.04.2008 15:25
Kategoriedaten rekursiv in Array bringen Schiedsrichter PHP Tipps 2008 2 10.12.2007 15:43
Problem beim vergleichen von 2 Arrays PHP Tipps 2005-2 1 06.10.2005 14:25
[JS] Array mit Daten aus txt File füllen HTML, Usability und Barrierefreiheit 3 05.10.2005 09:21
Daten aus einem Array lesen Mano PHP Tipps 2005-2 4 04.07.2005 13:35
[Erledigt] schreiben der ausgelesenen daten in ein array sinnvoll? PHP-Fortgeschrittene 1 02.05.2005 11:42
Wie gibt man Daten aus der DB in ein Array verkehrtherum aus 'progman' PHP Tipps 2005 15 18.04.2005 21:27
mehrdimensionales Array mit Daten aus einer DB füllen PHP Tipps 2004-2 9 30.12.2004 19:17
Abfrage mit id aus anderer Tabelle suter PHP Tipps 2004-2 15 16.12.2004 14:25
Was ist hier mit Schleife und mehrdimensionalen Array falsch PHP Tipps 2004 8 25.10.2004 14:02
bbcode - Classe PHP-Fortgeschrittene 4 18.09.2004 17:30
:( Aus Array Daten lesen. Aber nur einmal täglich? PHP Tipps 2004 4 18.08.2004 11:38
Mehrere Daten aus Datenbank in einen Array legen?!? PHP Tipps 2004 16 17.08.2004 00:53
Daten in einem Array zusammenfassen PHP Tipps 2004 1 23.07.2004 18:33

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php verschachteltes array, verschachteltes array, verschachteltes array php, php verschachteltes json, http://www.php.de/php-tipps-2006/38159-verschachteltes-array-daten-auswaehlen.html, vershcachtelets array entschachteln, daten aus verschachteltem array, php mehrere dateien hochladen \undefined index: tmp_name\, php 2d array selektieren, php verschachtelte objekte json ansprechen, php daten selektieren array, php $_post verschachteltes object, php verschachtelt multi arrays json ausgabe, php daten aus array selektieren, php 2d array neue reihenfolge $_post, php 2d array notice: undefined index: 0, php objekt in array mit namen ansprechen, verschachteltes json, json verschateltes array, verschachteltes arrey

Alle Zeitangaben in WEZ +2. Es ist jetzt 12:16 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.