De naam veranderen van een bestand zodra deze is geupload.
* Het registreert de naam die je invult, maar doet verder hier niets mee
* Het registreert de klas die je selecteert uit een drop down menutje, maar doet hier verder niets mee
* Je kan een bestand vanaf de pc aanklikken, die wordt geupload als je op "inleveren" klikt.
Wat ik nu dus zou willen, maar (nog) niet snap, is hoe ik een bestand kan uploaden naar de map die wordt geselecteerd uit het dropdown menutje, en als prefix de naam die ingevuld staat.
Bijvoorbeeld: Klaas uit H5B levert het bestand "Presentatie.docx" in.
Hoe zorg ik (of beter gezegd, het script) er voor dat het bestand "Klaas - Presentatie.docx" in de map H5B terecht komt?
Hier een aantal stukken code die ik gebruik.
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
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
protected function checkName($file)
{
$this->newName = null;
$nospaces = str_replace(' ', '_', $file['name']);
if ($nospaces != $file['name']) {
$this->newName = $nospaces;
}
$nameparts = pathinfo($nospaces);
$extension = isset($nameparts['extension']) ? $nameparts['extension'] : '';
if (!$this->typeCheckingOn && !empty($this->suffix)) {
if (in_array($extension, $this->notTrusted) || empty($extension)) {
$this->newName = $nospaces . $this->suffix;
}
}
if ($this->renameDuplicates) {
$name = isset($this->newName) ? $this->newName : $file['name'];
$existing = scandir($this->destination);
if (in_array($name, $existing)) {
$i = 1;
do {
$this->newName = $nameparts['filename'] . '_' . $i++;
if (!empty($extension)) {
$this->newName .= ".$extension";
}
if (in_array($extension, $this->notTrusted)) {
$this->newName .= $this->suffix;
}
} while (in_array($this->newName, $existing));
}
}
}
protected function moveFile($file)
{
$filename = isset($this->newName) ? $this->newName : $file['name'];
$success = move_uploaded_file($file['tmp_name'], $this->destination . $filename);
if ($success) {
$result = $file['name'] . ' was succesvol geupload';
if (!is_null($this->newName)) {
$result .= ', en is hernoemd naar ' . $this->newName;
}
$result .= '.';
$this->messages[] = $result;
} else {
$this->messages[] = 'Kon het volgende bestand niet uploden: ' . $file['name'];
}
}
{
$this->newName = null;
$nospaces = str_replace(' ', '_', $file['name']);
if ($nospaces != $file['name']) {
$this->newName = $nospaces;
}
$nameparts = pathinfo($nospaces);
$extension = isset($nameparts['extension']) ? $nameparts['extension'] : '';
if (!$this->typeCheckingOn && !empty($this->suffix)) {
if (in_array($extension, $this->notTrusted) || empty($extension)) {
$this->newName = $nospaces . $this->suffix;
}
}
if ($this->renameDuplicates) {
$name = isset($this->newName) ? $this->newName : $file['name'];
$existing = scandir($this->destination);
if (in_array($name, $existing)) {
$i = 1;
do {
$this->newName = $nameparts['filename'] . '_' . $i++;
if (!empty($extension)) {
$this->newName .= ".$extension";
}
if (in_array($extension, $this->notTrusted)) {
$this->newName .= $this->suffix;
}
} while (in_array($this->newName, $existing));
}
}
}
protected function moveFile($file)
{
$filename = isset($this->newName) ? $this->newName : $file['name'];
$success = move_uploaded_file($file['tmp_name'], $this->destination . $filename);
if ($success) {
$result = $file['name'] . ' was succesvol geupload';
if (!is_null($this->newName)) {
$result .= ', en is hernoemd naar ' . $this->newName;
}
$result .= '.';
$this->messages[] = $result;
} else {
$this->messages[] = 'Kon het volgende bestand niet uploden: ' . $file['name'];
}
}
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
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
<h1>Bestanden uploaden</h1>
<?php if ($result || $error) {
?>
<ul class="result">
<?php
if ($error) {
echo "<li>{$error['message']}</li>";
}
if ($result) {
foreach ($result as $message) {
echo "<li>$message</li>";
}
}
?>
</ul>
<?php } ?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
<p>
<label for="username">Naam:</label>
<input type="text" name="name" id="" />
<br />
<label for="class">Klas:</label>
<select name="class">
<option value="h4a">h4a</option>
<option value="h4b">h4b</option>
<option value="h4c">h4c</option>
<option value="h5a">h5a</option>
<option value="h5b">h5b</option>
<option value="h5c">h5c</option>
</select>
<br />
<input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $max; ?>">
<label for="filename">Selecteer bestand:</label>
<input type="file" name="filename[]" id="filename" multiple
data-maxfiles="<?php echo $_SESSION['maxfiles']; ?>"
data-postmax="<?php echo $_SESSION['postmax']; ?>"
data-displaymax="<?php echo $_SESSION['displaymax']; ?>">
</p>
<ul>
<li>
Er kunnen <?php echo $_SESSION['maxfiles']; ?> bestanden tegelijkertijd worden geupload.
</li>
<li>
Elk bestand mag niet groter zijn dan <?php echo UploadFile::convertFromBytes($max); ?>.
</li>
<li>
Samen mag het niet meer dan <?php echo $_SESSION['displaymax']; ?> zijn.
</li>
</ul>
<p>
<input type="submit" name="upload" value="Inleveren">
</p>
</form>
<?php if ($result || $error) {
?>
<ul class="result">
<?php
if ($error) {
echo "<li>{$error['message']}</li>";
}
if ($result) {
foreach ($result as $message) {
echo "<li>$message</li>";
}
}
?>
</ul>
<?php } ?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
<p>
<label for="username">Naam:</label>
<input type="text" name="name" id="" />
<br />
<label for="class">Klas:</label>
<select name="class">
<option value="h4a">h4a</option>
<option value="h4b">h4b</option>
<option value="h4c">h4c</option>
<option value="h5a">h5a</option>
<option value="h5b">h5b</option>
<option value="h5c">h5c</option>
</select>
<br />
<input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $max; ?>">
<label for="filename">Selecteer bestand:</label>
<input type="file" name="filename[]" id="filename" multiple
data-maxfiles="<?php echo $_SESSION['maxfiles']; ?>"
data-postmax="<?php echo $_SESSION['postmax']; ?>"
data-displaymax="<?php echo $_SESSION['displaymax']; ?>">
</p>
<ul>
<li>
Er kunnen <?php echo $_SESSION['maxfiles']; ?> bestanden tegelijkertijd worden geupload.
</li>
<li>
Elk bestand mag niet groter zijn dan <?php echo UploadFile::convertFromBytes($max); ?>.
</li>
<li>
Samen mag het niet meer dan <?php echo $_SESSION['displaymax']; ?> zijn.
</li>
</ul>
<p>
<input type="submit" name="upload" value="Inleveren">
</p>
</form>
Ik kan de (complete) broncode wel in een PM zetten, maar zet deze liever niet helemaal openbaar.
Ik hoop dat iemand mij kan helpen!
PS:
For testing purposes: www.hofstadict.nl/inleveren2/form.php
Code (php)
1
2
3
2
3
<?php // kleurtjes
$success = move_uploaded_file($file['tmp_name'], $this->destination ."/".$klas."/".$naam." - ".$filename);
?>
$success = move_uploaded_file($file['tmp_name'], $this->destination ."/".$klas."/".$naam." - ".$filename);
?>
Wel even de variabelen de juiste waarde geven.
Gewijzigd op 18/03/2014 00:29:25 door - Ariën -
En verder werk ik niet via PM, het kan ook prima via dit topic zodat ook anderen mee kunnen helpen. Daar is het forum eigenlijk ook voor bedoeld.
Gewijzigd op 18/03/2014 00:47:50 door - Ariën -
<input type="text" name="name" id="" />
dit geeft mij de indruk dat jij het veld hier van username omgedoopt hebt in name?
Ik heb het eventjes in een pastebin gezet ivm overzichtelijkheid (? xD)
http://pastebin.com/WVp372Sz < uploadfile.php
http://pastebin.com/ECrLn5YT < form.php
$username komt uit r54 van form.php, had het ook al met "$name" geprobeerd maar dat werkte evenmin.
Enig idee hoe het dan wel in elkaar zit?
Toevoeging op 18/03/2014 00:58:01:
Oh, en de bestanden staat nog steeds in de /uploaded/ map, ipv de (bijvoorbeeld) /h5b/ map
Toevoeging op 18/03/2014 09:38:12:
Het is me gelukt!
Code (php)
1
$success = move_uploaded_file($file['tmp_name'], $this->destination ."/".$_POST['class']."/".$_POST['name']." - ".$filename);
Moest een post gebruiken, want de class en name kwamen uit een ander bestand... Nu op zoek naar een methode die automatisch de map aanmaakt van de klas/opdracht die de leerling selecteert!
Bedankt voor de hulp in ieder geval guys :)