Ola,

Ik krijg het maar niet voormekaar dat een plaatje daadwerkelijk uit een mao wordt verwijdert als deze geupdate wordt.
BIj het aanmaken wordt een random naam aangemaakt, dit zorgt gelijk voor wat verwarring denk ik bij het verwijderen ervan (?).

(lange code, voor het complete beeld..)




<?

if (!isset($_GET['id']))  
{   
    echo "Id niet gedefineerd";  
    exit;  
}  

else if(isset($_POST['upload']))  
{ 

$fileName = $_FILES['userfile']['name'];
$tmpName  = $_FILES['userfile']['tmp_name'];
$fileSize = $_FILES['userfile']['size'];
$fileType = $_FILES['userfile']['type'];
$label  = $_POST['label'];	
$tekst  = $_POST['tekst'];


$ext= substr(strrchr($fileName, "."), 1); // extentie eruit halen
$naam = substr($fileName, 0, strrpos($fileName, '.'));  //  naam voor .extentie
$randName = $naam. '-' .substr(md5(rand() * time()), 0, 6); // random naam genereren
$newName  = $randName . '.' . $ext; // nieuwe naam + extentie
$filePath = $uploadDir . $newName; // path + nieuwe naam (+ extentie) 





//start the query 
$query = "UPDATE news SET label = '$label', tekst='$tekst', datum =  CURDATE()"; 
     
   

    if ($_FILES['userfile']['tmp_name'])
		{ 
			//// STAAT ER AL EEN BESTAND? --> VERWIJDEREN/////
			
				if( file_exists($uploadDir . $fileName ) )
			{    
			unlink($uploadDir . $fileName );

			} 
			
			//// EXTENTIE CHECK/////
			if(!in_array($ext,$allowed_filetypes))
			{
			echo '<font color="red" face=Verdana size=2>! Geen (goed) bestand geselecteerd. Upload een jpg, gif of png.</font></p>';
			$errors=1;
			}
			
			else
				{
				//// GROOTTE CHECK/////
				if ($fileSize > $max_filesize)
				{
				echo '<font color="red" face=Verdana size=2>! Bestand is te groot. Gebruik een bestand van max 800 KB.</font><p/>';
				$errors=1;
				}
				
				else {	
					// Check Height & Width
					list($width, $height, $type, $w) = getimagesize($_FILES['userfile']['tmp_name']);
					if($width != $max_width || $height != $max_height)
					{
					echo '<font color="red" face=Verdana size=2>! Afbeelding moet 450 x 300 pixels zijn</font><p/>';
					$errors=1;
					}
				
					else
						{
						//// BESTAND VERPLAATSEN NAAR MAP/////
						$result = move_uploaded_file($tmpName, $filePath); 
						if (!$result)
						{ 
						echo '<font color="red" face=Verdana size=2>Error uploading file</font><p/>';
						$errors=1;
						} 
						
						else
							{	
							//ALS ER AL EEN BESTAND, DAN INFO AAN QUERY TOEVOEGEN////
							$query .= ", name = '$newName', path = '$filePath',size = '$fileSize', type = '$fileType' "; 
							
							}  /* INSERT IF AFLSUITEN*/
						} /* VERPAASTEN IF AFLSUITEN*/
					} /* AFMETING PIXEL CHECK AFSLUITEN*/

				} /* GROOTTE IF AFLSUITEN*/
		}
	else
		{ 
		$newName = ""; //zit hier de fout?... 
		} 
		//finish off the qyery. 

$query .= "WHERE id = '{$_GET['id']}'"; 
$sql=mysql_query($query);
if(!$sql)
{
$errors=1;
trigger_error('Error, query fout:' . mysql_error());
}
			

}




?>





Moet ik in dit gedeelte eerst nog een query uitvoeren ofzo? :


<?
		if( file_exists($uploadDir . $fileName ) )
			{    
			unlink($uploadDir . $fileName );

			} 
?>



thnx voor de hulp
Zet dit bovenin je script.
<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);

// rest
?>
staat er in (niet de hele code geplaatst), naar geen error of iets., update werkt allemaal goed, alleen blijf het oude bestand nog staan..
Een aantal opmerkingen:

1. Je script is gevoelig voor SQL injectie. Zet nooit POST en GET variabelen ongecontroleerd in je queries!

2. Je controleert nergens of het verwijderen van het bestand wel gelukt is? De functie unlink() geeft FALSE terug als het verwijderen niet gelukt is. Controleer dat dus.

ps. Verder controleer je of een bestand met de opgegeven bestandsnaam bestaat terwijl je dat bestand onder een random naam opgeslagen hebt. Zo zul je het dus nooit terug vinden en zal het oude bestand inderdaad nooit verwijderd worden. Je kijkt immers niet naar de random naam die dat bestand gekregen heeft.

Als je dat wel wilt, zul je in je database een link moeten leggen tussen bestandsnaam en verkregen random naam. En bij controleren of het bestand bestaat, zul je dus eerst de bijbehorende random name uit de database moeten halen en eventueel dat betreffende bestand verwijderen.
pff.. soory hoor, maar ik heb echt geen idee hoe ik dat moet gaan doen..

EDIT: in priciepe halt hij het oude bestand (huidig) wel binnen, dus zal ik die moeten verwerken in een query voor de unlink ofzo?

thnx
Als jij een nieuw bestand upload, zul je de bestandsnaam in je database op moeten slaan samen met de verkregen random naam. Op die manier kun jij later op basis van een bestandsnaam altijd de bijbehorende random naam terugvinden.

SQL Beginnershandleiding

Lees ook deze handleiding eens. Daar wordt de basis van het werken met een SQL database uitgelegd. Daarmee moet je vast wel een eind verder komen.
die random naam wordt ook opgeslagen bij het invoeren. Staan netjes in de database vermeld onder de value "name".
Dus de random naam is gewoon bekend.


Of maak ik nou een denkfout, er betsaat natuurlijk nooit een zelfde bestand (is tenslotte random).. ik wil eigenlijk gewoon de huidige verwijderen.. (indien nieuwe geplaatst uiteraard).
De huidge zie ik trouwens ook als ik bijv:

<?php echo '<img class=scale src="../newsimage/' . $row['name'] . '" />' ; ?>
uitvoer..
Als je de huidige afbeelding wilt verwijderen is het toch een kwestie van de random name ophalen uit de database en deze waarde in unlink() gebruiken?
ja zo simpel is het misschien wel ja... (argh)..
Dan is dat file exist ook overbodig eigenlijk lijkt me

Zou ik dan die unlink beter NA de move kunnen doen wellicht?
Die file_exists() lijkt me niet overbodig, want een unlink() op een bestand dat niet bestaat zal zeker een foutmelding opleveren.

Verder zou ik inderdaad het oude bestand ook pas verwijderen zodra het nieuwe succesvol geupload is. Zorg wel dat je eerst de oude bestandsnaam uit de database selecteert voordat je het betreffende record update.
Die file_exists() lijkt me niet overbodig, want een unlink() op een bestand dat niet bestaat zal zeker een foutmelding opleveren.


dat bestand bestaat bestaat toch niet, omdat het random is?

Reageren