Prüfen ob Datei ausgewählt wurde!

daniel_sun

Erfahrenes Mitglied
Hallo,

ich habe folgendes Formular:

HTML:
		<form action="index.php?page=newalbum" method="POST" enctype="multipart/form-data">
		<table border="0" summary="">
			<tr>
				<td>Name des Album:</td><td><input type="text" name="album_name" value="<?=$album_name?>" size="40"><?=$name_error?></td>
			</tr>
			<tr>
				<td>Stattgefunden am:</td><td><input type="text" name="dd" value="<?=$dd?>" size="2" maxlength="2"><input type="text" name="mm" value="<?=$mm?>" size="2" maxlength="2"><input type="text" name="yyyy" value="<?=$yyyy?>"  size="4" maxlength="4"><?=$date_error?></td>
			</tr>
			<tr>
				<td>Vorschaubild:</td><td><input type="file" name="preview"  accept="image/*" size="100"><?=$preview_error?></td>
			</tr>
			<tr>
				<td>Bilder:</td><td><input type="file" name="pictures[]" multiple="true" accept="image/*" size="100"><?=$pic_error?></td>
			</tr>
			<tr>
			<td><input type="submit" name="submit" value="Album erstellen"></td>
			</tr>
		</table>
		</form>

Dieses PHP Script prüft, ob die Felder nach den Vorgaben ausgefült wurde!

PHP:
if($_POST['album_name'] == ""){
			$name_error = "Bitte geben Sie einen Albumnamen ein!";
			$error = true;
		}
		if($_POST['dd'] > 31 || $_POST['mm'] > 12 || strlen($_POST['dd']) != 2 || strlen($_POST['mm']) != 2 || strlen($_POST['yyyy']) != 4){
			$date_error = "Bitte geben Sie das Datum im richtigen Format ein! z.B. 01.01.2001";
			$error = true;
		}
		if($_POST['dd'] == "" || $_POST['mm'] == "" || $_POST['yyyy'] == ""){
			$date_error = "Bitte geben Sie ein Datum ein! z.B. 01.01.2001";
			$error = true;
		}
		if(!isset($_FILE['preview']['tmp_name'])){
			$preview_error = "Bitte wählen Sie ein Vorschaubild aus!";
			$error = true;
		}
		if($error){
			$album_name = $_POST['album_name'];
			$dd = $_POST['dd'];
			$mm = $_POST['mm'];
			$yyyy = $_POST['yyyy'];
                        require_once 'formular.html';
		}

Mein Problem ist nun, das beim Dateiupload immer steht das keine Datei ausgewählt wurde. Egal ob Eine Ausgewählt wurde oder nicht. Was mache ich bei der betreffenden IF-Abfrage falsch?

Danke im Vorraus!

Gruß
Daniel_sun
 
Die Superglobale für Dateien lautet $_FILES. Demzufolge müsste diese if-Condition angepasst werden:

PHP:
if(!isset($_FILES['preview']['tmp_name'])){
 
Danke. Das klappt nun soweit. Aber nur einmal. Wenn man was Auswählt und wegen einem anderen Error wieder auf die formular-seite kommt und dann nichts auswählt erkennt er den fehler nicht mehr.

Ich nehme an die Variable bleibt vom ersten Mal gestetzt stimmt das? Und wenn ja kann man die iwie "reseten" damit er den fehler auch das nächste mal erkennt?
 
Ich hab nicht ganz verstanden. Also du hast eine Datei hochgeladen, die einen Fehler provoziert hat, dann wirst du auf das Upload-Form zurück geleitet. Dort wählst du jetzt _keine_ Datei aus sondern betätigst direkt den Submit-Button, und dann wird dir welcher Fehler angezeigt?

Hab ich das überhaupt richtig wieder gegeben?
 
Fast :-)

Ich wähle eine Datei aus. Vergesse aber einen Albumnamen einzugeben! Ich werde auf das Upload-Formular zurückgeleitet wo der Fehler ausgegebem wird, dass ich einen Albumnamen eingeben muss.

Das tue ich nun. Wähle diesesmal aber keine Datei aus! Das erkennt mein Script aber nicht. Sondern verhält sich als wäre eine Datei ausgwählt worden.

Nun vermute ich das die Variable $_FILES['preview']['tmp_name'] noch vom ersten Sendevorgang (wo der Albumname fehlte) gesetzt ist und daher der isset() true zurück gibt.

Ich weis aber nicht wie ich das ändern kann.
 
Kennst du auch den Grund, warum es mit isset() in diesem Fall nicht funktionert?

Wenn keine Datei hoch geladen wurde, ist tmp_name nicht leer sondern:

http://de.php.net/manual/de/features.file-upload.post-method.php#104349 hat gesagt.:
"If no file is selected for upload in your form, PHP will return $_FILES['userfile']['size'] as 0, and $_FILES['userfile']['tmp_name'] as none."
 
Zurück