Bild upload und Bild löschen

thehasso

Erfahrenes Mitglied
HALLO,

ich bin gerade an meinen Grenzen in php gestoßen und weiß total nicht weiter. Naja eigentlich denk ich es ist total einfach aber das Problem lässt sich einfach nicht beheben! Deswegen such in einen PROFI der das vielleicht lösen kann.

Und zwar hab ich in meinen Upload Script 3 Bilder die man hochladen kann. Ich möchte, dass wenn man ein Bild hochlädt, automatisch das davorige gewesene Bild gelöscht wird. Sprich Ich setz als Bild 1 lima.jpg und 1 tag später setze ich heidi.jpg als Bild 1 dann sollte lima.jpg automatisch gelöscht werden. Nunja hört sich irgendwie simpel an aber irgendwie haut's nicht immer hin.

Denn das verrückte ist, wenn ich bild1 hochlade, dann wird der name von bild 1 in der datenbank ein geschrieben. Wenn ich dann nochmal bild 1 hochlade dann steht in der datenbank in der Tabelle unter bild 1 das neue Bild 1 und unter bild 2 das alte bild 1 und das macht mich gerade total verrückt.


Warum ist das so?

PHP:
<? 
	require_once('dataBaseConnection.php');
	$zahl = $_SESSION['MM_UserId']; 
	// Alle 3 Bilder aus der Datenbank auslesen um Sie beim update zu löschen!
	$SQL = "SELECT * FROM tblbenutzer WHERE intID = $zahl" ;
	
	$REC = mysql_query($SQL);
   
    	$RECset = mysql_fetch_assoc($REC);
		
		$pic0 = $RECset["dateiname"];
		$pic1 = $RECset["bild1"];
		$pic2 = $RECset["bild2"];
		
?>
</head>

<body>


<h2>Bilder - Hochladen</h2>
<form  action="<? echo $_SERVER['PHP_SELF'];?>"  method="post" enctype="multipart/form-data">
  <br>
  <input type="hidden" name="MAX_FILE_SIZE" value="902400">

  <br/>
  <span id="sprytrigger1"><input type="file" name="dateiname"></span><br/><br/>
  
  <input type="file" name="bild1"><br/><br/>
    <input type="file" name="bild2"><br/>

   <input type="hidden" name="abschicken" value="1">
  <input type="submit" value="Übertragen">
</form>
<div class="tooltipContent" id="sprytooltip1">Profilanzeige Bild</div>

<?php


