Beste mensen,

ik probeer een foto uit een map te verwijderen en daarna gelijk de record uit de database te halen.
dit lukt prima wanneer in de fotonaam het id nummer verwerkt is, want het id nummer staat in de adresbalk en die kan ik dan ophalen, maar wanneer ik de fotonaam eerst uit de database moet halen werkt het niet. in het stukje script wat ik meestuur heb ik eers een stukje staan waarbij met echo de naam geprint wordt op het scherm, en dat werkt. Toch lukt het niet om de foto ook te "unlinken" een idee wat ik fout doe? Ik ben nog niet echt een ingewijde in php dus graag niet te ingewikkelde antwoorden ;) het liefst een voorbeeld dmv een aanpassing in het script. Thanks!!!
<?php
	if (isset($_GET['id'])){
		$id = (int) $_GET['id'];
	}
	else{
		// redirect.
		// geen id meegegeven, terugsturen naar de admin-pagina
		header("location: index.html");
	}
$query = "SELECT * FROM portfolio_photos WHERE id='$id'";
	$result = safe_query($db, $query);


	// te verwijderen record op het scherm zetten
	while($record = mysqli_fetch_array($result)) {
	
	
	$pubname = "uploads/" . $record['photo_filename'];
	
	echo "../$pubname\"<br />";}

// Als de pagina zichzelf heeft aangeroepen (=de administrator heeft 
// het verwijderen bevestigd), is de flag 'bevestiging' gezet.
// In dat geval kan de DELETE-query worden uitgevoerd.
if (isset($_POST['bevestiging'])){

	// $id casten naar (int) om SQL-injection te voorkomen
	$photo_filename = (int) $_POST['photo_filename'];
	$id = (int) $_POST['id'];
	unlink("../uploads/" . $photo_filename);
	$query = "DELETE FROM portfolio_photos WHERE id='" . $_POST['id'] . "'";
	$result = safe_query($db, $query);
	if ($result){
	
	
		header("Location: reisdeleted.html");
		exit;
	}
}?> 
Dit is overigens het stukje wat ik er niet boven heb staan, maar daar staat geen session_start(); in. is dat misschien wat ik dan ook mis? is dat dan niet nodig als je voor de filename bij unlink de ID ophaalt uit de urlbalk? want in de versie waarbij het id verwerkt was in de filename werkte het wel. Alleen niet zodra ik de bestandsnaam uit een record moet ophalen.

Ik kan vanavond pas weer verder testen, zit even in de pauze van mijn werk. Ik ben niet zo thuis in php dus session_start(); zegt me niks. Moet ik dat gewoon bovenaan erin plaatsen?

Tnx!

Roy.
oh het stukje vergeten wat erboven het eerdere script staat ;) waar moet dat session_start komen, en moet er wat tussen de haakjes?

 <?php 
include_once('../config.php');
include_once('functions5.php');
// database openen, standaard-beknopte foutcontrole
if (!$db = mysqli_connect($host, $gebruiker, $wachtwoord, $database)){
	echo '<h2>FOUT: Het openen van de database is mislukt.</h2>';
	echo 'De MySQL-foutmelding luidt: ' . mysqli_connect_error();
	exit;
}


dat (int) weglaten helpt niet in iedergeval
dat
 <?php session_start(); ?> 
is voor zover ik nu van andere sites begrijp met name voor wanneer er op de pagina ingelogged moet worden of niet? dat hoeft op deze pagina nog niet want ik heb via de provider de map beveiligd waar de pagina instaat waardoor het niet door het script geregeld hoeft te worden.

Of is dat, los van mijn unlink probleem niet echt aan te raden uit veiligheids overwegingen?
Dank dank dank, de pagina werkt nu. Hoewel ik druk bezig ben geweest met jullie antwoorden, kwam iemand anders in eens met de oplossing. De fout bleek hem in het stukje van de form te zitten. Er werd namelijk wel wat ge-post maar niet ge-get de fotofilenaam. Ik heb het zo opgelost (met nog een hoop andere aanpassingen in het script die het netter maakten)

 <form action="<?php echo $_SERVER['PHP_SELF']?>" method="POST">
    <input type="hidden" name="bevestiging" value="1" />

	<input type="hidden" name="photo_filename" value="<?php
	
	$query = "SELECT * FROM portfolio_photos WHERE id='$id'";
	$result = safe_query($db, $query);
while ($row=mysqli_fetch_array($result)){ echo $row['photo_filename'];}?>" />



   
    <input type="hidden" name="id" value="<?php echo $id?>" />
    <input type="submit" value="Ja, verwijderen" />
    <input type="reset" value="Nee, terug" onClick="javascript:history.go(-1);"/>
</form>


Nogmaals hartelijk dan voor jullie hulp

Reageren