Anzeige

Array in Schleife ergänzen

Array in Schleife ergänzen | PSD-Tutorials.de

Erstellt von KATERchen, 16.08.2008.

  1. KATERchen

    KATERchen Aktives Mitglied

    Dabei seit:
    19.03.2006
    Beiträge:
    348
    Geschlecht:
    männlich
    Ort:
    -
    Software:
    -
    Kameratyp:
    -
    Array in Schleife ergänzen
    Ich stecke in einer Sackgasse.
    Über ein kleines Formular lade ich fünf Dateien hoch. Diese werden mit microtime() umbenannt. Nach dem Upload wird eine neue Seite aufgerufen, auf der ich einander zugeordnet sowohl den Orginalnamen als auch den microtime-Namen brauche.
    Das Array mit den Orginalnamen fange ich direkt nach dem Senden ab. Aber wie komme ich jetzt auf der neuen Seite an die microtime-Namen? Wenn ich richtig liege müßte innerhalb der Schleife eine Zuordnung im Array erfolgen, aber wie stellt man das an?
    Hier mal der code:
    PHP:
    1.  
    2. <?php
    3.  
    4. $_SESSION['doppelt'] = $_FILES;
    5.  
    6. if(isset($_FILES))
    7. {
    8.     foreach($_FILES as $key => $org_name)  
    9.     {    
    10.         if(isset($_FILES[$key]['tmp_name']) && isset($_FILES[$key]['name']))
    11.            
    12.         //Pfüfung des Dateitypes
    13.         $endung = '';
    14.         if ( $_FILES[$key]['type'] == 'image/jpeg')
    15.         {
    16.             $endung[$key] .= '.jpg';
    17.         }
    18.        
    19.         if ( $_FILES[$key]['type'] == 'image/gif')
    20.         {
    21.             $endung[$key] .= '.gif';
    22.         }
    23.        
    24.         $upname[$key] = microtime() ;
    25.         $upname[$key] = $upname[$key].$endung[$key];
    26.         $org_name[$key] = strtolower($_FILES[$key]['name']);
    27.        
    28.         move_uploaded_file($_FILES[$key]['tmp_name'] , 'uploads/' . $upname[$key]);    
    29.        
    30. header("location: upload_6a.php");          
    31.          
    32.     } // ende von foreach
    33.        
    34. } // ende der Upload-Schleife
    35. ?>
    36.  
    37. <form method="post" enctype="multipart/form-data" action="<? $_SERVER["PHP_SELF"];?>">
    38. <input type="file" name="datei_1" id="Datei1" /><br />
    39. <input type="file" name="datei_2" id="Datei2" /><br />
    40. <input type="file" name="datei_3" id="Datei3" /><br />
    41. <input type="file" name="datei_4" id="Datei4" /><br />
    42. <input type="file" name="datei_5" id="Datei5" /><br />
    43. <input type="submit" name="submit" value="Upload!" />
    44. </form>
    45. <?php ob_end_flush ?>
    46.  
    47.  
     
    #1      
  2. sokie

    sokie Mod | Web

    Dabei seit:
    23.03.2008
    Beiträge:
    5.338
    Geschlecht:
    männlich
    Ort:
    Bünde NRW
    Software:
    <br>COREL <br> Texteditor
    Array in Schleife ergänzen
    AW: Array in Schleife ergänzen

    ich habe verstanden, dass die Daten des ersten Script auch in einem folgenden zur Verfügung stehen sollen.
    zu dem Zweck kann man sie über SESSION bewahren, oder per url übergeben.

    für den Fall SESSION:
    Code (Text):
    1.  
    2. <?php
    3. session_start();
    4. ....
    5. $i=0;
    6. foreach (bedingung){
    7. ...
    8. $_SESSION['dateiname'][$i]['ori'] = $org_name;
    9. $_SESSION['dateiname'][$i]['micro'] = microtime();
    10. $_SESSION['dateiname'][$i]['type'] = $endung;
    11. $i++
    12. ...
    13. }
    14.  
    15.  
    ich bin mir nicht sicher,aber für mich scheint es, als würde die foreach-Schleife nicht abgearbeitet, wenn Du das Script mit header("location: upload_6a.php"); verlässt?!
     
    Zuletzt bearbeitet: 16.08.2008
    #2      
  3. KATERchen

    KATERchen Aktives Mitglied

    Dabei seit:
    19.03.2006
    Beiträge:
    348
    Geschlecht:
    männlich
    Ort:
    -
    Software:
    -
    Kameratyp:
    -
    Array in Schleife ergänzen
    AW: Array in Schleife ergänzen

    Das mit den Sessions war schon klar. Mir ging es darum, die Orginal-Dateinamen und die Microtime-Dateinamen miteinander zu verbinden. Jetzt habe ich einfach ein zweites Array angelegt, wobei es mir auf diese Art nicht wirklich gefällt.
    Und das die Schleife nicht abgearbeitet wird dachte ich auch, sieht auch im Code für mich so aus, funktioniert aber - und auch nur so.
    Ich stelle jetzt mal hier das komplette Script rein. Es geht darum, daß Fotos auf einen Server geladen werden können. Die Fotos werden auf eine bestimmte Höhe verkleinert und mit einem Wasserzeichen versehen und gleichzeitig wird auch noch ein Tubnail erzeugt. Anschließend wird kontrolliert ob das Foto vielleicht schon auf dem Server existiert und nachgefragt, was dann passieren soll.
    Ich hoffe auf Verbesserungsvorschläge. Da ich blutiger Anfänger bin bitte möglichst mit Erklärung :). Das Script soll jetzt nur im Admin-Bereich laufen, daher habe ich nicht auf Sicherheit geachtet aber Vorschläge dafür währen der Übung halber auch willkommen.
    Ach ja, zwei "Fehler" hat das Script (wobei ich nicht weiß, ob das wirklich Fehler sind)
    Ich habee ein Foto wo absolut kein Wasserzeichen raufwill - habe es neu gespeichert, konvertiert, mit Photoshop geändert... aber es will kein Wasserzeichen rauf - und ein anderes Foto wird manchmal nicht verkleinert - meistens aber doch... Das Tumbnail wird aber immer richtig erzeugt.

    upload_6.php
    PHP:
    1.  
    2. <?php
    3.  
    4. // Ausgabegröße der Fotos
    5. $norm_groesse = 400;
    6. $tb_groesse   = 160;
    7.  
    8.  
    9. $_SESSION['doppelt'] = $_FILES;
    10.  
    11.  
    12.  
    13. //Wenn eine Datei hochgeladen wird...
    14. if(isset($_FILES))
    15. {
    16.     foreach($_FILES as $key => $org_name)  
    17.     {    
    18.         if(isset($_FILES[$key]['tmp_name']) && isset($_FILES[$key]['name']))
    19.            
    20.         //Pfüfung des Dateitypes
    21.         $endung = '';
    22.         if ( $_FILES[$key]['type'] == 'image/jpeg')
    23.         {
    24.             $endung[$key] .= '.jpg';
    25.         }
    26.        
    27.         if ( $_FILES[$key]['type'] == 'image/gif')
    28.         {
    29.             $endung[$key] .= '.gif';
    30.         }
    31.        
    32.         $upname[$key] = microtime() ;
    33.         $upname[$key] = $upname[$key].$endung[$key];
    34.         $org_name[$key] = strtolower($_FILES[$key]['name']);
    35.        
    36.         move_uploaded_file($_FILES[$key]['tmp_name'] , 'uploads/' . $upname[$key]);    
    37.  
    38.         //Schreiben der Microtime-Dateinamen in ein Array
    39.         $micro['micro_1'] = $upname['datei_1'];
    40.         $micro['micro_2'] = $upname['datei_2'];        
    41.         $micro['micro_3'] = $upname['datei_3'];
    42.         $micro['micro_4'] = $upname['datei_4'];
    43.         $micro['micro_5'] = $upname['datei_5'];
    44.        
    45.         $_SESSION['micro'] = $micro;
    46.  
    47.  
    48.         //Foto wird verkleinert und mit Wasserzeichen versehen
    49.         $PicPathIn  = 'uploads/';
    50.         $PicPathOut = 'uploads/';
    51.         if($_FILES[$key]['size'] > 0)
    52.         {
    53.           $Wasserzeichen = ImageCreateFromPNG("wasserzeichen.png");
    54.           $size=getimagesize("$PicPathIn"."$upname[$key]");
    55.           $breite=$size[0];
    56.           $hoehe=$size[1];
    57.  
    58.           //Prüfung der Dateiendung
    59.           if($_FILES[$key]['type'] == 'image/jpeg')
    60.           {
    61.             if($hoehe > $tb_groesse)
    62.             {
    63.               $neueHoehe = $tb_groesse;
    64.               $neueBreite=intval($breite*$neueHoehe/$hoehe);
    65.               $altesBild[$key]=ImageCreateFromJPEG("$PicPathIn"."$upname[$key]");
    66.               $neuesBild[$key]=imagecreatetruecolor($neueBreite,$neueHoehe);
    67.               ImageCopyResized($neuesBild[$key],$altesBild[$key],0,0,0,0,$neueBreite,
    68.               $neueHoehe,$breite,$hoehe);
    69.               ImageJPEG($neuesBild[$key],"$PicPathOut"."tn_"."$upname[$key]");
    70.             }
    71.             if($hoehe > $norm_groesse)
    72.             {
    73.               $neueHoehe = $norm_groesse;
    74.               $neueBreite=intval($breite*$neueHoehe/$hoehe);
    75.               $altesBild[$key]=ImageCreateFromJPEG("$PicPathIn"."$upname[$key]");
    76.               $neuesBild[$key]=imagecreatetruecolor($neueBreite,$neueHoehe);
    77.               ImageCopyResized($neuesBild[$key],$altesBild[$key],0,0,0,0,$neueBreite,
    78.               $neueHoehe,$breite,$hoehe);
    79.               ImageJPEG($neuesBild[$key]);
    80.                             //Wasserzeichen
    81.                             ImageCopy($neuesBild[$key], $Wasserzeichen,
    82.                             imagesx($neuesBild[$key])-imagesx($Wasserzeichen),
    83.                             imagesy($neuesBild[$key])-imagesy($Wasserzeichen), 0, 0,
    84.                             imagesx($Wasserzeichen),
    85.                             imagesy($Wasserzeichen));
    86.                             ImageJPEG($neuesBild[$key],"$PicPathOut"."$upname[$key]");
    87.             }
    88.           }
    89.           if($_FILES[$key]['type'] == 'image/gif')
    90.           {
    91.             if($hoehe > $tb_groesse)
    92.             {
    93.               $neueHoehe = $tb_groesse;
    94.               $neueBreite=intval($breite*$neueHoehe/$hoehe);
    95.               $altesBild[$key]=ImageCreateFromGIF("$PicPathIn"."$upname[$key]");
    96.               $neuesBild[$key]=imagecreatetruecolor($neueBreite,$neueHoehe);
    97.               ImageCopyResized($neuesBild[$key],$altesBild[$key],0,0,0,0,$neueBreite,
    98.               $neueHoehe,$breite,$hoehe);
    99.               ImageGIF($neuesBild[$key],"$PicPathOut"."tn_"."$upname[$key]");
    100.             }
    101.             if($hoehe > $norm_groesse)
    102.             {
    103.               $neueHoehe = $norm_groesse;
    104.               $neueBreite=intval($breite*$neueHoehe/$hoehe);
    105.               $altesBild[$key]=ImageCreateFromGIF("$PicPathIn"."$upname[$key]");
    106.               $neuesBild[$key]=imagecreatetruecolor($neueBreite,$neueHoehe);
    107.               ImageCopyResized($neuesBild[$key],$altesBild[$key],0,0,0,0,$neueBreite,
    108.               $neueHoehe,$breite,$hoehe);
    109.               ImageGIF($neuesBild[$key]);
    110.               //Wasserzeichen
    111.                             ImageCopy($neuesBild[$key], $Wasserzeichen,
    112.                             imagesx($neuesBild[$key])-imagesx($Wasserzeichen),
    113.                             imagesy($neuesBild[$key])-imagesy($Wasserzeichen), 0, 0,
    114.                             imagesx($Wasserzeichen),
    115.                             imagesy($Wasserzeichen));
    116.                             ImageGIF($neuesBild[$key],"$PicPathOut"."$upname[$key]");
    117.             }
    118.      
    119.           }
    120.         }   // ende fotos verkleinern
    121.        
    122. header("location: upload_6a.php");          
    123.          
    124.     } // ende von foreach
    125.      
    126. } // ende der Upload-Schleife
    127. ?>
    128.  
    129. <form method="post" enctype="multipart/form-data" action="<? $_SERVER["PHP_SELF"];?>">
    130. <input type="hidden" name="upload" value="" >
    131. <input type="file" name="datei_1" id="Datei1" /><br />
    132. <input type="file" name="datei_2" id="Datei2" /><br />
    133. <input type="file" name="datei_3" id="Datei3" /><br />
    134. <input type="file" name="datei_4" id="Datei4" /><br />
    135. <input type="file" name="datei_5" id="Datei5" /><br />
    136. <input type="submit" name="submit" value="Upload!" />
    137. </form>
    138. <?php ob_end_flush; ?>
    139.  
    140.  
    upload_6a.php
    PHP:
    1.  
    2. <?php
    3.  
    4. //PHP_SELF -> Datei auf dem Server wird überschrieben und der erste Wert aus dem Array gelöscht
    5. if (isset($_POST['microtime']))
    6. {
    7.     $micro    =  $_SESSION['micro'];
    8.     $doppelt  =  $_SESSION['doppelt'];
    9.  
    10.   unlink('uploads/' . $doppelt[0]['name']);
    11.      unlink('uploads/' . 'tn_' . $doppelt[0]['name']);
    12.   rename('uploads/' . $micro[0] , 'uploads/' . strtolower($doppelt[0]['name']));
    13.   rename('uploads/' . 'tn_' . $micro[0] , 'uploads/' . 'tn_' . strtolower($doppelt[0]['name']));
    14.   array_splice($micro, 0 , 1 );
    15.      array_splice($doppelt , 0 , 1 );
    16. }
    17. //PHP_SELF -> existierende Datei auf dem Server wird beibehalten  und der erste Wert aus dem Array gelöscht
    18. elseif (isset($_POST['upname']))
    19. {
    20.     $micro    =  $_SESSION['micro'];
    21.     $doppelt  =  $_SESSION['doppelt'];
    22.    
    23.      unlink('uploads/' . $micro[0]);
    24.      unlink('uploads/' . 'tn_' . $micro[0]);
    25.      array_splice($micro, 0 , 1 );
    26.      array_splice($doppelt , 0 , 1 );
    27. }
    28. elseif (isset($_GET['wert']))
    29. {
    30.     $micro    =  $_SESSION['micro'];
    31.     $doppelt  =  $_SESSION['doppelt'];
    32.    
    33.     rename('uploads/' . $micro[0] , 'uploads/' . strtolower($doppelt[0]['name']));
    34.   rename('uploads/' . 'tn_' . $micro[0] , 'uploads/' . 'tn_' . strtolower($doppelt[0]['name']));
    35.   array_splice($micro, 0 , 1 );    
    36.     array_splice($doppelt , 0 , 1 );
    37. }
    38. else
    39. {
    40. //hier gehts hin von der vorherigen Seite.
    41. //Arrays werden aus SESSION gelesen und de-assoziiert (oder wie man das nennt)
    42. //GEHT DAS NICHT EINFACHER??? UND VORALLEN, WARUM MUSS ICH AUF DER ERSTEN SEITE EIN ASSOZIATIVES ARRAY ERSTELLEN
    43. //UND ES HIER WIEDER AUSENANDER NEHMEN???
    44.     $tmp_doppelt         =  $_SESSION['doppelt'];
    45.     $tmp_micro           =  $_SESSION['micro'];
    46.    
    47.     $doppelt[]  =  $tmp_doppelt['datei_1'];
    48.     $doppelt[]  =  $tmp_doppelt['datei_2'];
    49.     $doppelt[]  =  $tmp_doppelt['datei_3'];
    50.     $doppelt[]  =  $tmp_doppelt['datei_4'];
    51.     $doppelt[]  =  $tmp_doppelt['datei_5'];
    52.    
    53.     $micro[]    =  $tmp_micro['micro_1'];
    54.     $micro[]    =  $tmp_micro['micro_2'];
    55.     $micro[]    =  $tmp_micro['micro_3'];
    56.     $micro[]    =  $tmp_micro['micro_4'];
    57.     $micro[]    =  $tmp_micro['micro_5'];
    58.        
    59.  
    60. //hier wird geprüft ob <input>'s leer sind und gegebenenfalls das Array aktualisiert.
    61. //GEHT DOCH SICHERLICH AUCH EINFACHER, ODER???
    62. for($i = 1 ; $i < 5 ; $i++ ){if($doppelt[0]['type'] == false ){array_splice($micro, 0 , 1 );array_splice($doppelt , 0 , 1 );}}
    63. for($i = 1 ; $i < 5 ; $i++ ){if($doppelt[1]['type'] == false ){array_splice($micro, 1 , 1 );array_splice($doppelt , 1 , 1 );}}
    64. for($i = 1 ; $i < 5 ; $i++ ){if($doppelt[2]['type'] == false ){array_splice($micro, 2 , 1 );array_splice($doppelt , 2 , 1 );}}
    65. for($i = 1 ; $i < 5 ; $i++ ){if($doppelt[3]['type'] == false ){array_splice($micro, 3 , 1 );array_splice($doppelt , 3 , 1 );}}
    66. for($i = 1 ; $i < 5 ; $i++ ){if($doppelt[4]['type'] == false ){array_splice($micro, 4 , 1 );array_splice($doppelt , 4 , 1 );}}
    67.  
    68. //Array nach den for-Schleifen neu in SESSION schreiben
    69.     $_SESSION['doppelt'] =  $doppelt;
    70.     $_SESSION['micro']     =  $micro;    
    71. }
    72.  
    73. //Wenn die Datei bereits auf dem Server existiert
    74. if (file_exists('uploads/' . $doppelt[0]['name']) == false && $doppelt[0]['size'] > 0)
    75. {
    76.   $_SESSION['doppelt'] =  $doppelt;
    77.     $_SESSION['micro'] = $micro;
    78.     header('location: upload_6a.php?wert='.wert);
    79.  
    80.  
    81. }
    82. //Ausgabe der doppelten Datei
    83. elseif (file_exists('uploads/' . $doppelt[0]['name']) && $doppelt[0]['size'] > 0)
    84. {
    85.     echo 'Die Datei ' . $doppelt[0]['name']  . ' existiert bereits <br>' ;
    86.     echo 'Microtime-Name: ' . $micro[0];
    87.    
    88.     $_SESSION['doppelt'] =  $doppelt;
    89.     $_SESSION['micro'] = $micro;
    90. ?>
    91. <form  method="POST" action="<? $_SERVER["PHP_SELF"];?>" >
    92.     <input type="hidden" name="microtime" value="" >
    93.     <input type="hidden" name="org_name" value="">
    94.     <input class="del" name="Send" type="submit" value="Löschen auf Server">
    95. </form>
    96.  
    97. <form  method="POST" action="<? $_SERVER["PHP_SELF"];?>" >
    98.     <input type="hidden" name="upname" value="" >
    99.     <input class="del" name="Send" type="submit" value="behalten auf Server">
    100. </form>
    101. <?    
    102. }
    103.  
    104. //Wenn das Array leer ist geht''s zurück auf die Upload-Seite
    105. else
    106. {
    107.     header('location: upload_6.php');
    108. }
    109. ob_end_flush;        
    110. ?>
    111.  
    112.  
    113.  
    114.  
     
    #3      
x
×
×
teststefan