error-Frage

Oetzicool

Erfahrenes Mitglied
Hey Leute ich habe folgendes Script um mehrer Dateien hochzuladen und Formulardaten in einer Datenbank zu speichern wenn ein Feld offen bleibt dann gibts eine Fehlermeldung wie gewünscht! Aber wenn alle nötigen Felder ausgefüllt wurden kommt immer dieser Fehler:
Code:
Notice: Undefined variable: err in C:\xampp\htdocs\testsite\upload.php on line 45

Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\testsite\upload.php on line 45

und hier der Code des Uploadscripts:
PHP:
<?php

	include "inc/config.php";
	@mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) OR die(mysql_error());
    mysql_select_db(MYSQL_DATABASE) OR die(mysql_error());
    
    $vorname = $_POST['vorname'];
    $nachname = $_POST['nachname'];
    $betreff = $_POST['betreff'];
    $email = $_POST['email'];
    $nachricht = $_POST['nachricht'];
    $time = time();
    
    if(!isset($vorname,$nachname,$betreff,$email,$nachricht))
    	{ 
			$err[] = "Bitte das Formular benutzen!";
		}
		
	if(trim($vorname == ""))
	{
			$err[] = "Bitte einen Vornamen eingeben!";
	}
	if(trim($nachname == ""))
	{
			$err[] = "Bitte einen Nachname eingeben!";
	}
	if(trim($betreff == ""))
	{
			$err[] = "Bitte einen Betreff eingeben!";
	}
	if(trim($nachricht == ""))
	{
			$err[] = "Bitte eine Nachricht eingeben!";
	}
	
	if(!((trim($vorname == ""))||(trim($nachname == ""))||(trim($betreff == ""))||(trim($nachricht == "")))) 
	{
	    $sql = "INSERT INTO mails
					(vorname,nachname,betreff,email,text,date)
			VALUES
					('$vorname','$nachname','$betreff','$email','$nachricht',$time)";
			mysql_query($sql) OR die(mysql_error());
    
	} else {
			foreach($err as $error) 
	    			echo "$error<br>";
	}

	
    
if(isset($_FILES['file']) && is_array($_FILES['file'])) 
{ 
  foreach($_FILES['file']['error'] as $k=>$v) 
    { 
		if($v==0)
		{   
			$tempname = $_FILES['file']['tmp_name'][$k];  
		 	$name = $_FILES['file']['name'][$k]; 
	      	$size = $_FILES['file']['size'][$k];  
			
		  
		  		if($size > "5242880") 
				{  
	      			$err[] = "Die Datei welche du hochladen willst, ist zu gross!<br>Maximale Dateigrosse beträgt 5 MB!";  
		 	 	}
				
				$end = strrchr($name, ".");
				$filename = "file_".$time.$k . $end; 
		  		if(empty($err)) 
				{  
	    			move_uploaded_file("$tempname", "img/$filename");
					$sql = "INSERT INTO files
								(name,size,date)
							VALUES
								('$filename','$size','$time')";
					mysql_query($sql) OR die(mysql_error());  
	    			echo "<br>Die Datei <b>$filename</b> wurde erfolgreich hochgeladen!<br>";
					echo "Die Datei kann <a href=\"img/$filename\">Hier</a> angeschaut werden<br>";
					 
				} 
	    } 
	}
	echo "Mails <a href=\"mails.php\">Hier</a> checken<br>"; 
} else {
	echo "Fehler beim Übertragen";
}
?>
 
PHP:
if(!((trim($vorname == ""))||(trim($nachname == ""))||(trim($betreff == ""))||(trim($nachricht == "")))) 
    {

Das ! am Anfang der Verkettung ist falsch, dadurch wird immer in den else Teil gesprungen.

Der zweite Fehler entsteht dadurch, dass $err nicht gesetzt ist. Lösen könntest du es so, dass du bevor du auf Fehler prüfst, $err als Array definierst.

PHP:
$err = array();

if(!isset($vorname,$nachname,$betreff,$email,$nachricht))
#usw.
 
Hi,

und in die Datenbank wird auch nichts eingetragen, oder? Deine Bedingungen sind falsch:

statt:

PHP:
trim($vorname == "")

meintest Du doch wohl:

PHP:
trim($vorname) == ""

Warum fragst Du vor dem Insert nicht einfach ab, ob $err leer ist?

LG
 
Zurück