Antworten auf deine Fragen:
Neues Thema erstellen

Antworten zum Thema „Array in Schleife ergänzen“

KATERchen

Aktives Mitglied

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:
<?php
ob_start(); 
session_start();

$_SESSION['doppelt'] = $_FILES;

if(isset($_FILES))
{
    foreach($_FILES as $key => $org_name)  
    {    
        if(isset($_FILES[$key]['tmp_name']) && isset($_FILES[$key]['name']))
           
        //Pfüfung des Dateitypes
        $endung = '';
        if ( $_FILES[$key]['type'] == 'image/jpeg')
        {
            $endung[$key] .= '.jpg';
        }
        
        if ( $_FILES[$key]['type'] == 'image/gif')
        {
            $endung[$key] .= '.gif';
        }
        
        $upname[$key] = microtime() ;
        $upname[$key] = $upname[$key].$endung[$key];
        $org_name[$key] = strtolower($_FILES[$key]['name']);
        
        move_uploaded_file($_FILES[$key]['tmp_name'] , 'uploads/' . $upname[$key]);     
        
header("location: upload_6a.php");          
         
    } // ende von foreach 
       
} // ende der Upload-Schleife 
?>

<form method="post" enctype="multipart/form-data" action="<? $_SERVER["PHP_SELF"];?>">
<input type="file" name="datei_1" id="Datei1" /><br />
<input type="file" name="datei_2" id="Datei2" /><br />
<input type="file" name="datei_3" id="Datei3" /><br />
<input type="file" name="datei_4" id="Datei4" /><br />
<input type="file" name="datei_5" id="Datei5" /><br />
<input type="submit" name="submit" value="Upload!" />
</form>
<?php ob_end_flush ?>
 

sokie

Mod | Web

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:
<?php
session_start();
....
$i=0;
foreach (bedingung){
...
$_SESSION['dateiname'][$i]['ori'] = $org_name;
$_SESSION['dateiname'][$i]['micro'] = microtime();
$_SESSION['dateiname'][$i]['type'] = $endung;
$i++
...
}

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:

KATERchen

Aktives Mitglied

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:
<?php
ob_start(); 
session_start();

// Ausgabegröße der Fotos
$norm_groesse = 400;
$tb_groesse   = 160;


$_SESSION['doppelt'] = $_FILES;



