Avatar Upload Problem

So, da mir bei phpforum.de nicht geholfen werden konnte, versuche ich es mal hier.

Habe ein Script, welches irgendwie nicht ganz funktioniert.

Das ganze gibt dann das aus:

[code]
Notice: Undefined index: file in /users/cbgler/www/**/dev/logged-in/pages/avatar_upload.php on line 5

Notice: Undefined index: file in /users/cbgler/www/**/dev/logged-in/pages/avatar_upload.php on line 6

Notice: Undefined index: file in /users/cbgler/www/**/dev/logged-in/pages/avatar_upload.php on line 7

Notice: Undefined index: file in /users/cbgler/www/**/dev/logged-in/pages/avatar_upload.php on line 8
Sorry, es dürfen nur Gif, Jpeg und PNG Bilder hochgeladen werden!.[/code]

Die Grafik, welche ich Testweise versuche hochzuladen ist GARANTIERT kleiner als 4MB und es ist eine png Grafik.

Nochwas: error_reporting(E_all); ist aktiviert und wenn ich print_r($_FILES); reinschreibe gibt es entweder nur Array aus oder Array()

Kann mir jemand helfen?

Chris

schreib mal ganz oben

<?php
if(isset($_POST['upload'])){
print_r($_FILES);
exit;
//usw...

Wer lesen kann ist klar im Vorteil xD

Das ganze gibt einfach “Array” oder “Array()” aus.

Chris

OMG…hab ich glatt übersehen :ps:

Vielleicht übergibt dein Browser keine Dateien an Formulare, die kein Formularziel angeben, sonst würde mir auch nix besonderes auffallen. Vielleicht mal den generierten Quelltext validieren

Also beim Validieren bekomme ich nur Errors, die von den Fehlermeldungen kommen xD

In Google Chrome gibt er aus: Keine Datei ausgewählt

und ich würde ja mal sagen, dass wenn es mit FF auch nicht geht, dass es an irgendwas anderem liegen muss, oder?

Chris

also mit action="".$_SERVER[‘PHP_SELF’]."" klappt es bei mir

warum machtn ihr immer so viele Escapezeichen xD

macht des echo doch einfach mit echo ‘hier der text’; dann müsst ihr nicht alles escapen xD

Ich teste es gleich mal. Mom

EDIT: Hmmm… Wenn ich auf Hochladen klicke komme ich auf die index.php xD

Chris

das habe ich nicht geschrieben sondern kopiert, weil ich nicht wusste wie man das schreibt… da hab ich mich schon zu oft zum affen gemacht… server mit f und sowas^^

Die Datei wird wohl includet. Häng einfach den GET-Parameter, mit welchem du die Datei includest an den URI bei dem action-Attribut an.

Hallo,

ich habe diese Script hier geschrieben und es funktioniert gut:

[code]<?php

$Head = "

Bilder Upload ";

$Foot = "

";

$Formular ="

Datei auswählen:

";

if (!empty($_POST))
{
$postNameArr = array(‘SEND’, ‘F4_Submit’); // Array von ‘$_Post’ Werten für die verschiedenen Formulare bzw. Buttons.
$postIdentifierArr = array(); // Array fuer alle in ‘$_POST’ gefundenen Werte

foreach ($postNameArr as $postName) 
{ 
    if (array_key_exists($postName, $_POST)) 
    { 
        $postIdentifierArr[] = $postName; 
    } 
} 
/*  
* Nur ein Formular bzw. Button sollte übertragen worden sein, sodass nur ein Wert in 'postIdentifierArr'.  
* Die 'DIE' Aussagen werden zur Warnung bei 0 oder mehr als einem Formular ausgegeben 
*/    
if (count($postIdentifierArr) != 1) 
{ 
    count($postIdentifierArr) < 1 or die("\$_POST enthält mehr als einen Wert: " . implode(" ", $postIdentifierArr)); 
    die("\$_POST enthält keinen gültigen Wert.\n");                    // We have not died yet so we must have less than one. 
} 
      
switch ($postIdentifierArr[0]) 
{ 
case 'SEND': 
    { 
        echo "<body style=\"background-color: #9EA7E0\">"; 
        echo "<a style=\"background-color: #FFC033; font-weight:bold; color:red; font-size:200%;\"href=\"javascript:self.location.href='$_SERVER[PHP_SELF]?UIN=$UIN'\">zur&uuml;ck</a><br>"; 
        $dateiname = Ersetze ($_FILES['userfile']['name']); 
        if( file_exists($uploaddir.$dateiname)) 
        { 
            check_datei(); 
            echo "Die Datei mit dem Dateinamen <b>$datei_name</b> existierte bereits.<br> Ihre Datei wurde in <b>$dateiname</b> umbenannt.<br>"; 
        } 
        if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir."$dateiname")) 

        { 
            echo "Upload erfolgreich. Datei ".$uploaddir.$dateiname." hochgeladen <br>"; 
        } 
        else  
        { 
                print "Possible file upload attack!  Here's some debugging info:\n 
                Datei ".$uploaddir.$dateiname; 
                print_r($_FILES); 
        }; 
        CreateThumbnail($dateiname); 
        break; 
    }  
case 'F4_Submit': 
    { 
        echo "Hier der Code f&uuml;r einen eventuell bet&auml;tigten F4_Submit Button z.B. L&ouml;schen."; 
        break; 
    } 
} 

}
else // $_POST is empty.
{
/*
* Erster Aufruf des Scripts was soll angezeigt wwerden
*/

echo $Head.$Formular.$Foot; 

}