if (isset($_POST["abschicken"])) {
	
  

  
  //  echo "--->";echo $tmp_name; echo "<---";
	// echo "--->";echo $tmp_name1; echo "<---";

  
  // Festlegen des Pfades mit Dateinamen.     
 
 
  
  
    if ( $_FILES['dateiname']['type']  != NULL ) {
  
     if ($_FILES['dateiname']['type'] != "image/jpeg") {	// size $_FILES['dateiname']['size'] 
	  echo "<br>";
	  printf("FEHLER1, Die Datei <b>%s</b> konnte nicht Hochgeladen werden.", $_FILES['dateiname']['name']);
   
   }
   elseif ( $_FILES['dateiname']['size']  >= 1000000 )
   { 
   		printf("FEHLER1, Die Datei <b>%s</b> überschreitet die Maximale Upload größe!", $_FILES['dateiname']['name']);
	}
   
   else{
  $dateiname = $_FILES['dateiname']['name'];
  $tmp_name = $_FILES['dateiname']['tmp_name'];
   
   $uploadname ="img/$dateiname";
   
   		move_uploaded_file($tmp_name,$uploadname); 
		
   		echo "<br>"; 
   		printf("Die Datei <b>%s</b> wurde erfolgreich Hochgeladen.", $_FILES['dateiname']['name']);
		echo "<img src='../okay.png' width='68' height='52' />";   
   }
   
}
 


if ( $_FILES['bild1']['type']  != NULL ) {
	   
	    if ($_FILES['bild1']['type'] != "image/jpeg") {
    		echo "<br>"; 
	  		printf("Fehler2, Die Datei <b>%s</b> konnte nicht Hochgeladen werden.", $_FILES['bild1']['name']);
   	}
     
	elseif ( $_FILES['bild1']['size']  >= 1000000 )
   	{ 
   		printf("FEHLER2, Die Datei <b>%s</b> überschreitet die Maximale Upload größe!", $_FILES['bild1']['name']); 
	}
   
   else{
	
	$bild1 = $_FILES['bild1']['name'];
    $tmp_name1 = $_FILES['bild1']['tmp_name'];
	
 	$uploadname1 ="img/$bild1";
 
   	move_uploaded_file($tmp_name1,$uploadname1);  
    
		echo "<br>"; 
		printf("Die Datei <b>%s</b> wurde erfolgreich Hochgeladen.", $_FILES['bild1']['name']);
		echo "<img src='../okay.png' width='68' height='52' />";	
   }
   
}
   
   
   
   if ( $_FILES['bild2']['type']  != NULL ) {
	   
    	if ($_FILES['bild2']['type'] != "image/jpeg") {
      	echo "<br>"; 
	  	printf("FEHLER3, Die Datei <b>%s</b> konnte nicht Hochgeladen werden.", $_FILES['bild2']['name']);
   }
   
   elseif ( $_FILES['bild2']['size']  >= 1000000 ){ 
   		printf("FEHLER3, Die Datei <b>%s</b> überschreitet die Maximale Upload größe!", $_FILES['bild2']['name']);
   }
   
   else
   {
	
	$bild2 = $_FILES['bild2']['name'];
    $tmp_name2 = $_FILES['bild2']['tmp_name'];
  	
	$uploadname2 ="img/$bild2";
  
  	 	move_uploaded_file($tmp_name2,$uploadname2); 
    	echo "<br>"; 
		printf("Die Datei <b>%s</b> wurde erfolgreich Hochgeladen.", $_FILES['bild2']['name']);
   		echo "<img src='../okay.png' width='68' height='52' />";
   }
    
}
   			
	
	$zahl = $_SESSION['MM_UserId'];   // HIER WIRD DER ZAHL DIE SESSION 

    require_once('dataBaseConnection.php');




if ($dateiname == NULL && $bild1 == NULL && $bild2 == NULL){

}


if ($dateiname == NULL && $bild1 == NULL && $bild2 != NULL){

// hier erst den namen der datei auslesen, und dann das uplink um das bild zu löschen aus dem Ordner und dann automatisch den namen updaten

// die , die ungleich sind müssen gelöscht werden weil ein neues rienkommt

if ( $pic2 != NULL ) {
unlink("img/".$pic2); 
} 
 
echo "1";

	$SQL = "UPDATE tblbenutzer SET " ;
	$SQL = $SQL . " bild2 = '" . $bild2 . "' ";
	$SQL = $SQL . " WHERE intID = " . $zahl ;
	mysql_query($SQL);


}


if ($dateiname == NULL && $bild1 != NULL && $bild2 != NULL){

echo "2";

if ( $pic1 != NULL ) {
unlink("img/".$pic1); 
}

if ( $pic2 != NULL ) {
unlink("img/".$pic2); 
}

	$SQL = "UPDATE tblbenutzer SET " ;
	$SQL = $SQL . " bild1 = '" . $bild1 . "', ";
	$SQL = $SQL . " bild2 = '" . $bild2 . "' ";
	$SQL = $SQL . " WHERE intID = " . $zahl ;
	mysql_query($SQL);


}


if ($dateiname != NULL && $bild1 != NULL && $bild2 != NULL){

echo "3";


if ( $pic0 != NULL ) {
unlink("img/".$pic0); 
}
if ( $pic1 != NULL ) {
unlink("img/".$pic1); 
}
if ( $pic2 != NULL ) {
unlink("img/".$pic2); 
}


	$SQL = "UPDATE tblbenutzer SET " ;
	$SQL = $SQL . " dateiname = '" . $dateiname . "', ";
	$SQL = $SQL . " bild1 = '" . $bild1 . "', ";
	$SQL = $SQL . " bild2 = '" . $bild2 . "' ";
	$SQL = $SQL . " WHERE intID = " . $zahl ;
	mysql_query($SQL);


}


if ($dateiname != NULL && $bild1 == NULL && $bild2 == NULL){

echo "4";

if ( $pic0 != NULL ) {
	
unlink("img/".$pic0); 	 
}

$SQL = "UPDATE tblbenutzer SET " ;
	$SQL = $SQL . " dateiname = '" . $dateiname . "' ";
	$SQL = $SQL . " WHERE intID = " . $zahl ;
	mysql_query($SQL);


}


if ($dateiname != NULL && $bild1 != NULL && $bild2 == NULL){

echo "5";
if ( $pic0 != NULL ) {
unlink("img/".$pic0); 
}
if ( $pic1 != NULL ) {
unlink("img/".$pic1); 
}

$SQL = "UPDATE tblbenutzer SET " ;
	$SQL = $SQL . " dateiname = '" . $dateiname . "', ";
	$SQL = $SQL . " bild1 = '" . $bild1 . "' ";
	$SQL = $SQL . " WHERE intID = " . $zahl ;
	mysql_query($SQL);


}


if ($dateiname != NULL && $bild1 == NULL && $bild2 != NULL){

if ( $pic0 != NULL ) {
unlink("img/".$pic0); 
}
if ( $pic2 != NULL ) {
unlink("img/".$pic2); 
}


echo "6";

	$SQL = "UPDATE tblbenutzer SET " ;
	$SQL = $SQL . " dateiname = '" . $dateiname . "', ";
	$SQL = $SQL . " bild2 = '" . $bild2 . "' ";
	$SQL = $SQL . " WHERE intID = " . $zahl ;
	mysql_query($SQL);


}


if ($dateiname == NULL && $bild1 != NULL && $bild2 == NULL){
echo "7";


if ( $pic1 != NULL ) {
unlink("img/".$pic1); 
}


	$SQL = "UPDATE tblbenutzer SET " ;
	$SQL = $SQL . " bild1 = '" . $bild1 . "' ";
	$SQL = $SQL . " WHERE intID = " . $zahl ;
	mysql_query($SQL);


}

	
   



}
?>