//Wenn eine Datei hochgeladen wird...
if(isset($_FILES))
{
    foreach($_FILES as $key => $org_name)  
    {    
        if(isset($_FILES[$key]['tmp_name']) && isset($_FILES[$key]['name']))
           
        //Pfüfung des Dateitypes
        $endung = '';
        if ( $_FILES[$key]['type'] == 'image/jpeg')
        {
            $endung[$key] .= '.jpg';
        }
        
        if ( $_FILES[$key]['type'] == 'image/gif')
        {
            $endung[$key] .= '.gif';
        }
        
        $upname[$key] = microtime() ;
        $upname[$key] = $upname[$key].$endung[$key];
        $org_name[$key] = strtolower($_FILES[$key]['name']);
        
        move_uploaded_file($_FILES[$key]['tmp_name'] , 'uploads/' . $upname[$key]);     

        //Schreiben der Microtime-Dateinamen in ein Array
        $micro['micro_1'] = $upname['datei_1'];
        $micro['micro_2'] = $upname['datei_2'];        
        $micro['micro_3'] = $upname['datei_3'];
        $micro['micro_4'] = $upname['datei_4'];
        $micro['micro_5'] = $upname['datei_5'];
        
        $_SESSION['micro'] = $micro;


        //Foto wird verkleinert und mit Wasserzeichen versehen
        $PicPathIn  = 'uploads/';
        $PicPathOut = 'uploads/';
        if($_FILES[$key]['size'] > 0)
        {
          $Wasserzeichen = ImageCreateFromPNG("wasserzeichen.png"); 
          $size=getimagesize("$PicPathIn"."$upname[$key]");
          $breite=$size[0];
          $hoehe=$size[1];

          //Prüfung der Dateiendung
          if($_FILES[$key]['type'] == 'image/jpeg')
          {
            if($hoehe > $tb_groesse)
            {
              $neueHoehe = $tb_groesse;
              $neueBreite=intval($breite*$neueHoehe/$hoehe);
              $altesBild[$key]=ImageCreateFromJPEG("$PicPathIn"."$upname[$key]");
              $neuesBild[$key]=imagecreatetruecolor($neueBreite,$neueHoehe);
              ImageCopyResized($neuesBild[$key],$altesBild[$key],0,0,0,0,$neueBreite,
              $neueHoehe,$breite,$hoehe);
              ImageJPEG($neuesBild[$key],"$PicPathOut"."tn_"."$upname[$key]");
            }
            if($hoehe > $norm_groesse)
            {
              $neueHoehe = $norm_groesse;
              $neueBreite=intval($breite*$neueHoehe/$hoehe);
              $altesBild[$key]=ImageCreateFromJPEG("$PicPathIn"."$upname[$key]");
              $neuesBild[$key]=imagecreatetruecolor($neueBreite,$neueHoehe);
              ImageCopyResized($neuesBild[$key],$altesBild[$key],0,0,0,0,$neueBreite,
              $neueHoehe,$breite,$hoehe);
              ImageJPEG($neuesBild[$key]); 
                            //Wasserzeichen
                            ImageCopy($neuesBild[$key], $Wasserzeichen,
                            imagesx($neuesBild[$key])-imagesx($Wasserzeichen),
                            imagesy($neuesBild[$key])-imagesy($Wasserzeichen), 0, 0,
                            imagesx($Wasserzeichen),
                            imagesy($Wasserzeichen));
                            ImageJPEG($neuesBild[$key],"$PicPathOut"."$upname[$key]");
            }
          }
          if($_FILES[$key]['type'] == 'image/gif')
          {
            if($hoehe > $tb_groesse)
            {
              $neueHoehe = $tb_groesse;
              $neueBreite=intval($breite*$neueHoehe/$hoehe);
              $altesBild[$key]=ImageCreateFromGIF("$PicPathIn"."$upname[$key]");
              $neuesBild[$key]=imagecreatetruecolor($neueBreite,$neueHoehe);
              ImageCopyResized($neuesBild[$key],$altesBild[$key],0,0,0,0,$neueBreite,
              $neueHoehe,$breite,$hoehe);
              ImageGIF($neuesBild[$key],"$PicPathOut"."tn_"."$upname[$key]");
            }
            if($hoehe > $norm_groesse)
            {
              $neueHoehe = $norm_groesse;
              $neueBreite=intval($breite*$neueHoehe/$hoehe);
              $altesBild[$key]=ImageCreateFromGIF("$PicPathIn"."$upname[$key]");
              $neuesBild[$key]=imagecreatetruecolor($neueBreite,$neueHoehe);
              ImageCopyResized($neuesBild[$key],$altesBild[$key],0,0,0,0,$neueBreite,
              $neueHoehe,$breite,$hoehe);
              ImageGIF($neuesBild[$key]);
              //Wasserzeichen
                            ImageCopy($neuesBild[$key], $Wasserzeichen,
                            imagesx($neuesBild[$key])-imagesx($Wasserzeichen),
                            imagesy($neuesBild[$key])-imagesy($Wasserzeichen), 0, 0,
                            imagesx($Wasserzeichen),
                            imagesy($Wasserzeichen));
                            ImageGIF($neuesBild[$key],"$PicPathOut"."$upname[$key]"); 
            }
      
          }
        }   // ende fotos verkleinern
        
header("location: upload_6a.php");          
         
    } // ende von foreach 
     
} // ende der Upload-Schleife 
?>

<form method="post" enctype="multipart/form-data" action="<? $_SERVER["PHP_SELF"];?>">
<input type="hidden" name="upload" value="" >
<input type="file" name="datei_1" id="Datei1" /><br />
<input type="file" name="datei_2" id="Datei2" /><br />
<input type="file" name="datei_3" id="Datei3" /><br />
<input type="file" name="datei_4" id="Datei4" /><br />
<input type="file" name="datei_5" id="Datei5" /><br />
<input type="submit" name="submit" value="Upload!" />
</form>
<?php ob_end_flush; ?>
upload_6a.php
PHP:
<?php
ob_start(); 
session_start();

