php.de

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

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 10.05.2009, 16:23  
Erfahrener Benutzer
 
Registriert seit: 17.12.2008
Beiträge: 100
Knutschi befindet sich auf einem aufstrebenden Ast
Standard dynamischer Bildupload + -validierung

Hallo zusammen,

möchte einen Bildupload schreiben, der grob so funktionieren soll:
Entsprechend welcher Usergruppe der User angehört, kann dieser 6 oder 12 Bilder hochladen. Diese sollen dann unter einer eindeutigen ID mit zusätzlicher lfd. Nr. (Beispiel ID023123-xx.ext) gespeichert werden.

Soweit so gut, sollte eigentlich auch klappen.

Nun möchte ich die Bilder auf Größe und Dateityp validieren. Mein erster Ansatz war, mein Validierungscode 12 mal zu kopieren, den entsprechend anzupassen und fertig. Kann die Validierung auch nicht auf ein paar Zeilen Code reduziert werden? In einer Schleife oder einem Array?
Den Bildupload bastel ich gerade einer eine for-Schleife um.

Könnte mir ja jemand den ein oder anderen Tipp geben?
__________________
B.L.U.B. -> Biohazard Liquid Undefinied B.L.U.B.
Knutschi ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 10.05.2009, 16:30  
erc
Erfahrener Benutzer
 
Registriert seit: 02.01.2009
Beiträge: 730
PHP-Kenntnisse:
Fortgeschritten
erc wird schon bald berühmt werden
Standard

Schon mal was von einer Funktion gehört?

PS: dein Problem löst sich doch durch die Schleife automatisch.
erc ist offline  
Alt 10.05.2009, 18:27  
Erfahrener Benutzer
 
Registriert seit: 17.12.2008
Beiträge: 100
Knutschi befindet sich auf einem aufstrebenden Ast
Standard

wenn ich nen Plan hätte, würde ich ja meinen Ansatz posten und wo ich nicht weiterkomme.

Der upload geht nur bei der namensvergabe habe ich ein kl. Problem.
Folgender Code
PHP-Code:
 $dname explode(".",$_FILES["galfile"]["name"]);
        
$dnamesize count($dname);
        
$upfile_ext $dname[$dnamesize-1]; 
sollte mir eigentlich die Dateierweiterung ausgeben. Anstatt z.b. .jpg bekomme ich nur ein .Array an den Dateinamen gehängt.

Den Code verwende ich in einem anderen Script schon und da geht er.
Kann mir das mal jemand erklären?
__________________
B.L.U.B. -> Biohazard Liquid Undefinied B.L.U.B.
Knutschi ist offline  
Alt 10.05.2009, 19:42  
erc
Erfahrener Benutzer
 
Registriert seit: 02.01.2009
Beiträge: 730
PHP-Kenntnisse:
Fortgeschritten
erc wird schon bald berühmt werden
Standard

Schau dir einfach mal an was in $_FILES["galfile"]["name"] steht oder besser noch in $_FILES["galfile"]. Dann sollte klar werden was das Problem ist... der Upload von mehreren Files mit name="xxx[]" ändert die Struktur von $_FILES.
erc ist offline  
Alt 10.05.2009, 20:12  
Erfahrener Benutzer
 
Registriert seit: 17.12.2008
Beiträge: 100
Knutschi befindet sich auf einem aufstrebenden Ast
Standard

ok danke, daran hatte ich garnicht mehr gedacht.
__________________
B.L.U.B. -> Biohazard Liquid Undefinied B.L.U.B.
Knutschi ist offline  
Alt 11.05.2009, 15:45  
Erfahrener Benutzer
 
Registriert seit: 17.12.2008
Beiträge: 100
Knutschi befindet sich auf einem aufstrebenden Ast
Standard

