Eigenes Upload Formular auf der Webseite

08. Jun 2010

Dieser Artikel beschreibt, wie Sie ein eigenes Upload-Formular erstellen können.

Ab der Version 005.048.011.000 können Sie über das PHP-Framework nicht nur Daten lesen, sondern auch schreiben. Ich zeige Ihnen in diesem Artikel, wie Sie mit Hilfe des Formulargenerators Besuchern erlauben können, Dateien hochzuladen und einen Titel zu vergeben.

Formularfelder erstellen

  1. Löschen Sie alle Felder aus dem Formular.
  2. Fügen Sie ein einzeiliges Textfeld mit dem Namen title_1 ein.
  3. Fügen Sie ein Datei-Upload Feld mit dem Namen file_1 ein.

Skript erstellen

  1. Klicken Sie im Formular auf Erweiterte Formulareinstellungen einblenden und kopieren Sie den nachfolgneden Quelltext in das Feld Nach dem Absenden auszuführendes Script folgenden Quelltext.

Nach dem Absenden auszuführendes Script

if(wRequest::getParameter("wFormAction") == "reset"){
  $this->reset();
  wResponse::redirect($this->url);
}

$this->setFormData(wRequest::getParameters());

if($this->validate()){ 

  //Datei file_1 hochladen, einchecken und Titel vergeben
  $fileData = $_FILES['file_1'];

  $pathDest = "/public/uploads/".date('Y-m-d-H-i-s')."-".rand(1000, 9999)."-".$fileData["name"];

  @move_uploaded_file($fileData["tmp_name"], $_SERVER["DOCUMENT_ROOT"].$pathDest);

  wRepository::checkInDocument($pathDest);
  wDocumentData::setData($pathDest, 'title', $this->elements["title_1"]->getValue());

  $this->initFormData();
  $this->setStatus("sent");
  
  if($this->getVar("redirectSuccess") == ""){    
    wResponse::redirect($this->url);
  }
  else{
    wResponse::redirect($this->getVar("redirectSuccess"));
  }
}
else{
  $this->setStatus("failed");    
  wResponse::redirect($this->url);
}

Anstatt ein E-Mail zu verschicken, wird beim Absenden des Formulars ein dynamischer Pfad generiert, wo dann die hochgeladene Datei file_1 über move_uploaded_file hinkopiert wird. Sobald die Datei abliegt, wird sie über wRepository::checkInDocument eingecheckt. Anschließend wird der im Feld title_1 eingetragene Wert als Titel über wDocumentData::setData eingetragen.