?> [/code]

Ich weiss das Formular sieht nicht toll aus aber es geht, ausserdem koennen noch mehr Buttons abgefragt werden.

In <input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"HIER MUSS DIE MAX FILE GROESSE ANGEGEBEN WERDEN\">

muss nur noch die maximale Dateigroesse angegeben werden

@ Hummer ich blicks net ganz^^ Naja, 3 Uhr xD

@ MacStone Thx, werde es heute mittag mal testen.

Chris

[quote=“MacStone”]In <input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"HIER MUSS DIE MAX FILE GROESSE ANGEGEBEN WERDEN\">

muss nur noch die maximale Dateigroesse angegeben werden[/quote]
Dann kann man Dateien beliebiger Größe hochladen. Das ist nur ein Hinweis für den Browser, den er nicht umbedingt befolgen muss :wink:

docs.php.net/manual/de/features. … method.php

xD

Das geht also auch nicht^^

Chris

da ich das aus meinen Upload herauskopiert habe, fehlten leider 2 Funktionen

einfach oben einfuegen

[code]function Ersetze($dateiname)
{
$dateiname=preg_replace( array("/ä/","/ö/","/ü/","/Ä/","/Ö/","/Ü/","/ /"),array(“ae”,“oe”,“ue”,“Ae”,“Oe”,“Ue”,"_"), $dateiname);
return $dateiname;
};

function check_datei()
{
global $dateiname, $uploaddir;
$backupstring = “copy_of_”;
$dateiname = $backupstring."$dateiname";

if( file_exists($uploaddir.$dateiname)) 
{ 
    check_datei(); 
} 

}[/code]

falls kein umbennenen in “copy_of_” erwuenscht ist den Aufruf “check_datei()” im Hauptteil entfernen

ich flieg mal wieder auf die Startseite xD

Hochladen tut er nix;-)
Irgendwie mach ich was falsch^^

Chris

Kommt jetzt immer noch eine Fehlermeldung?

Leider hatte ich noch nicht alles kontrolliert, es fehlt noch der UPLOAD-Pfad

$uploaddir = $_SERVER['DOCUMENT_ROOT']."/Images/upload/"; // kompletter Pfad zu Dateien fuer Dateinamen lesen

Bitte entsprechend anpassen, kann sein das dein Provider “$_SERVER[‘DOCUMENT_ROOT’]” nicht braucht, bei mir war es aber so

also hatte es manuell schon selbst gemacht. Mein Hoster ist bplaced, wer hätte das gedacht xD

EDIT:
Beim Aufrufen der Seite:

[quote]Notice: Use of undefined constant PHP_SELF - assumed ‘PHP_SELF’ in /users/cbgler/www/**/dev/logged-in/pages/avatar.php on line 28

=>Z.28:
[/quote]
Und wenn ich auf Hochladen klicke, dann fliege ich wieder auf index.php, hochladen tut es, soweit ich sehe, nicht. CHmod 777 müsste gesetzt sein.

Chris

postet doch nochmal den gesamten bisherigen Code




Grüße
Chris

Grüße
Chris

so ich habe jetzt das Script bei mir ausprobiert und bei mir geht es.

