Hallo

Ik ben bezig met een job systeem
waarbij mensen de mogelijkheid hebben om een open sollicitatie in te verzenden
alle ingezonden sollicitaties komen in het database te staan.

Nu heb ik dat het bestandsnaam van de cv netjes word geupload onder een map die word aangemaakt met een unieke naam die ik mee geef naar het database

Ik wil nu dat ik in mijn overzicht op verwijderen kan drukken en de sollicitatiebrief word verwijderd met hun geuploade C.V.

Bij het laatste loop ik nu vast hoe haal ik bestandsnaam juist uit het database en verwijderd hij hem ook goed?

<?php
if($_GET["verwijderen"]) {
$delete_qry = "DELETE FROM sollicitatie WHERE id = '".$_GET["verwijderen"]."'";
$result = mysqli_query($mysqli, $delete_qry)
or die(mysqli_error($mysqli));
if($result==TRUE){
echo '<META HTTP-EQUIV="Refresh" CONTENT="0; URL=overzicht.php">';
}
}
?>

Bestandsnaam word weg geschreven als :
upload/a67d6b30d3ba18072ff0b57a7b88b5de0ee1b744/chronologisch-cvsjabloon.doc


Alvast bedankt!!
Met http://nl3.php.net/unlink kun je een file verwijderen. De manier om dit te doen is eerst de data van de solicitatie ophalen, vervolgens proberen je files te verwijderen en als dit gelukt is pas de delete in de database doen
Veiligheid ontbreekt compleet.
De kans dat alle sollicitaties worden verwijderd door sql-injection is groot.

Je zal voordat je in de database delete eerst de map/bestandsnaam moeten ophalen uit de database. Dan kun je het bestand verwijderen met unlink().
Ik hoop ook dat de sollicitaties buiten je web-root worden opgeslagen, en vooraf gecontroleerd worden qua toegang.
- SanThe - op 22/07/2014 15:13:02

Veiligheid ontbreekt compleet.
De kans dat alle sollicitaties worden verwijderd door sql-injection is groot.

Je zal voordat je in de database delete eerst de map/bestandsnaam moeten ophalen uit de database. Dan kun je het bestand verwijderen met unlink().


Overzicht is alleen voor ons als bedrijf, denk niet dat we SQL injection gaan toepassen binnen ons eigen systeem.

Je dient ingelogd te zijn voordat je iets kan uitvoeren.
Ook een typo kan ellende geven.
Gewoon even mysqli_real_escape_string() gebruiken en het probleem is opgelost.
Ik zat al te kijken bij unlink() alleen hij doet niet wat ik vraag overigens moet ik de bestandsnaam eerst explode en de map upload eruit zien te filteren die moet blijven bestaan en dan de map verwijderen waarin het bestand staat.

Dus moet ik eerst het juiste pad zien te selecteren,
zou iemand mij misschien klein voorbeeldje kunnen maken? ;)

Alvast bedankt!
:Edit zo even aangepast.. ;)

<?php

if($_GET["verwijderen"]) {
$check = $mysqli->real_escape_string($_GET["verwijderen"]);
$delete_qry = "DELETE FROM sollicitatie WHERE id = '".$check."'";
$result = mysqli_query($mysqli, $delete_qry)
or die(mysqli_error($mysqli));
if($result==TRUE){
echo '<META HTTP-EQUIV="Refresh" CONTENT="0; URL=overzicht.php">';
}
}
?>
<?php
$naam ='upload/a67d6b30d3ba18072ff0b57a7b88b5de0ee1b744/chronologisch-cvsjabloon.doc';
$array = explode('/', $naam);
// In $array[0] zit upload
// In $array[1] zit a67d6b30d3ba18072ff0b57a7b88b5de0ee1b744
// In $array[2] zit chronologisch-cvsjabloon.doc

// Eerst het bestand weggooien en dan de map
unlink($naam);
unlink($array[0]./.$array[1);
?>

[size=xsmall]Toevoeging op 22/07/2014 15:30:33:[/size]

Je gebruikt nu twee verschillende manieren van mysqli.
Denk niet dat dat goed gaat.
- SanThe - op 22/07/2014 15:28:49

<?php
$naam ='upload/a67d6b30d3ba18072ff0b57a7b88b5de0ee1b744/chronologisch-cvsjabloon.doc';
$array = explode('/', $naam);
// In $array[0] zit upload
// In $array[1] zit a67d6b30d3ba18072ff0b57a7b88b5de0ee1b744
// In $array[2] zit chronologisch-cvsjabloon.doc

// Eerst het bestand weggooien en dan de map
unlink($naam);
unlink($array[0]./.$array[1);
?>

[size=xsmall]Toevoeging op 22/07/2014 15:30:33:[/size]

Je gebruikt nu twee verschillende manieren van mysqli.
Denk niet dat dat goed gaat.


Geweldig bedankt !
hiermee kan ik verder ;)

[size=xsmall]Toevoeging op 22/07/2014 15:46:16:[/size]

- Aar - op 22/07/2014 15:19:05

Ik hoop ook dat de sollicitaties buiten je web-root worden opgeslagen, en vooraf gecontroleerd worden qua toegang.


Hoe bedoel je buiten de web-root?
ik controleer zeker vooraf of de gebruiker toegang krijgt of niet overigens zijn het natuurlijk aparte pagina's als dat is wat je bedoelde ;)

Hoor graag je van !
- SanThe - op 22/07/2014 15:51:19

En hoe kijk je of iemand toegang heeft als die dit in de browser intikt?

http://julliesitenaam/upload/a67d6b30d3ba18072ff0b57a7b88b5de0ee1b744/chronologisch-cvsjabloon.doc


Ik dacht aan een httacces bestand aan te maken en die op de map upload zetten
is dat een optie of weet je misschien een betere ?
ik heb nu

<?php
if($_GET["verwijderen"]) {
$query_id = "SELECT * FROM sollicitatie WHERE id=".$_GET["verwijderen"]."";
if ($result = $mysqli->query($query_id)) {
while ($obj = $result->fetch_object()) {

$naam =''.$obj->bestand.'';
$array = explode('/', $naam);
// In $array[0] zit upload
// In $array[1] zit a67d6b30d3ba18072ff0b57a7b88b5de0ee1b744
// In $array[2] zit chronologisch-cvsjabloon.doc

// Eerst het bestand weggooien en dan de map
unlink($naam);
unlink($array[0].'/'.$array[1]);

}
}
?>
Hij verwijderd nu de file alleen de map blijft staan.

Reageren