Ik ben bezig om een applicatie te ontwikkelen waarmee ik meerdere bestanden tegelijk kan uploaden. Voordat een bestand geüpload wordt, moet er eerst een check gedaan worden om te kijken of het bestand als bestaat. Zo ja, dan moet er de vraag gesteld worden of het bestaande bestand mag worden overschreven.
Ik maak gebruik van jQuery (1.7.1) en de jQuery Form Plugin voor het verzenden van de bestanden.
Controle en verwerking gebeurt in PHP.
Ik heb het volgende in HTML
Het volgende in JS
En in PHP
Maar nu zit ik met het probleem dat alle geselecteerde bestanden in PHP verwerkt worden. Stel dat bij een bestaand bestand ik de melding krijg of ik deze wil overschrijven en ik druk op Nee, dan worden alsnog alle bestanden verwerkt in PHP die in uploads[] aanwezig zijn.
Hoe krijg ik het voor elkaar dat alleen bestanden geüpload worden die nog niet bestaan of die overschreven mogen worden?
Mij lijkt het beste om de for loop in PHP weer weg te halen en in JS aan te geven welke bestanden verwerkt mogen worden. Hoe krijg ik dit voor elkaar? Of zijn er andere betere oplossingen? Graag hulp
. Bedankt!
Ik maak gebruik van jQuery (1.7.1) en de jQuery Form Plugin voor het verzenden van de bestanden.
Controle en verwerking gebeurt in PHP.
Ik heb het volgende in HTML
HTML:
1
2
3
4
5
| <form id="uploadForm" method="post" action="upload.php" enctype="multipart/form-data"> <input id="uploads" name='uploads[]' type="file" multiple> <input id="submit" type="submit" value="Send"> </form> <div id="uploadOutput"/></div> |
Het volgende in JS
JavaScript:
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
| $(document).ready(function(){ $('#submit').click(function(){ // Loader weergeven $('#uploadOutput').html('<img src="images/loading.gif" width="16" height="16" alt="Bezig met laden" class="loading" />'); // Loop door alle upload files. var uploads = document.getElementById('uploads'); for (var i=0; i < uploads.files.length; i++) { var filename = uploads.files[i].name; // Check of bestand al bestaat. $('#uploadForm').ajaxSubmit({ url: 'upload.php?action=check', success: function(data) { if (data == 1) { var overwrite = confirm('Let op: ' + filename + ' bestaat al.\nWilt u het bestaande bestand vervangen?'); if (!overwrite) { $('#uploadOutput').html(''); return false; } else { // Verwerk upload. $('#uploadForm').ajaxSubmit({ target: '#uploadOutput' }); } } else { // Bestand bestaat nog niet. Verwerk upload. $('#uploadForm').ajaxSubmit({ target: '#uploadOutput' }); } } }); } // Voorkom standaard page submit. return false; }); }); |
En in PHP
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
| if (!empty($_FILES)) { //echo "<pre>",print_r($uploads),"</pre>"; //echo "<pre>",print_r($_FILES),"</pre>"; // Number of uploaded files $num_files = count($_FILES['uploads']['tmp_name']); for($i=0; $i < $num_files; $i++) { $tempFile = $_FILES['uploads']['tmp_name'][$i]; $targetPath = str_replace('//','/',$_SERVER['DOCUMENT_ROOT'].'/upload2/upload/'); $targetFile = $targetPath.$_FILES['uploads']['name'][$i]; // Validate the file type $fileTypes = array('pdf','doc','docx','txt'); // File extensions $fileParts = pathinfo($_FILES['uploads']['name'][$i]); //echo "<pre>",print_r($fileParts),"</pre>"; // Check of bestand al bestaat. if ($_GET['action'] == "check") { if (file_exists($targetFile)) { echo 1; } else { echo 0; } } else { if (in_array(strtolower($fileParts['extension']),$fileTypes)) { if (move_uploaded_file($tempFile,$targetFile)) { echo "Bestand <strong>\"".$fileParts['basename']."\"</strong> is met <strong>succes</strong> toegevoegd.<br />"; } } else { die('<br>Invalid file type (extension)'); } } } } |
Maar nu zit ik met het probleem dat alle geselecteerde bestanden in PHP verwerkt worden. Stel dat bij een bestaand bestand ik de melding krijg of ik deze wil overschrijven en ik druk op Nee, dan worden alsnog alle bestanden verwerkt in PHP die in uploads[] aanwezig zijn.
Hoe krijg ik het voor elkaar dat alleen bestanden geüpload worden die nog niet bestaan of die overschreven mogen worden?
Mij lijkt het beste om de for loop in PHP weer weg te halen en in JS aan te geven welke bestanden verwerkt mogen worden. Hoe krijg ik dit voor elkaar? Of zijn er andere betere oplossingen? Graag hulp