Delete, delete niet met functie-aanroep
Ik wilde een eigen filemanager maken, waarin ik de uitzonderingen die niet gewist mogen worden, niet laat zien. Op het moment dat je op de 'Delete-button' van een file klikt, wil ik een alertbox met weet u het zeker laten tonen. Zo ja, dan wissen, zo nee, dan niet. Het werkt bij mij niet goed. Ik krijg een keurige lijst met bestandsnamen en een knop om te wissen. Als ik daarop klik, gebeurt er wat... maar niet wat ik wil. Zal wel een domme fout zijn.
Kan iemand eens meekijken? Ik wil in de gebruiker de keuze geven om kleine zaken in een bepaalde directory te laten wissen. Kortom, wie helt mij op weg?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<!doctype html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>Overzicht van bestanden"</title>
<meta name="language" content="en" />
<meta name="description" content="" />
<meta name="keywords" content="" />
<script>
function deleteItem($filename) {
var resp = confirm("Weet u zeker dat u dit bestand wilt verwijderen???");
if (resp == true) {
<?php
unlink($filename);
echo 'Bestand is gewist!';
?>
}
else {
<?php
echo 'Bestand '.$filename.' niet is gewist!';
?>
}
return;
}
</script>
</head>
<?php
$imagesdir= getcwd();
$war=false;
$myDirectory = opendir($imagesdir);
while($entryName = readdir($myDirectory)) {
$dirArray[] = $entryName;
}
closedir($myDirectory);
$indexCount = count($dirArray);
$treffer=1;
echo '<p align="center">Overzicht van de bestanden.</p>';
echo '<table width="60%" border="0" align="center"><tr>';
$uitzonderingslijst='de lijst met uitzonderingen, bijvoorbeeld: "index.php Admin.php Achtergrond.html .htaccess" , kortom alle bestanden die je niet wilt laten zien en die dus ook niet gewijzigd kunnen worden.';
// starten met inlezen
for ($index=0; $index < $indexCount; $index++) {
// de fileextensie kun je lezen door: $extensie = substr($dirArray[$index], -3);
// check of gevonden bestand staat in de lijst uitzonderingen
$pos = strpos($uitzonderingslijst, $dirArray[$index]);
// als het gevonden bestand niet in de lijst staat, dan
if ($pos==false) {
// bestandsnaam met directory samenstellen
$welkbestand=$imagesdir.'/'.$dirArray[$index];
// laat treffer, resultaat zien, en verhoog treffer
echo '<tr><td width="20%">'.$treffer++.'</td><td>';
echo '</td>';
echo '<td>';
// toon bestandsnaam met treffernummer vooraan, kolom 2 button met bestandsnaam en delete
echo '<a href="" onclick="javascript:deleteItem('.$welkbestand.')"><button>Delete : '.$dirArray[$index] .'</button><br>';
echo '</td></tr>';
}
}
echo '</table>';
?>
<script>
</body>
</html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>Overzicht van bestanden"</title>
<meta name="language" content="en" />
<meta name="description" content="" />
<meta name="keywords" content="" />
<script>
function deleteItem($filename) {
var resp = confirm("Weet u zeker dat u dit bestand wilt verwijderen???");
if (resp == true) {
<?php
unlink($filename);
echo 'Bestand is gewist!';
?>
}
else {
<?php
echo 'Bestand '.$filename.' niet is gewist!';
?>
}
return;
}
</script>
</head>
<?php
$imagesdir= getcwd();
$war=false;
$myDirectory = opendir($imagesdir);
while($entryName = readdir($myDirectory)) {
$dirArray[] = $entryName;
}
closedir($myDirectory);
$indexCount = count($dirArray);
$treffer=1;
echo '<p align="center">Overzicht van de bestanden.</p>';
echo '<table width="60%" border="0" align="center"><tr>';
$uitzonderingslijst='de lijst met uitzonderingen, bijvoorbeeld: "index.php Admin.php Achtergrond.html .htaccess" , kortom alle bestanden die je niet wilt laten zien en die dus ook niet gewijzigd kunnen worden.';
// starten met inlezen
for ($index=0; $index < $indexCount; $index++) {
// de fileextensie kun je lezen door: $extensie = substr($dirArray[$index], -3);
// check of gevonden bestand staat in de lijst uitzonderingen
$pos = strpos($uitzonderingslijst, $dirArray[$index]);
// als het gevonden bestand niet in de lijst staat, dan
if ($pos==false) {
// bestandsnaam met directory samenstellen
$welkbestand=$imagesdir.'/'.$dirArray[$index];
// laat treffer, resultaat zien, en verhoog treffer
echo '<tr><td width="20%">'.$treffer++.'</td><td>';
echo '</td>';
echo '<td>';
// toon bestandsnaam met treffernummer vooraan, kolom 2 button met bestandsnaam en delete
echo '<a href="" onclick="javascript:deleteItem('.$welkbestand.')"><button>Delete : '.$dirArray[$index] .'</button><br>';
echo '</td></tr>';
}
}
echo '</table>';
?>
<script>
</body>
</html>
Dus je kan beter de verwijder-actie in PHP in een apart bestand zetten en die met window.location dan aanroepen. Of nog chiquer... een asynchrone AJAX-request.
Gewijzigd op 09/10/2017 18:42:16 door - Ariën -
- Ariën - op 09/10/2017 18:39:25:
Je PHP-code wordt direct uitgevoerd, al voordat je JavaScript wordt geladen. Verder zijn JavaScript en PHP twee verschillende programmeertalen die je niet kan mixxen op deze manier.
Dus je kan beter de verwijder-actie in PHP in een apart bestand zetten en die met window.location dan aanroepen. Of nog chiquer... een asynchrone AJAX-request.
Dus je kan beter de verwijder-actie in PHP in een apart bestand zetten en die met window.location dan aanroepen. Of nog chiquer... een asynchrone AJAX-request.
Toevoeging op 09/10/2017 18:55:36:
Jan te Pas op 09/10/2017 18:54:28:
Dank Ariën,
Hier moet ik dan even doorheen. Dank voor de richting van het zoeken. Ik dacht slim te zijn, niet dus.
Toevoeging op 09/10/2017 19:11:09:
Ik heb nu eea draaiend. En wel door een extern php-script op te roepen die de file wist. Voor de goede orde wil ik de code die ik nu heb even delen.
- Ariën - op 09/10/2017 18:39:25:
Je PHP-code wordt direct uitgevoerd, al voordat je JavaScript wordt geladen. Verder zijn JavaScript en PHP twee verschillende programmeertalen die je niet kan mixxen op deze manier.
Dus je kan beter de verwijder-actie in PHP in een apart bestand zetten en die met window.location dan aanroepen. Of nog chiquer... een asynchrone AJAX-request.
Dus je kan beter de verwijder-actie in PHP in een apart bestand zetten en die met window.location dan aanroepen. Of nog chiquer... een asynchrone AJAX-request.
Dank Ariën,
Hier moet ik dan even doorheen. Dank voor de richting van het zoeken. Ik dacht slim te zijn, niet dus.
Toevoeging op 09/10/2017 19:11:09:
Ik heb nu eea draaiend. En wel door een extern php-script op te roepen die de file wist. Voor de goede orde wil ik de code die ik nu heb even delen.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<!doctype html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>Overzicht van bestanden"</title>
<meta name="language" content="en" />
<meta name="description" content="" />
<meta name="keywords" content="" />
<style>
.button:hover {
background-color: red;
color: white;
}
</style>
</head>
<?php
$imagesdir= getcwd();
$war=false;
$myDirectory = opendir($imagesdir);
while($entryName = readdir($myDirectory)) {
$dirArray[] = $entryName;
}
closedir($myDirectory);
$indexCount = count($dirArray);
$treffer=1;
echo '<p align="center">Overzicht van de bestanden.</p>';
echo '<table width="60%" border="0" align="center"><tr>';
$uitzonderingslijst='de lijst met uitzonderingen, bijvoorbeeld: "index.php Admin.php Achtergrond.html .htaccess" , kortom alle bestanden die je niet wilt laten zien en die dus ook niet gewijzigd kunnen worden.';
// starten met inlezen
for ($index=0; $index < $indexCount; $index++) {
// wat is de extensie van de file
$extensie = substr($dirArray[$index], -3);
// check of gevonden bestand staat in de lijst uitzonderingen
$pos = strpos($uitzonderingslijst, $dirArray[$index]);
// als het gevonden bestand niet in de lijst staat, dan
if ($pos==false) {
// bestandsnaam met directory samenstellen
$welkbestand=$imagesdir.'/'.$dirArray[$index];
// laat treffer, resultaat zien, en verhoog treffer
echo '<tr><td width="20%">'.$treffer++.'</td><td>';
echo '</td>';
echo '<td>';
// toon bestandsnaam met treffernummer vooraan, kolom 2 button met bestandsnaam en delete
echo "<a href=\"deletefile.php?id='.$welkbestand.'\" onclick=\"return confirm('Weet u het zeker?');\"><button>Delete : $dirArray[$index]</button></a>";
echo '</td></tr>';
}
}
echo '</table>';
?>
<script>
</body>
</html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>Overzicht van bestanden"</title>
<meta name="language" content="en" />
<meta name="description" content="" />
<meta name="keywords" content="" />
<style>
.button:hover {
background-color: red;
color: white;
}
</style>
</head>
<?php
$imagesdir= getcwd();
$war=false;
$myDirectory = opendir($imagesdir);
while($entryName = readdir($myDirectory)) {
$dirArray[] = $entryName;
}
closedir($myDirectory);
$indexCount = count($dirArray);
$treffer=1;
echo '<p align="center">Overzicht van de bestanden.</p>';
echo '<table width="60%" border="0" align="center"><tr>';
$uitzonderingslijst='de lijst met uitzonderingen, bijvoorbeeld: "index.php Admin.php Achtergrond.html .htaccess" , kortom alle bestanden die je niet wilt laten zien en die dus ook niet gewijzigd kunnen worden.';
// starten met inlezen
for ($index=0; $index < $indexCount; $index++) {
// wat is de extensie van de file
$extensie = substr($dirArray[$index], -3);
// check of gevonden bestand staat in de lijst uitzonderingen
$pos = strpos($uitzonderingslijst, $dirArray[$index]);
// als het gevonden bestand niet in de lijst staat, dan
if ($pos==false) {
// bestandsnaam met directory samenstellen
$welkbestand=$imagesdir.'/'.$dirArray[$index];
// laat treffer, resultaat zien, en verhoog treffer
echo '<tr><td width="20%">'.$treffer++.'</td><td>';
echo '</td>';
echo '<td>';
// toon bestandsnaam met treffernummer vooraan, kolom 2 button met bestandsnaam en delete
echo "<a href=\"deletefile.php?id='.$welkbestand.'\" onclick=\"return confirm('Weet u het zeker?');\"><button>Delete : $dirArray[$index]</button></a>";
echo '</td></tr>';
}
}
echo '</table>';
?>
<script>
</body>
</html>
Gewijzigd op 09/10/2017 19:14:48 door Jan te Pas
Daarnaast, sommige (de meeste?) filesystemen cachen directorystructuren dus alvorens een directory uit te lezen zou je deze cache moeten resetten met clearstatcache().
En wat @Ariën zegt: je zou deze verwijder-actie in een aparte actie/bestand moeten opnemen. Ook kun je geen server- en clientside talen zomaar combineren. En tot slot zou ik deze acties afschermen met privileges/rechten, je wilt niet dat een willekeurig persoon een bestand of directory kan verwijderen op deze manier.
NB voor bestandsbeheer bestaat FTP, dus het valt ook te bezien of je je filesysteem op deze manier wilt beheren.
Thomas van den Heuvel op 09/10/2017 23:59:17:
Niet alle extensies zijn 3 letters :/.
Daarnaast, sommige (de meeste?) filesystemen cachen directorystructuren dus alvorens een directory uit te lezen zou je deze cache moeten resetten met clearstatcache().
En wat @Ariën zegt: je zou deze verwijder-actie in een aparte actie/bestand moeten opnemen. Ook kun je geen server- en clientside talen zomaar combineren. En tot slot zou ik deze acties afschermen met privileges/rechten, je wilt niet dat een willekeurig persoon een bestand of directory kan verwijderen op deze manier.
NB voor bestandsbeheer bestaat FTP, dus het valt ook te bezien of je je filesysteem op deze manier wilt beheren.
Daarnaast, sommige (de meeste?) filesystemen cachen directorystructuren dus alvorens een directory uit te lezen zou je deze cache moeten resetten met clearstatcache().
En wat @Ariën zegt: je zou deze verwijder-actie in een aparte actie/bestand moeten opnemen. Ook kun je geen server- en clientside talen zomaar combineren. En tot slot zou ik deze acties afschermen met privileges/rechten, je wilt niet dat een willekeurig persoon een bestand of directory kan verwijderen op deze manier.
NB voor bestandsbeheer bestaat FTP, dus het valt ook te bezien of je je filesysteem op deze manier wilt beheren.
Dank voor de toelichting. Zinvol. Ik wil de gebruiker slechts weinig rechten geven. Dit deel staat achter een password. De delete wordt nog voorzien van een hidden field. Zodat er niet gerommeld kan worden. Ik duik ook in jouw voorstellen om te integreren, aan te passen.
Ook met hidden fields kan gerommeld worden.
Allen dank. Het is mij al wel opgevallen dat php ook soms vreemde ‘hicks’ heeft waar je workarounds om moet maken. Ik pas eea nog aan. Ik blij problemen met de ‘header’ houden. Dan post ik hier de code. Dank allen. En ik neem de suggesties graag op.
Quote:
Warning: Cannot modify header information - headers already sent by (output started at /een/script.php:12) in /een/script.php on line 123
Die :12 staat voor lijn 12 in /een/script.php.
Dus daar staat de output.
Simpel te debuggen dus!
Gewijzigd op 11/10/2017 21:49:50 door - Ariën -
https://depruus.000webhostapp.com/EditDir.php
Daar kun je oa deleten. De inlog is niet actief. De gebruiker kan alleen de bestanden zien die ik vrij zet in EdirDir.php. Bij de rest kan hij niet bijkomen. Dank!
Hi Ariën, dank, ik ben ermee aan het stoeien geweest en heb een andere route gekozen omdat ik vaak een leeg scherm kreeg zonder een melding. Dus een workaround gemaakt. Eea staat nu in test. Daar kun je oa deleten. De inlog is niet actief. De gebruiker kan alleen de bestanden zien die ik vrij zet in EdirDir.php. Bij de rest kan hij niet bijkomen. Dank!