//PHP_SELF -> Datei auf dem Server wird überschrieben und der erste Wert aus dem Array gelöscht
if (isset($_POST['microtime']))
{
    $micro    =  $_SESSION['micro'];
    $doppelt  =  $_SESSION['doppelt'];

  unlink('uploads/' . $doppelt[0]['name']);
     unlink('uploads/' . 'tn_' . $doppelt[0]['name']);
  rename('uploads/' . $micro[0] , 'uploads/' . strtolower($doppelt[0]['name']));
  rename('uploads/' . 'tn_' . $micro[0] , 'uploads/' . 'tn_' . strtolower($doppelt[0]['name']));
  array_splice($micro, 0 , 1 );
     array_splice($doppelt , 0 , 1 );
}
//PHP_SELF -> existierende Datei auf dem Server wird beibehalten  und der erste Wert aus dem Array gelöscht
elseif (isset($_POST['upname']))
{
    $micro    =  $_SESSION['micro'];
    $doppelt  =  $_SESSION['doppelt'];
    
     unlink('uploads/' . $micro[0]);
     unlink('uploads/' . 'tn_' . $micro[0]);
     array_splice($micro, 0 , 1 );
     array_splice($doppelt , 0 , 1 );
}
elseif (isset($_GET['wert']))
{
    $micro    =  $_SESSION['micro'];
    $doppelt  =  $_SESSION['doppelt'];
    
    rename('uploads/' . $micro[0] , 'uploads/' . strtolower($doppelt[0]['name']));
  rename('uploads/' . 'tn_' . $micro[0] , 'uploads/' . 'tn_' . strtolower($doppelt[0]['name']));
  array_splice($micro, 0 , 1 );    
    array_splice($doppelt , 0 , 1 );
}
else
{
//hier gehts hin von der vorherigen Seite.
//Arrays werden aus SESSION gelesen und de-assoziiert (oder wie man das nennt)
//GEHT DAS NICHT EINFACHER??? UND VORALLEN, WARUM MUSS ICH AUF DER ERSTEN SEITE EIN ASSOZIATIVES ARRAY ERSTELLEN
//UND ES HIER WIEDER AUSENANDER NEHMEN???
    $tmp_doppelt         =  $_SESSION['doppelt'];
    $tmp_micro           =  $_SESSION['micro'];
    
    $doppelt[]  =  $tmp_doppelt['datei_1'];
    $doppelt[]  =  $tmp_doppelt['datei_2'];
    $doppelt[]  =  $tmp_doppelt['datei_3'];
    $doppelt[]  =  $tmp_doppelt['datei_4'];
    $doppelt[]  =  $tmp_doppelt['datei_5'];
    
    $micro[]    =  $tmp_micro['micro_1'];
    $micro[]    =  $tmp_micro['micro_2'];
    $micro[]    =  $tmp_micro['micro_3'];
    $micro[]    =  $tmp_micro['micro_4'];
    $micro[]    =  $tmp_micro['micro_5'];
        

//hier wird geprüft ob <input>'s leer sind und gegebenenfalls das Array aktualisiert.
//GEHT DOCH SICHERLICH AUCH EINFACHER, ODER???
for($i = 1 ; $i < 5 ; $i++ ){if($doppelt[0]['type'] == false ){array_splice($micro, 0 , 1 );array_splice($doppelt , 0 , 1 );}}
for($i = 1 ; $i < 5 ; $i++ ){if($doppelt[1]['type'] == false ){array_splice($micro, 1 , 1 );array_splice($doppelt , 1 , 1 );}}
for($i = 1 ; $i < 5 ; $i++ ){if($doppelt[2]['type'] == false ){array_splice($micro, 2 , 1 );array_splice($doppelt , 2 , 1 );}}
for($i = 1 ; $i < 5 ; $i++ ){if($doppelt[3]['type'] == false ){array_splice($micro, 3 , 1 );array_splice($doppelt , 3 , 1 );}}
for($i = 1 ; $i < 5 ; $i++ ){if($doppelt[4]['type'] == false ){array_splice($micro, 4 , 1 );array_splice($doppelt , 4 , 1 );}}

//Array nach den for-Schleifen neu in SESSION schreiben
    $_SESSION['doppelt'] =  $doppelt;
    $_SESSION['micro']     =  $micro;    
}

//Wenn die Datei bereits auf dem Server existiert
if (file_exists('uploads/' . $doppelt[0]['name']) == false && $doppelt[0]['size'] > 0)
{
  $_SESSION['doppelt'] =  $doppelt;
    $_SESSION['micro'] = $micro;
    header('location: upload_6a.php?wert='.wert);


}
//Ausgabe der doppelten Datei
elseif (file_exists('uploads/' . $doppelt[0]['name']) && $doppelt[0]['size'] > 0)
{
    echo 'Die Datei ' . $doppelt[0]['name']  . ' existiert bereits <br>' ;
    echo 'Microtime-Name: ' . $micro[0];
    
    $_SESSION['doppelt'] =  $doppelt;
    $_SESSION['micro'] = $micro;
?>
<form  method="POST" action="<? $_SERVER["PHP_SELF"];?>" >
    <input type="hidden" name="microtime" value="" >
    <input type="hidden" name="org_name" value="">
    <input class="del" name="Send" type="submit" value="Löschen auf Server">
</form>

<form  method="POST" action="<? $_SERVER["PHP_SELF"];?>" >
    <input type="hidden" name="upname" value="" >
    <input class="del" name="Send" type="submit" value="behalten auf Server">
</form>
<?    
}

//Wenn das Array leer ist geht''s zurück auf die Upload-Seite
else
{
    header('location: upload_6.php');
}
ob_end_flush;        
?>
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
175.189
Beiträge
2.582.077
Mitglieder
67.259
Neuestes Mitglied
SaschMasch1312
Oben