Voor een script wil ik de gebruiker in staat stellen om files te uploaden naar een server.
Een basis scriptje dus...
Maar nu komt de moeilijkheid:
De gebruiker moet in staat zijn om meerdere files naar de server te uploaden. En dit hoeft niet in één keer opgegeven worden.
Ik heb dus een form met hierin een veld waarin het te uploaden bestand geselecteerd kan worden. Na het verzenden van dit bestand komt hetzelfde form weer terug om de gebruiker het volgende bestand te laten uploaden.
Het probleem is echter dat ik de files pas echt op de server wil zetten als de gebruiker klaar is en op de definitieve "Bevestigen" knop heeft geklikt.
Mijn inziens zijn er een paar mogelijkheden om dit te bereiken. Ik kan de files tijdelijk in een temp-map op de server zetten en deze verplaatsen naar de definitieve map. Maar als de gebruiker de site verlaat zonder te bevestigen hou ik die files op de server en zou ik scriptjes moeten gaan draaien om die map op de server zo nu en dan op te schonen. Om problemen te voorkomen doe ik dat liever niet.
Daarom dacht ik slim te zijn. Bij het uploaden van de files plaats ik de files nog nergens. Ik onthoud de $_FILES[file][tmp_name] en $_FILES[file][name] in de sessie en pas na het bevestigen haal ik de bestanden op. Dit werkt echter niet. De variabelen staan wel in de sessie, maar volgens mij bestaan de bestanden niet meer.
Heeft iemand een slimme suggestie om eea wel aan de praat te krijgen?
(Hier wat code om een indruk te krijgen, er is hier nog niets gedaan aan afvangen van fouten etc.)
Een basis scriptje dus...
Maar nu komt de moeilijkheid:
De gebruiker moet in staat zijn om meerdere files naar de server te uploaden. En dit hoeft niet in één keer opgegeven worden.
Ik heb dus een form met hierin een veld waarin het te uploaden bestand geselecteerd kan worden. Na het verzenden van dit bestand komt hetzelfde form weer terug om de gebruiker het volgende bestand te laten uploaden.
Het probleem is echter dat ik de files pas echt op de server wil zetten als de gebruiker klaar is en op de definitieve "Bevestigen" knop heeft geklikt.
Mijn inziens zijn er een paar mogelijkheden om dit te bereiken. Ik kan de files tijdelijk in een temp-map op de server zetten en deze verplaatsen naar de definitieve map. Maar als de gebruiker de site verlaat zonder te bevestigen hou ik die files op de server en zou ik scriptjes moeten gaan draaien om die map op de server zo nu en dan op te schonen. Om problemen te voorkomen doe ik dat liever niet.
Daarom dacht ik slim te zijn. Bij het uploaden van de files plaats ik de files nog nergens. Ik onthoud de $_FILES[file][tmp_name] en $_FILES[file][name] in de sessie en pas na het bevestigen haal ik de bestanden op. Dit werkt echter niet. De variabelen staan wel in de sessie, maar volgens mij bestaan de bestanden niet meer.
Heeft iemand een slimme suggestie om eea wel aan de praat te krijgen?
(Hier wat code om een indruk te krijgen, er is hier nog niets gedaan aan afvangen van fouten etc.)
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
| <?php session_start(); $task = $_REQUEST['task']; switch($task) { case 'store': // Gebruiker is klaar met uploaden, // nu dus alle files definitef wegschrijven $target_path = "uploads/"; for ($i=0; $i<sizeof($_SESSION['list']); $i++) { $target_path = $target_path . basename($_SESSION['list'][$i]['name']); if(move_uploaded_file($_SESSION['list'][$i]['tmp_name'], $target_path)) { echo "The file " . basename($_SESSION['list'][$i]['name']) . " has been uploaded"; } else { // alle variabelen blijken te bestaan echo "Error uploading the file " . basename($_SESSION['list'][$i]['name']) .", please try again!<br />"; echo "target:" . $target_path . " en tmpname " . $_SESSION['list'][$i]['tmp_name'] ."<br/>"; } } break; case 'addItem': // File toevoegen aan lijst met bestanden $data = array(); $data['tmp_name'] = $_FILES['upload']['tmp_name']; $data['name'] = $_FILES['upload']['name']; array_push($_SESSION['list'], $data); // Weergeven van lijst met bestanden, en tevens opnieuw het upload-form laten zien HTML_PhotoList::showList($_SESSION['list']); HTML_PhotoList::showUploadForm(); break; default: $list = array(); session_register('list'); // Weergeven van uploadform HTML_PhotoList::showUploadForm(); break; } ?> |