Hab mal dran weitergebaut. Der Upload funzt immer noch.
Nur meine Errormeldung will nicht so wie ich mir was vorstelle.
Eigentlich sollte es so sein, dass als msg so was kommt: "Bild 5 ist zu groß".
PHP-Code:
if (isset($_POST["upload"]))
{
    
//Error Handling starten
    
$error = array();
    
//Dateigröße und Dateityp validieren
    
for($v 0$v <= count($_FILES["galfile"]["name"]); $v++)
    {
        if (
$_FILES["galfile"]["size"][$v] >= 100000)
        {
        
$error['upfile'][$v] = 'Die maximale Dateigröße von Bild ".$v." überschreiten 2 MB!';
        }
    }
    if(!
$error)
    {
    
$dir "./event_gal/";
    
$id 034524;
        for(
$i 0$i <= count($_FILES["galfile"]["name"]); $i++)
        {
        
$file $_FILES["galfile"]["name"][$i];
        
$exto explode(".",$file);
        
$dnamesize count($exto);
        
$extn $exto[$dnamesize-1];
        
move_uploaded_file($_FILES["galfile"]["tmp_name"][$i] ,$dir."/".EID."".$id."-".$i.".".$extn);
        if(empty(
$_FILES["galfile"]["tmp_name"][$i])) break;
        echo 
"Upload erfolgreich"."<br>";
        }
    }
    else
    {
        for(
$e 0$e <= count($_FILES["galfile"]["name"]); $e++)
        {
            echo 
"-".$error;
        }
    }
    

Kann mir hier jemand weiterhelfen??
__________________
B.L.U.B. -> Biohazard Liquid Undefinied B.L.U.B.
Knutschi ist offline  
Alt 11.05.2009, 17:32  
Erfahrener Benutzer
 
Registriert seit: 28.05.2008
Beiträge: 1.896
PHP-Kenntnisse:
Fortgeschritten
rudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nett
Standard

Die schleife hier ist quatsch, weil du eine Prüfung zu viel machst:
PHP-Code:
for($v 0$v <= count($_FILES["galfile"]["name"]); $v++) 
das = raus, dann stimmts.

Wie die array Struktur von $_FILES bei mehreren Bildern aussieht, weiß ich nicht auswendig, allerdings, wenn
Zitat:
Bild 5 ist zu groß
dastehen soll, ist
PHP-Code:
$error['upfile'][$v] = 'Die maximale Dateigröße von Bild ".$v." überschreiten 2 MB!'
das hier natürlich falsch. Mußt das natürlich dementsprechend anpassen.

_FILES Array Elemente, die du nicht mit hochladen willst, weil zu groß, mußt du natürlich mit unset aus dem array entfernen.
Um arrays einfacher zu durchlaufen gibt es übrigens auch foreach, dann hättest du das Problem mit dem count und dem kleiner gleich nicht mehr.
Und beim upload mit getimagesize() arbeiten, um den Bildtyp eindeutig zu bestimmen. Sehe keine Typprüfung.

Gruß


Basti
__________________
++++ Wieder einer ins Netz gegangen: Phishers Fritz zufrieden ++++
Blog
rudygotya ist gerade online  
Alt 11.05.2009, 17:46  
Erfahrener Benutzer
 
Registriert seit: 17.12.2008
Beiträge: 100
Knutschi befindet sich auf einem aufstrebenden Ast
Standard

Habe zwischenzeitlich weiter gecoded.
PHP-Code:
if (isset($_POST["upload"]))
{
    
//Error Handling starten
    
$error = array();
    
//Dateigröße und Dateityp validieren
    
for($v 0$v <= count($_FILES["galfile"]["name"]); $v++)
    {
        if (
$_FILES["galfile"]["size"][$v] >= 100000)
        {
        
$error['upfile'] = "Die maximale Dateigröße von Bild $v überschreiten 2 MB!";
        }
    }
    if(!
$error)
    {
    
$dir "./event_gal/";
    
$id 034524;
        for(
$i 0$i <= count($_FILES["galfile"]["name"]); $i++)
        {
        if(
$_FILES["galfile"]["name"][$i])
        {
        
$file $_FILES["galfile"]["name"][$i];
        
$exto explode(".",$file);
        
$dnamesize count($exto);
        
$extn $exto[$dnamesize-1];
        
move_uploaded_file($_FILES["galfile"]["tmp_name"][$i] ,$dir."/".EID."".$id."-".$i.".".$extn);
        if(empty(
$_FILES["galfile"]["tmp_name"][$i])) break;
        echo 
"Upload erfolgreich"."<br>";
        }
        }
    }
    else
    {
        foreach(
$error as $msg)
        {
            echo 
$msg."<br>";
        }
    }
    

Das mit foreach muss ich später mal testen.

Die ausgabe passt jetzt auch, welches bild zu groß ist.

Die Typprüfung bau ich noch ein, wollte eben schritt für schritt vorgehen. trotzdem danke für den hinweis.

Habe ja noch ein break drin wo mir prüft ob ein Upload form leer ist. Sonst würd ich ja 6 mal eine bestätigung bekommen wobei nur 4 bilder hochgeladen werden. Wenn nun ein User aber z.b. Upload-Form 1,2,3 und 5,6 belegt würde mein Script den Bilder eine ID wie folgt vergeben: -1, -2, -3, -5, -6.
Wie bekomme ich das nun hin, dass die lfd. Nummerierung nun doch von -1 bis -5 geht?
__________________
B.L.U.B. -> Biohazard Liquid Undefinied B.L.U.B.
Knutschi ist offline  
Alt 11.05.2009, 18:03  
Erfahrener Benutzer
 
Registriert seit: 28.05.2008
Beiträge: 1.896
PHP-Kenntnisse:
Fortgeschritten
rudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nett
Standard

Arbeite gleich mit foreach, dann ist die Nummerierung vollkomen egal, weil er jedes Array Element einmal durchgeht.
PHP-Code:
<?php

$error 
false;
$errorindices = array();
foreach(
$_FILES["galfile"]["tmp_name"] as $key =>$value)  {
  if (
exif_imagetype($value) != IMAGETYPE_GIF) {
    echo 
'falscher Bildtyp';
    
$error true;
    
$errorindices[]=$key;  
  }
  
$size getimagesize($value);
  if(
$size>(2*1024*1024)) {
    if(!
in_array($errorindices) {
        
$errorindices[]=$key
        
$error true;
    }
  }
}
if(
$error) {
    foreach (
$errorindices as $key => $val) {
            echo 
"Bild".  $_FILES["galfile"]["name"][$key] ."überprüfen";
    }
    die();
}

?>
vollkommen ungetesteter Ansatz. Hoff, damit wird einiges klarer.
__________________
++++ Wieder einer ins Netz gegangen: Phishers Fritz zufrieden ++++
Blog

Geändert von rudygotya (11.05.2009 um 18:07 Uhr).
rudygotya ist gerade online  
Alt 11.05.2009, 18:46  
Erfahrener Benutzer
 
Registriert seit: 17.12.2008
Beiträge: 100
Knutschi befindet sich auf einem aufstrebenden Ast
Standard

ok danke.

mit dem exif_imagestype wird der dateityp geprüft denn du dann auf eine .gif überprüfst, richtig? kann ich anstelle des
PHP-Code:
!= IMAGETYPE_GIF 
ein
PHP-Code:
$witeliste = array('jpg', ... usw.) 
setzten und meine erlaubten Dateitypen so überprüfen?
__________________
B.L.U.B. -> Biohazard Liquid Undefinied B.L.U.B.
Knutschi 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
Problem mit Bildupload Script calimero87 PHP Tipps 2009 3 23.10.2010 22:22
Formulargenerierung + Validierung cp_toby Software-Design 11 01.03.2009 22:02
Bildupload in CMS funktioniert nicht soffi PHP Tipps 2009 18 10.01.2009 18:24
[Erledigt] Validierung mit Arrays vyo PHP Tipps 2008 4 27.12.2008 18:39
Bildupload spinnt jovi PHP Tipps 2008 1 13.03.2008 11:26
Bildupload mit Bildeditiermöglichkeit clemens Scriptbörse 3 03.12.2007 10:31
Problem mit Bildupload 2wuck PHP Tipps 2006 2 03.07.2006 07:05
Bildupload bzw auslesen klappt nicht mehr! Broadcast PHP Tipps 2006 5 29.05.2006 14:44
Problem beim Bildupload/ Thumbnailerstellen imported_FlasH PHP Tipps 2006 2 02.03.2006 08:12
bildupload ohne reload des bildes seejay PHP Tipps 2006 6 18.02.2006 12:53
bildupload groesse aendern und speichern PHP Tipps 2006 13 17.02.2006 13:27
Problem beim Bildupload PHP Tipps 2005-2 2 11.09.2005 19:30
Bildupload & Wasserzeichen Beitragsarchiv 2 07.12.2004 13:07
Webshop für Software / Bildupload Off-Topic Diskussionen 1 18.06.2004 22:54
[Erledigt] Bildupload in Graustufen PHP-Fortgeschrittene 1 15.06.2004 18:14

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
javascript bildupload, prüfen ob bildupload erfolgreich ansonsten formular ausgabe, php upload nummerieren, $_files[ mit dynamischen namen, php bildupload als schleife, php upload validieren, bilder validieren php, php bilderupload dateigröße, php image upload klasse für validierung, $_files nummerieren, php, max bildgröße bildupload php, bildupload php maximale dateigröße, bilder validierung, uploader starten bild php, php bild upload name ändern und aufsteigend nummerieren, bilder upload schleife, validierung bild php, $_files bild zu groß falscher bildtyp, php bilder upload in schleife

Alle Zeitangaben in WEZ +1. Es ist jetzt 13:42 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