Delete, delete niet met functie-aanroep

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jan te Pas

Jan te Pas

09/10/2017 18:35:47
Quote Anchor link
Hallo,

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)
PHP script in nieuw venster Selecteer het PHP script
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
<!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>
 
PHP hulp

PHP hulp

30/11/2024 00:31:11
 
- Ariën  -
Beheerder

- Ariën -

09/10/2017 18:39:25
Quote Anchor link
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.
Gewijzigd op 09/10/2017 18:42:16 door - Ariën -
 
Jan te Pas

Jan te Pas

09/10/2017 18:54:28
Quote Anchor link
- 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.


Toevoeging op 09/10/2017 18:55:36:

Jan te Pas op 09/10/2017 18:54:28:
- 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.


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)
PHP script in nieuw venster Selecteer het PHP script
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
<!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>
Gewijzigd op 09/10/2017 19:14:48 door Jan te Pas
 
Thomas van den Heuvel

Thomas van den Heuvel

09/10/2017 23:59:17
Quote Anchor link
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.
 
Jan te Pas

Jan te Pas

10/10/2017 07:55:34
Quote Anchor link
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.


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.
 
- Ariën  -
Beheerder

- Ariën -

11/10/2017 17:58:24
Quote Anchor link
Ook met hidden fields kan gerommeld worden.
 
Adoptive Solution

Adoptive Solution

11/10/2017 19:12:32
Quote Anchor link
De extensie in regel 34 kan je vinden met PHP pathinfo() :

http://php.net/manual/en/function.pathinfo.php
 
Jan te Pas

Jan te Pas

11/10/2017 21:41:03
Quote Anchor link
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.
 
- Ariën  -
Beheerder

- Ariën -

11/10/2017 21:49:24
Quote Anchor link
Als je problemen met de header en output hebt, dan moet je dit soort melding zien:
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 -
 
Jan te Pas

Jan te Pas

12/10/2017 10:55:37
Quote Anchor link
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. 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!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.