also so gesehen klappt irgendwie das ganze überlegte konzept nicht..über jede hilfe sehr dankbar!

lg
 
Guten Morgen,

vorweg würde ich dir für die Zukunft raten, für solche Problematiken Funktionen zu schreiben. Ist eine einmalige Schreibarbeit und später kannst du einfach nur noch Werte einfügen. Ist praktischer (wobei in meinem Beispiel keine Werte übergeben werden :p) ;).

Darüber hinaus habe ich eine Funktion geschrieben, wobei ich nicht genau weiß, ob ich dein Problem korrekt verstanden habe:

Das Skript ist ungetestet, aber prinzipiell schickst du dein Formular ab und die Funktion "handlePictureUpload();" wird aufgerufen.
Innerhalb dieser Funktion - und daran müsstest du dich dann halten - definiere ich per Array die Feldnamen (aus dem Formular und auch die aus der Datenbank. D.h. du müsstest dafür sorgen, dass die Feldnamen gleich sind. Ist sicherlich nicht die schönste Variante, aber erst einmal ok).

Des weiteren prüft die Funktion per foreach()-Schleife, welches Feld ausgefüllt wurde oder ob mehrere Felder ausgefüllt wurden.
Es wird das neue Bild hochgeladen, dann geprüft, ob es bereits einen Dateipfad in der Datenbank zu dem jeweiligen Feld für den jeweiligen Benutzer gibt und löscht dieses Bild ggf., sofern es sich noch auf dem Server befindet.

Danach wird ein Update gemacht und der neue Dateipfad in dem entsprechenden Feldnamen gespeichert.

PHP:
<?
session_start();
require_once('dataBaseConnection.php');

function handlePictureUpload() {
    define('ROOT_PATH',dirname(__FILE__).'/');
	$fieldArr		= array('dateiname','bild1','bild2');
	$userID			= $_SESSION['MM_UserId'];
	
	if(count($fieldArr)>0) {
		foreach($fieldArr as $fieldKey=>$fieldName) {
			$fileTMPName	= $_FILES[$fieldName]['tmp_name'];
			$fileName		= $_FILES[$fieldName]['name'];
			$fileSize		= $_FILES[$fieldName]['size'];
			$fileType		= $_FILES[$fieldName]['type'];
			
			if($fileTMPName!='') {
			
				if($fileType!='image/jpeg') {
					// Eventuell eine andere Fehlerbeschreibung ausgeben. Der Anweisung besagt eher, dass der Dateityp falsch ist.
					printf('FEHLER, Die Datei <b>%s</b> konnte nicht hochgeladen werden.', $fileName);
				} else if($_FILES[$fieldName]['size']>=1000000) {
					printf('FEHLER1, Die Datei <b>%s</b> überschreitet die maximale Upload Größe!', $fileName); 
				} else {    
					$uploadName ='img/'.$fileName;
					
					if(!move_uploaded_file(ROOT_PATH.$fileTMPName,$uploadName)) {
						// Hier wäre die Fehlermeldung, die du zurzeit bei der Fehlerabfrage bezüglich des Dateitypens ausgibst, angebracht.
						printf('FEHLER, Die Datei <b>%s</b> konnte nicht hochgeladen werden.', $fileName);
					} else {
						$sQuery=mysql_query("SELECT * FROM tblbenutzer WHERE ".$fieldName."!='' AND intID='".$userID."'");
						if(mysql_num_rows($sQuery)>0) {
							$fRow=mysql_fetch_assoc($sQuery);
							if(file_exists($fRow[$fieldName])) {
								unlink($fRow[$fieldName]);
							}
						}
						
						// Query
						$iQuery = mysql_query("UPDATE tblbenutzer SET ".$fieldName."='".mysql_real_escape_string($uploadName)."' WHERE intID='".$userID."'");
						if(mysql_affected_rows()>0) {
							// Textausgabe, dass Eintrag erfolgreich geupdatet wurde.	
						}
						
						// Ggf. diesen Text auch noch in die Mysql_affected_rows()-Anweisung setzen.
						printf('Die Datei <b>%s</b> wurde erfolgreich Hochgeladen.', $fileName); 
						echo "<img src='../okay.png' width='68' height='52' />"; 	
					}
				}
			}
		}
	}
}