[code]<?php
$uploaddir = $_SERVER[‘DOCUMENT_ROOT’].“test/”; // kompletter Pfad zu Dateien fuer Dateinamen lesen
//$uploaddir = $_SERVER[‘DOCUMENT_ROOT’]."/**/dev/img/uploads/userpics/’.$id.’/profilpic/"; // kompletter Pfad zu Dateien fuer Dateinamen lesen

$allowedExtensions = array(“php”,“js”,“txt”);

function isAllowedExtension($fileName)
{
global $allowedExtensions, $fileextension;

$fileextension=end(explode(".", $fileName));
return in_array(end(explode(".", strtolower($fileName))), $allowedExtensions);

};

function Ersetze($dateiname)
{
$dateiname=preg_replace( array("/ä/","/ö/","/ü/","/Ä/","/Ö/","/Ü/","/ß/","/ /"),array(“ae”,“oe”,“ue”,“Ae”,“Oe”,“Ue”,
“ss”,"_"), $dateiname);
return $dateiname;
};

function check_datei()
{
global $dateiname, $uploaddir;
$backupstring = “copy_of_”;
$dateiname = $backupstring."$dateiname";

if( file_exists($uploaddir.$dateiname)) 
{ 
    check_datei(); 
} 

}

$Head = ‘’;

$Foot = ’ ';

$Formular =’

Datei auswählen:

';

if (!empty($_POST))
{
$postNameArr = array(‘SEND’, ‘F4_Submit’);
// Array von ‘$_Post’ Werten für die verschiedenen Formulare bzw. Buttons.
$postIdentifierArr = array();
// Array fuer alle in ‘$_POST’ gefundenen Werte

foreach ($postNameArr as $postName) 
{ 
    if (array_key_exists($postName, $_POST)) 
    { 
        $postIdentifierArr[] = $postName; 
    } 
} 
/*  
* Nur ein Formular bzw. Button sollte übertragen worden 

sein, sodass nur ein Wert in ‘postIdentifierArr’.
* Die ‘DIE’ Aussagen werden zur Warnung bei 0 oder mehr als
einem Formular ausgegeben
*/
if (count($postIdentifierArr) != 1)
{
count($postIdentifierArr) < 1 or die("$_POST enthält mehr
als einen Wert: " . implode(" “, $postIdentifierArr));
die(”$_POST enthält keinen gültigen Wert.\n");
// We have not died yet so we must have less than one.
}

switch ($postIdentifierArr[0]) 
{ 
case 'SEND': 
    { 
        echo '<a href="'.$_SERVER[PHP_SELF].'">zur&uuml;ck</a><br>'; 
        $dateiname = Ersetze ($_FILES['userfile']['name']); 
        if( file_exists($uploaddir.$dateiname)) 
        { 
            check_datei(); 
            //echo "Die Datei mit dem Dateinamen <b>$datei_name</b> existierte bereits.<br> Ihre Datei wurde in <b>$dateiname</b> umbenannt.<br>"; 
        } 
        if(isAllowedExtension($_FILES['userfile']['name'])) 
		{
			if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir."$dateiname")) 
			{ 
				//echo "Upload erfolgreich. Datei ".$uploaddir.$dateiname." hochgeladen <br>"; 
				echo 'Upload erfolgreich (Zeile 113)';
			} 
			else  
			{ 
					print "Possible file upload attack!  Heres some debugging info:n 
					Datei ".$uploaddir.$dateiname; 
					print_r($_FILES); 
			};
		};
        //CreateThumbnail($dateiname); 
        break; 
    }  
} 

}
else // $_POST is empty.
{
/*
* Erster Aufruf des Scripts was soll angezeigt werden
*/

echo $Head.$Formular.$Foot; 

}

?>
[/code]

Noch ein paar Anmerkungen:
[ol]

  1. Das Uploadverzeichnis muss komplett existieren
  2. versuch erstmal einen einfachen Pfad, ich habe es mit test/ versucht und der upload klappte, wenn es geht einfach immer weiter den Pfad vom Root Verzeichnis aus erweitern
  3. woher hast du eigentlich die ‘**’ in deinem Pfad
  4. ich habe noch eine Extension Überprüfung inzugefuegt also in Zeile 5 die erlaubten Erweiterungen eintragen
    [/ol]

Ich hoffe jetzt geht es