Beiträge von ASenna

    Guten Abend,

    da es sich um etwas spezifisches von WordPress handelt, denke ich, meine Frage ist hier richtig aufgehoben. Ich würde gerne mittels PHP aus einer WordPress-Datenbank eine komplette Spalte in ein eindimensionales Array einlesen. get_results macht selbst dann, wenn man nur eine Variable angiebt, immer ein mehrdimensionales Array daraus. Ich habe das jetzt so gelöst:

    [PLAIN]function getcollumn_func( $tabelle, $select, $where = NULL, $order = Null ) {
    global $wpdb;
    $carry = $wpdb->get_results("SELECT " . $select . " FROM " . $wpdb->prefix . $tabelle . ($where == Null ? "" : " WHERE " . $where) . ($order == Null ? "" : " ORDER BY " . $order), ARRAY_A );
    foreach($carry as $car) {
    $result[] = $car[$select];
    }
    return $result;
    }[/PLAIN]

    Gibt es da nicht einen besseren / kürzeren Weg?

    Sollte das Kennwort falsch sein, wird über dieses Shortcode und eine Return-Anweisung eine Fehlermeldung auf der Download-Seite ausgegeben. Ist das Kennwort, geht das PHP-Skript in den Part mit readfile(), allerdings mit der benannten Fehlermeldung. Experimentiert man mit den Buffer udn löscht ihn, flused ihr etc., verschwindet wzar der Hinweis auf den bereits gesendeten Header, allerdings erscheint die herunterzuladende Datei dann im Browser, wird also auf den Bildschirm geschickt. Ein Download erfolgt aber nicht.

    Stimmt. Es läuft über <form action="https://www.example.com/download" method="get"> und dann einem Input-Befehl. Der action-Wert verweist auf eine Seite, auf der nur ein Shortcode steht, der das oben im Auszug wiedergegebene PHP-Skript startet. In dem Skript selber gibt es keine echo- oder return-Anweisungen.
    Ich vermute mal, dass bereits mit dem Aufruf der Download-Seite ein header übergeben wird, obwohl der Browser auf der Ausgangsseite verbleibt.

    Ich habe ein problem auf der Schnittstelle zwischen WordPress und PHP. Und ich denke inzwischen, dass WordPress der "Schuldige" ist. Ich habe ein PHP-Skript, dass (nach Kennworteingabe) einen Download anbietet.

    [PLAIN] header('Content-Description: File Transfer');
    header('Content-Type: ' . $mimetype);
    header('Content-Disposition: attachment; filename="' . basename($downloaddatei) . '"');
    //header('Expires: 0');
    //header('Cache-Control: must-revalidate');
    //header('Pragma: public');
    //header('Content-Length: ' . filesize($ordner . $downloaddatei));
    /*while (ob_get_level()) {
    ob_end_clean();
    ob_clean();
    flush();
    } */
    readfile($ordner . $downloaddatei);
    exit;[/PLAIN]

    Das aber funktioniert nicht zuverlässig. Je nachdem, wie ich mit dem Löschen des Buffers vorgehe kommt der Hinweis

    [PLAIN]Warning: Cannot modify header information - headers already sent by ...[/PLAIN]

    Was schickt das WP vorher raus? Kann mir da jemand helfen, wo ich genauer nachsuchen muss?

    Guten Morgen,

    mehr zufällig habe ich festgestellt, dass wenn ich im Browser bspw. http://www.example.com/wp-content/plugins/privat/daten.csv aufrufe, ich eine dort liegende Datei öffnen kann, in der Daten meiner Webseite abgelegt werden. Das ist sicherheitstechnisch nicht hoch kritisch, aber dennoch will ich das nicht. Auch alle meine PHP-Skripte kann man dort sehen. Voraussetzung ist natürlich, dass man den Pfad kennt sowie den konkreten Dateinamen.

    Ruft man http://www.example.com/wp-content/plugins/privat/ auf, wird allerdings nichts geliefert, also kein Listing aller Dateien.

    Wie kann man das verhindern? Was ioch bisher gefunden habe, hat mir nicht weitergeholfen:

    1. Daten nicht als CSV-Datei speichern sondern in den WP-DAtenbanken ablegen - ist richtig, aber so weit bin ich noch nicht. Ich bin kein PHP-Experte. P.S. Wer diesbezüglich eine gute Einweisung kennt, gerne mal den Link rüberschicken.

    2. Plugin intsallieren, hier wurde Prevent Direct Access genannt, hat nicht funktioniert. Es schützt wohl nur das Uploadverzeichnis.

    3. wp-content umbenennen - ok, machbar, aber ich kann mir nicht vorstellen, dass das die beste Lösung ist.

    Vielen Dank schon mal vorab.

    AS

    Ich bin vom PHP-Forum hierhin weitergeleitet worden. Ich hoffe, man kann mir hier helfen. Ich will ein Affenformular programmieren für einen Upload mehrerer Datein. Da gibt es ja Vorlange im Netz, die ich auch verstehe und an meine Bedürfnisse anpassen kann. Ich komme aber mit dem Selbstaufruf nicht klar. Mein Skript heißt upload.php und liegt im Verzeichnis /wp-content/plugins/upload (Wordpress-Installation, aktuelle Version).

    Wenn ich jetzt im HTML-Teil schreibe

    [PLAIN]<form action="upload.php" method="post" enctype="multipart/form-data">
    ...
    <input type="submit" name="submit" value="Datei hochladen">
    [/PLAIN]
    findet er den PHP-Code nicht, weil er nur im Root-Verzeichnis sucht. Schreibe ich

    [PLAIN]action="/wp-conten/plugins/upload.php"
    [/PLAIN]
    findet er das Skript auch nicht. In den verschiedenen Vorschlägen stand drin, ich soll die Superglobal $_Server['Self-PHP'] nutzen. Die aber liefert mir nur die index.php im Root (obwohl doch die upload.php ausgeführt wird?!?). Da will ich mein Skript aber nicht anhängen. Und da das Skript Shortcodes generiert, kann ich es auch nicht ins Root-Verzeichnis verschieben.

    Was tun?

    Update:
    Das Problem scheint nicht bei WordPress zu liegen. Firefox nutzt das aktualisierte Plugin. Nur Opera nicht. Offensichtlich klappt dort Strg + F5 für das Neuladen der Seite nicht. Ich habe dann den ganzen Cache gelöscht, beginnend ab der Installation. Auch das brachte nichts. :confused:

    Moin Leute,

    ich habe ein eigenes Plugin geschrieben, recht einfacher PHP-Code. der steht als Unterverzeichnis unter ../plugins und hat es bisher immer getan.
    Jetzt habe ich Änderungen vorgenommen, die allerdings nicht übernommen werden. Per FileZilla ist die aktuelle Version auf dem Server. Die Seiten bauen sich aber immer noch mit der alten Version des Plugin aus (nach Strg + F5). Ich habe das Plugin deinstalliert, den Header modifiziert (der erscheint auch unter WordPress in der neuen Version), ich habe das Plugin umbenannt. Alles hilft nichts.

    Irgendwo hat WordPress noch die alte Version des Plugins und führt die fröhlich aus.

    Kann mir jemand helfen?

    Ich habe folgendes Problem. Über WPBakery Page Builder habe ich eine Seite erstellt, die u.a. ein Accordion-Element enthält (ein paar FAQ, deren Antwort man ausklappen kann). In den Einstellungen habe ich vorgegeben, dass bei Seitenaufruf keine der Rubriken ausgeklappt sein soll. In der letzten / untersten Rubrik habe ich ein Input-Feld eingefügt, dass über ein PHP-Skript eine Berechnung durchführt und dort auch ausgibt (per Shortcode). Anschließend wird die Seite neu geladen und damit werden alle Antworten wieder eingeklappt. Man muss die gleiche FAQ also noch einmal anklicken, damit man die Antowrt sieht.

    Am Quellcode ändert sich folgendes:

    Die entsprechende Antwort beginnt mit
    [PLAIN]<div class="vc_tta-panel " id="GenBetrieb_FAQ_05" data-vc-content=".vc_tta-panel-body">[/PLAIN]

    Klappt man sie aus, wird der Quellcode geändert auf
    [PLAIN]<div class="vc_tta-panel vc_active" id="GenBetrieb_FAQ_05" data-vc-content=".vc_tta-panel-body">[/PLAIN]

    Meine Frage: Wie kann ich erreichen, dass nach der Berechnung die Antwort ausgeklappt bleibt?

    Zwei Lösungsansätze hätte ich, weiß aber nicht, ob die funktionieren:

    a) Über ein PHP-Code wird der Quellcode der geladenen Seite geändert (also im Prinzip das, was man über "Element untersuchen" händisch machen kann
    b) Nach der Berechnung wird eine globale Variable gesetzt, die beim Seitenaufruf irgendiwe gleich den Quellcode geändert erstellt.

    Kann da jemand helfen? Es geht um folgende Seite:

    https://www.ifag-berlin.de/Generalistik/#GenBetrieb_FAQ_05

    AS

    Guten Morgen,

    kann man eigentlich ShortCode (erstellt unter Woody Snippets) auch in href-Anweisungen einbauen? Hintergrundist folgender:

    Es besteht eine csv-Datei mit Kursterminen. Wir eine Seite aufgerufen, erstellt ein PHP-Skript eine ICS-Dateimit den Kursterminen. Dabei sucht sich der PHP-Code den nächstenanstehendenKurs raus (die finden ca. alle Monate statt) und gibt der ICS-Datei den Namen des Kurses (stammt auch aus der csv-Datei). Nach und nach entstehen daher zum Download dateien nach dem Muster Kurs01.ics, Kurs02.ics ...

    Das alles klappt. Aber wie stelle ich die Datei jetzt zum Download bereit per href-Anweisung. Mein Wunsch wäre:
    [PLAIN]<a href="[aktuellerKurs]" id="12345" kurstyp="beginner"]>Terminezumdownload</a>
    [/PLAIN]
    ID kennzeichnet das Snippet unter Woody, kurstyp den Kurstyp.

    Das aber klappt unter WordPress nicht, da er den ShortCode nicht als solches erkennt. Mit " und ' habe ich schon ein wenig rumgespielt,klappt aber alles nicht.

    Im Internet gelesen habe ich, dass man für href einen PHP-Code nutzt, also
    [PLAIN]<a href="<?PHP .....>Terminezumdownload</a>
    [/PLAIN]

    Aber Wordpress erkennt an dieser Stelle auch keinen PHP-Code. WP nimmt wirklich alles nur als String.

    Hat jemandeine Idee?

    AS

    Noch mal zurück zum ShortCode, ich komme daleider nicht weiter.

    ich habe ein eigenes Plugin angelegt. Dort steht drin

    function shortcode_function(){
    return '<?php echo $_POST['var_einkommen']; ?>'; }

    add_shortcode('shortcodetest', 'shortcode_function' );

    Auf der Seite habe ich das Inputfeld wie folgt geändert:

    <td><input name="var_einkommen" type="text" value=[shortcodetest] placeholder="Jahreseinkommen in €" size="50" pattern="[0-9].{,6}" maxlength="6" required/></td>

    Das ganze klappt aber nicht, da ich bereits das plugin nicht aktivieren kann. Ein fataler würde wohl ausgelöst.

    Was mache ich falsch?

    Danke für den Hinweis, dann bau ich das mal so.

    Eine nachfrage zum Escaping und dem Link von Dir: Bedeutet das, dass man die Ausgabe immer als

    [PLAIN]echo esc_attr( $ausgabe );
    [/PLAIN]

    schreiben sollte? Ich dachte immer, urch solche Sicherheits-Fuctions müsse die Eingabe laufen, damit kein Code eingeschleust wird.

    AS

    Ich habe rumprobiert und jetzt folgende lösung gefunden - die aber auch nicht funktioniert:

    <td><input name="var_einkommen" type="text" value="<?php echo $_POST['var_einkommen']; ?&gt;" placeholder="Jahreseinkommen in €" size="50" pattern="[0-9].{,6}" maxlength="6" required/></td>

    Zwar wird jetzt kein End-Tag gesetzt, aber auch keine Daten übertragen. Stattdessen steht der unter value genannte Text im Feld. Er wird also gar nicht als PHP-Skript erkannt.

    Wie also kann man nach Submit verhindern, dass das Formular gelöscht wird oder alternativ die eingegebenen Daten wieder in die Input-Felder schreiben?

    Bin für jede Hilfe dankbar.

    AS

    Ich habe über den Editor eine Seite generiert, in der zunächst ein paar Daten abgefragt werden. Über den Submit-Button läuft dann ein PHP-Skript (mittels Woody Snippets-Plugin). Klappt alles.

    Ich will jetzt nach dem Submit die Nutzerdaten weiterhin in den Eingabefelder haben. Dazu habe ich wie folgt geschrieben:

    ...
    <td><input name="var_einkommen" type="text" value="<?php echo $_POST['var_einkommen']; ?>" placeholder="Jahreseinkommen in €" size="50"/></td>
    ...

    Wenn ich jetzt auf Aktualisieren klicke, setzt WP an den Ende des PHP-Codes ein End-Tag, also

    ...
    <td><input name="var_einkommen" type="text" value="<?php echo $_POST['var_einkommen']; ?/>" placeholder="Jahreseinkommen in €" size="50"/></td>
    ...

    Damit aber erkennt der Browser nicht mehr das Ende des PHP-Codes.

    Was tun?

    @mensmaximus: Vielen Dank für den Hinweis zur Sicherheit. Was heißt das für mich konkret? Einfach nur den Code an den Beginn des PHP-Skriptes stellen?
    Ich habe hier zwar zwei schlaue PHP- und WordPress-Bücher, zu der Tehmatik finde ich aber nichts. Beim Sanitizen geht es wohl um das Löschen von Inhalten temporärer Dateien, oder?