$_POST prüfen bzw. wp_get_attachment_url aufrufen

  • Servus Gemeinschaft!

    Zuerst die Beschreibung des Sachverhalts, dann meine bisherige Lösung (welche nicht recht funktionieren will und welche ich anpassen muss/will).

    Ich ermögliche einen Download von Bilddateien und biete sie wie folgt an:

    Ich habe Artikel mit Featured Image (welches zugleich das Downloadbild / die Datei ist). Mit einem Klick auf "Download" gelangt man auf die Anhangsseite der Datei - fein soweit. Auf der Anhangsseite habe ich einen weiteren Button "Download". Dieser Button erzwingt mir durch eine weitere Datei (download.php) den Download. Somit wird das Bild nicht im Browser angezeigt, sondern der Downloaddialog erzwungen.

    Der Button, welches den Download auslöst und zur download.php schaltet:

    PHP
    <form class="edit" action="<?php echo esc_url( home_url( '/' ) ); ?>/wp-content/uploads/download.php" method="post">
        <a href="" onclick="parentNode.submit();return false;">
            <div class="grauer-kasten" style="float:none;">
                <i class="icon-cloud-download icon-large"></i> Download
            </div>
        </a>
        <input type="hidden" name="pid" value="<?php echo $attachment->ID ?>" />
        <input type="hidden" name="datei" value="<?php echo basename( wp_get_attachment_url( $post->ID ) ); ?>" />
    </form>

    Es gibt nur eine einzige download.php. Ich kann nicht für jedes Bild eine extra download-xyz.php programmieren. Daher muss ich das zu downloadende Bild per $_POST übergeben. Das realisiere ich über ein hidden Input-Field, welches den Dateinamen als Wert inne hat. Das funktioniert auch. Jedoch sollte ich den Wert, welchen ich per $_POST übermittele, in der download.php prüfen, damit man nur Bilder runterladen kann und nicht etwa Systemdateien. Klar.

    Ok, die Überprüfung habe ich mir wie folgt gedacht: Ich bekomme ja den Dateinamen per $_POST ("datei") übermittelt. Nun wollte ich mir zusätzlich und zugleich die attachment_id der Datei übermitteln lassen ("aid"). Beides bekomme ich auch übermittelt. Damit könnte ich in der download.php den Pfad / den Dateinamen der Datei aufrufen. Somit habe ich zwei Variablen. Einmal den Wert der zu downloadenden Datei, weiter den Pfad bzw. den Dateinamen der existenten Datei. Da der zweite nur eine existente Datei (Attachment) sein kann, kann ich beide Werte miteinander vergleichen. SInd die Werte gleich, kann der Download ermöglicht werden. Sind beide werte nicht gleich, will mir jemand per Formularmanipulation eine andere Datei entwenden. Wenn ich mir Gedanken darüber mache, wäre das für die meisten simplen Manipulationen eine halbwegs sichere Lösung, da ja durch den zweiten Wert sichergestellt wird, das man nur ein Attachment downloaden kann.

    Der komplette Inhalt der download.php:

    Ok, alles klar soweit? Wie ich es beschrieben habe, so sollte es funzen. Tut es aber nicht. Wenn ich die Datei aufrufe, bekomme ich die Fehlermeldung:

    Fatal error: Call to undefined function wp_get_attachment_url() in /home/www/u15756/html_www.meinedomain.com/wp-content/uploads/download.php on line 4

    Das irritiert mich. Auch andere Varianten habe ich schon verwendet. Aber immer sagt er mir, er kenne die Funktion nicht... [size=12]wie bekomme ich die Funktion zum laufen?[/SIZE] Über Hilfestellung würde ich mich freuen, wie der Schneekönig im Puderschnee.

    Noch zwei Anmerkungen: Wenn ich die Überprüfung entferne, läuft der Script. Und nein, ich will kein Downloadmanager-Plugin verwenden - das macht die spätere Verwaltung nur zeitaufwändiger. Auch habe ich nur beschränkt Interesse, von der Entwicklungslust anderer abhängig zu sein.

    Wenn wer Fragen, Anregungen oder konstruktive Kritik hat, weil etwas unverständlich/unklar ist oder weitere Infos benötigt werden, stehe ich gerne zur Verfügung.

    Ich Grüße!

    Korrekt ist: eine Frage stellen und folgend ein, zwei zu beantworten.

    Einmal editiert, zuletzt von Variabel (2. Mai 2013 um 17:21)

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • Ok, habe die Gegebenheit gelöst, das die Funktion nicht erkannt wurde. Ich poste das, damit andere User davon Nutzen haben können. Aber schon vorab: es ist noch nicht fertig - ich bin nur einen Schritt weiter. Man kann also immernoch eine Lösung suchen. Was genau, schreibe ich gleich. Zuerst der Script, wie er nun wäre.

    Ich habe einfach die wp-load.php inkludiert. Mein Script nun:

    Ok, nun wird mir die nicht vorhandene Funktion nicht mehr bemängelt. Fein. Ihr seht die if-Abfrage? Diese soll ja, wie im ersten Post beschrieben, 2 Werte miteinander vergleichen. Das funzt noch nicht. [size=12]Da muss ich mir noch die richtige Lösung hinfriemeln. Oder habt Ihr sie schon? Oder zumindest einen Vorschlag, eine Anregung?[/SIZE] Irgendwie muss ich die beiden Werte miteinander vergleichen... ($datei und $aid) So wie es jetzt ist, bekomme ich aber ein false und somit nicht die Datei angeboten. Entferne ich die if-Abfrage oder sage "if not", bekomme ich die Datei...

    Grüße!

    Korrekt ist: eine Frage stellen und folgend ein, zwei zu beantworten.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!