ereg Problem!

Cemil

Erfahrenes Mitglied
Hallo,
habe unter Suchen & Finden nachgeschaut, aber für mein Problem nichts gefunden.

Ich versuche gerade zu überprüfen, ob eine gültige Bildatei ausgewählt wurde oder nicht und zwar mit folgendem Code:

PHP:
<?php
/ Bilddatei
if (empty($uploadfile)) {
    echo "<p>Bitte wählen Sie eine Bilddatei aus (nur gif, jpeg oder png).</p>";
}
if (!empty($uploadfile)) {
if (!eregi("^[a-z0-9]+[/.gif|/.jpg|/.png]$",$uploadfile)){
    echo "<p>Bitte wählen Sie eine gültige Bilddatei aus.</p>";
}
}
?>

Meine Frage:

Obwohl ich eine gültige Bilddatei auswähle, erhalte ich eine Fehlermeldung. Was habe ich falsch gemacht?

Grüsse
 
ich würde die eregi funktion so schreiben:
PHP:
<?php 
if (empty($uploadfile)) { 
    echo "<p>Bitte wählen Sie eine Bilddatei aus (nur gif, jpeg oder png).</p>"; 
} 
if (!empty($uploadfile)) { 
if (eregi("\.jpg$", $uploadfile) || 
             eregi("\.gif$", $uploadfile) ||  
             eregi("\.png$", $uploadfile)) {

    echo "<p>Bitte wählen Sie eine gültige Bilddatei aus.</p>"; 
} 
} 
?>

Ist zwar von der Performance her ein wenig langsamer (eregi Funktion wird 3 mal anstatt nur 1 mal ausgeführt), aber ich denke bei einem Upload Script kommt das nicht drauf an
 
Hallo Snaker,
vielen Dank für Deine Antwort.

Habe es ausprobiert, aber leider hat es nicht geklappt.

Ich erhalte eine Fehlermeldung, obwohl ich eine gültige Datei auswähle.

PHP:
if (!empty($uploadfile)) {
if (!eregi("\.jpg$", $uploadfile) ||
    !eregi("\.gif$", $uploadfile) ||
    !eregi("\.png$", $uploadfile)) {
echo "<p>Bitte wählen Sie eine gültige Bilddatei aus.</p>";
}
}
Grüsse
 
Was genau ist denn überhaupt der Inhalt von $uploadfile?

Optimalerweise solltest du den MIME-Type der hochgeladenen Datei prüfen....ne Dateiendung ist noch lange kein Garant für einen Dateityp.
 
Original geschrieben von fatalus
Was genau ist denn überhaupt der Inhalt von $uploadfile?

Optimalerweise solltest du den MIME-Type der hochgeladenen Datei prüfen....ne Dateiendung ist noch lange kein Garant für einen Dateityp.

Was fatalus sagen will ist, dass du es lieber so probieren solltest:
PHP:
<?php 
if ($_FILE['myfile']['type']!='image/pjpeg')
{
echo "Das war aber kein Bild"; 
}
?>
---> SelfHTML MIME Typen<---
 
PHP:
<?php 

if (empty($uploadfile)) { 
    echo "<p>Bitte wählen Sie eine Bilddatei aus (nur gif, jpeg oder png).</p>"; 
} 
if (!empty($uploadfile)) { 
	preg_match("/([a-z0-9]+[ b ][*][ /b ](png|gif|jpg|jpeg))/i",$uploadfile,$tmp);
	if (!$tmp)
		 echo "<p>Bitte wählen Sie eine gültige Bilddatei aus.<br>$uploadfile</p>"; 
	else 
		echo "schein korrekt zu sein;
} 
?>
bitte durch ein backslash + punkt ersetzen
das wird hier im board nicht angezeigt also so /. aber mit backslash
 
Zuletzt bearbeitet:
Hallo,
vielen Dank für eure Antworten.

Hab's mal so versucht und hat im grossen und ganzen sehr gut geklappt. Nur mit png habe ich so meine Probleme. Habe mich schon bei jpeg dumm und dämlich gesucht, wie der mime-type lauten könnte (Dank an StefanR).

PHP:
if(empty($uploadfile)) {
    	echo "<p>Bitte wählen Sie eine Bilddatei aus (nur gif, jpg, jpeg oder png).</p>";
    	exit;
		}
		else {
		$uploadfile_tempname = $_FILES['uploadfile']['tmp_name'];
		$uploadfile_name = $_FILES['uploadfile']['name'];
		$uploadfile_type = $_FILES['uploadfile']['type'];
		$uploadfile_size = $_FILES['uploadfile']['size'];
		if($uploadfile_type != "image/gif" && $uploadfile_type != "image/pjpeg" && $uploadfile_type != "image/png") {
   		$uploadfile_err[] = "<p>Bitte wählen Sie eine gültige Bilddatei aus.</p>";
		}
		if($uploadfile_size > "100000") {
    		$uploadfile_err[] = "<p>Die Datei welche du hochladen willst, ist zu gross!<br>Maximale Dateigrosse beträgt 100 KB!</p>";
		}
		if(empty($uploadfile_err)) {
    		copy("$uploadfile_tempname", "$uploadfile_path"."$uploadfile_name");
    		echo "<p>Die Datei $uploadfile_name wurde erfolgreich hochgeladen!</p>";
		}
		else {
    		foreach($uploadfile_err as $uploadfile_error)
    		echo "$uploadfile_error<br><br>";
		}
		}
Grüsse
 
Zurück