if(isset($_POST['abschicken']) and $_POST['abschicken']==1) {
	handlePictureUpload();
}
?>

<h2>Bilder - Hochladen</h2> 
<form  action="<?=$_SERVER['PHP_SELF'];?>"  method="post" enctype="multipart/form-data"> 
	<input type="hidden" name="MAX_FILE_SIZE" value="902400">
    
	<span id="sprytrigger1">
    	<input type="file" name="dateiname">
    </span>
    <br/><br/> 

	<input type="file" name="bild1"><br/><br/> 
	<input type="file" name="bild2"><br/> 

	<input type="hidden" name="abschicken" value="1"> 
	<input type="submit" value="Übertragen"> 
</form> 
<div class="tooltipContent" id="sprytooltip1">Profilanzeige Bild</div>
 
moin shorty,

also ich bedanke mich erstmal total für deine mühe, schade dass das Skript ungetestet ist, weil egal welches Bild man hochladet die Fehlmeldung erscheint, falsches Dateiformat.

In der Datenbank bei mir ist für Bild1 der name dateiname, für Bild 2 bild1 und für Bild 3 bild 2 als Name angegeben. Die kann ich leider nicht ändern weil meine ganze Website schon so strukturiert ist und cirka 50 php Dateien darauf beruhen.

Hoffe du kannst das Problem auch noch für mich beheben eventuell ein tipp geben.

Vielen dank.

lg
 
Hey,

bin zwar zurzeit gehindert, mir das nochmal anzuschauen, aber schau mal nach, was $fileType dir für einen MIME-Type ausgibt.

Einfach vor "if($fileTMPName!='') { " den $fileTyp per 'echo "FileType: ".$fileType.' ausgeben lassen.
 
keine ursache, es erscheint komischerweise der richtige datentyp.

die fehlermeldung:

image/jpegFEHLER, Die Datei wehbe.jpg konnte nicht hochgeladen werden.

obwohl der TYP in der if abfrage auf ungleich überprüft wird. Dann hab ich versuch es auf identisch ab zu fragen, sprich == dann kam ebenfalls die selbe fehlermeldung.


also das sind so Dinge, die mich verrückt machen beim Programmieren ...:confused:
 
Hi,

hier mal ein Ansatz von mir.

Das kannst du in einem einzigen Query erledigen.

Zum Beispiel so (ungetestet):
PHP:
$arrFiles = array ();
$arrFields = array ();

if (isset ($_FILES['dateiname'])) {
	$arrFiles[0] = $_FILES['dateiname']['name'];
	$arrFields[0] = '`dateiname`';
}
if (isset ($_FILES['bild1'])) {
	$arrFiles[1] = $_FILES['bild1']['name'];
	$arrFields[1] = '`bild1`';
}
if (isset ($_FILES['bild2'])) {
	$arrFiles[2] = $_FILES['bild2']['name'];
	$arrFields[2] = '`bild2`';
}

$query = '	REPLACE INTO `tblbenutzer`
				(' . implode (',',$arrFields) . ')
			VALUES
				(' . implode (',',$arrFiles) . ')
			WHERE intID = ' . $zahl;

Dazu noch den Typ und die Größe prüfen und die Bilder verschieben.
 
hallo,

das skript funktioniert ebenso nicht....also wenn ihr euch schon die mühe macht es zu schreiben wärs's nicht schlecht es auch zu testen :)

trozdem danke für deine mühe..
 
Hi,

und wir fänden es nett, wenn du dir die Mühe geben würdest, in deinen Forenbeiträgen etwas mehr auf die Rechtschreibung (Groß- u. Kleinschreibung) zu achten :rolleyes:
Bitte halte dich an die hier praktizierte Netiquette. Dies betrifft vor allem eine verständliche Ausdrucksweise sowie eine vernünftige Groß- und Kleinschreibung. Danke.

Vielen Dank!

mfg Maik
 
Zurück