Level: mittel

Diese nützliche Funktion kann in vielen Projekten genutzt werden: mit ihr kann ein Text in einen Dateinamen-konformen String umgewandelt werden. Geübt wird dabei das erstellen eines Abstrakten Prozesses in einer eigenen Funktion.

Aufgabe

  1. Du brauchst ein Formular, um eine Datei hochzuladen. Verwende dazu (oder mache) die Übung Bild-Upload.
  2. Passe das Formular so an, dass man neben der Datei auch noch einen Namen für das Bild angeben kann. Achtung: Dieser wird nicht über $_FILES, sondern $_POST verschickt.
  3. Erstelle nun eine separate Datei functions.inc.php und binde diese mittels require_once() ein.
  4. Erstelle in dieser nun eine Funktion dateiname() mit einem Parameter $text, über welchen ein String mitgegeben werden soll. Zudem soll die Funktion einen String zurückgeben.
  5. Kommentiere gemäss der Anweisung in Punkt 4 die Funktion, noch bevor Du mit der Arbeit beginnst. 
  6. Um die Funktion zu testen, erstelle in der Formularauswertung des Uploads eine Variable $dateiname (oder ähnlich), und weise ihr den Wert der Funktion dateiname() zu. Gebe die Variable nun mit echo aus.
  7. Verändere nun in der Funktion den eingegebenen String so, dass er
    • Keine Leerzeichen enthält
    • Umlaute wie ä durch ihr Äquivalent (ae) ersetzt werden
    • Sonderzeichen gelöscht (durch "nichts" ersetzt) werden
  1. Gebe am Schluss mit return() den umgewandelten String zurück.
  2. Prüfe noch einmal, ob das, was in den Kommentaren als Anweisung steht, auch wirklich mit dem Resultat übereinstimmt.
  3. Verwende nun $dateiname in deinem Upload-Script, um die Datei mit dem neu erstellten Namen zu speichern.

 

Tipps

  • Debugging der Funktion: gebe nach jeder Zeile den aktuellen Zwischenwert aus, damit Du siehst, ob das Ergebnis erwartungsgemäss aussieht.
  • Verwende für Punkt 7 Stringfunktionen wie str_replace() oder reguläre Ausdrücke mit preg_replace(), das genau wie preg_match() funktioniert. Beides ist möglich. Wenn Du den Unterschied der beiden Möglichkeiten sehen willst, mache zwei funktionen, so dass Du beide Wege probieren kannst
  • Abstraktion: stelle Dir Deine Funktion in einem anderen Zusammenhang vor. Würde sie auch funktionieren im Einsatz eines anderen Formulares? Was geschieht, wenn z.B. ein Formular mit GET verschickt wird? Was geschieht, wenn statt dem Formular der Text aus einer Datei kommt, zum Beispiel die ersten 2 Worte des Textes in der Datei? 

 

Beispiel

Eingabe in Formular:

upload-rename-funktion

Name des Bildes nach dem Hochladen:

mein-urlaub-in-zuerich.jpg