De naam veranderen van een bestand zodra deze is geupload.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Miladin Jeremic

Miladin Jeremic

18/03/2014 00:04:06
Quote Anchor link
Ik ben momenteel een website aan het maken als extra opdracht voor ICT, waar ik bestanden kan uploaden en op een geordende manier weer terug kan vinden. Het script dat ik nu heb kan het volgende:
* 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)
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
    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'];
        }
    }

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
    <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>


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
 
PHP hulp

PHP hulp

25/04/2024 10:47:29
 
- Ariën  -
Beheerder

- Ariën -

18/03/2014 00:25:24
Quote Anchor link
Op zoiets komt het dan uit.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php // kleurtjes
$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 -
 
Miladin Jeremic

Miladin Jeremic

18/03/2014 00:37:09
Quote Anchor link
Het enige wat er nu bijkomt is een foutmelding op de website zelf: Afbeelding
Zou je me een PM kunnen sturen?
 
- Ariën  -
Beheerder

- Ariën -

18/03/2014 00:46:55
Quote Anchor link
$username is niet gedefineerd, waar komt deze vandaan?

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 -
 
Ivo P

Ivo P

18/03/2014 00:52:34
Quote Anchor link
<label for="username">Naam:</label>
<input type="text" name="name" id="" />

dit geeft mij de indruk dat jij het veld hier van username omgedoopt hebt in name?
 
Miladin Jeremic

Miladin Jeremic

18/03/2014 00:53:55
Quote Anchor link
Top, dan zo.
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)
PHP script in nieuw venster Selecteer het PHP script
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 :)
 



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.