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.


	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'];
		}
	}


    <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
Op zoiets komt het dan uit.

<?php // kleurtjes
$success = move_uploaded_file($file['tmp_name'], $this->destination ."/".$klas."/".$naam." - ".$filename);
?>

Wel even de variabelen de juiste waarde geven.
Het enige wat er nu bijkomt is een foutmelding op de website zelf:
Zou je me een PM kunnen sturen?
$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.
<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?
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?

[size=xsmall]Toevoeging op 18/03/2014 00:58:01:[/size]

Oh, en de bestanden staat nog steeds in de /uploaded/ map, ipv de (bijvoorbeeld) /h5b/ map

[size=xsmall]Toevoeging op 18/03/2014 09:38:12:[/size]

Het is me gelukt!

$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 :)

Reageren