Beiträge von cottton

    "Kommt immer drauf an".


    Du kannst alles als Objekt behandeln, bis es keinen Sinn mehr macht.

    Soll am Bsp. heißen:

    Addresse - haben sie alle. Also gibts ein Objekt "Address", das im Object "Organization" genutzt wird.

    Firma (company (name)) - hm, macht keinen Sinn, gehört zur Addresse. Ist also eine Eigenschaft der "Address".


    Dann gibts mehrere Addressen ... z.B. Billing und Shipping (hier evlt. nicht das Thema) ...

    also kann man eine "abstract Address" nutzen.


    Sowas fällt einem auch mal später auf, wenn Du schon Code geschrieben hast - dann änderst Du das einfach.


    Bsp.:



    Es kommt also wirklich immer darauf an.

    Abr wie gesagt - oft bemerkt man das beim Schreiben.


    Ich nehm einfach mal das Bsp. "Verein" -

    erst ist es nur eine Property - ein String, der Vereinsnahme.

    Später irgendwann merkst Du, dass Du da eine|mehrere Vereinsaddresse(n) hast|willst, ...

    oder einen Vereinstyp ... usw ...

    dann wird der Verein eben ein Object.

    Config.
    Z.B.

    Im eigentlichen mailer Script holst Du Dir dann die config und go. =)

    Kommt natürlich noch drauf an, wie Du mit configs umgehst. Also hast Du eine App, die alle configs sammelt und merged, oder holst Du Dir die config hier per require_once, ... .

    Kann ja nicht funktionieren, wenn Du uns Code vorenthältst (ein blödes Wort).


    Du bist in einem for-loop.

    Da solltest Du nicht `header("Location: ...")` nutzen.

    Durch das `exit` war dann natürlich Ende des Loops.


    Eine Lösung wäre:


    Ne, Du setzt $_SESSION['messages']['info'][] = "Wurde hochgeladen!";

    in dem upload (upload.php ?) script.


    Und in dashborad.php nutzt Du die Ausgabe.


    Bsp:

    Das Upload - Script(upload . php ?)

    PHP
    1. // wenn upload erfolgreich -
    2. if (move_uploaded_file($dateiTempName, $absolutePath)) {
    3. // dann session info message setzen -
    4. $_SESSION['flash_messages']['info'][] = "Wurde hochgeladen!";
    5. // umleiten (script dashboard.php wird gestarted)
    6. header("Location: dashboard.php");
    7. // und hier stoppen.
    8. exit(0); // exit(0) ^= kein fehler.
    9. }



    dashboard . php

    Session.

    Wenn erfolgreich, dann setzt Du z.B. $_SESSION['flash_messages'][] = 'Die Datei wurde ... .';.

    Und immer, wenn die Webseite ausgegeben wird,

    dann guckst Du einfach in $_SESSION['flash_messages'], ob da was drin ist, das angezeigt werden soll.

    Wenn Du die Nachrichten angezeigt hast (oder diese evtl. zu alt sind), dann löscht Du sie aus der Session.


    Bsp.

    PHP
    1. if (isset($_SESSION['flash_messages']) and is_array($_SESSION['flash_messages'])) {
    2. foreach ($_SESSION['flash_messages'] as $message) {
    3. // Hier dein code zum ausgeben der message.
    4. }
    5. // All messages were shown - reset|remove them.
    6. $_SESSION['flash_messages'] = [];
    7. }

    ---

    Wird oft "Flash messages" genannt.

    Bsp: https://stackoverflow.com/a/33224494/3411766


    ---

    EDIT: Du kannst, und solltest wohl auch, alle Nachrichten by type sammeln und ausgeben,

    um z.B. Fehler "in Rot" darzustellen ect.

    Bsp:

    Ich wüsste ja zu gern, was Du da genau vor hast. Der Benutzer soll PHP-Code eingeben können und der soll dann ausgeführt werden? Von so etwas habe ich noch nie gehört und ich frage mich, ob es keine Alternative ohne solche sicherheitskritischen Aktivitäten gibt.

    Stef when das so ist, dann rate ich definitiv zu Template engines.

    Denn damit kannst Du loops ect umsetzen, ohne PHP.

    Mit str_replace bist Du da sehr limitiert.

    Bei meinem Projekt können die User über eine Schnittstelle den HTML- & PHP-Code ihres Formulars auslesen und dann über ihr Script ausführen/nutzen. Im HTML-Code steht noch PHP-Code der entweder die Erfolgs- oder Fehlermeldung ausgibt.

    Templates.

    Wenn ich das richtig verstanden haben, dann solltest Du dem User templates zur Verfügung stellen.


    Bsp: twig

    https://github.com/twigphp/Twig


    Docu: https://twig.symfony.com/doc/3.x/


    ---


    Deine User bekommen dann das template geladen, das sie verändern können.

    Und Du kannst im script die templates laden und parsen und ausgeben lassen.

    Und HTML ohne php ist auch besser für die Augen =)

    Gegenfrage: warum musst Du die alle Löschen?

    Werden die nicht mehr gebraucht? (könnte man in den /tmp/ ordner packen)

    Temporär erstellt, um die Bilder z.B. an den Browser zu senden? (könnte man per <img> tag mit base64 string machen)

    ...

    Ich frage, weil ich automatisiertes Dateien und Ordner löschen nicht mag.

    Muss nicht, aber könnte viel schief gehen =)

    Like: oops, wo ist den mein ganzes Projekt hin?


    Statt preg_replace würde ich nur den filename von dem eingehenden String holen.


    Wenn jemand also "../../path/to/my_file.txt" gibt,

    dann alles nach dem letzen "/".


    Bsp.:

    PHP
    1. $file = '../../path/to/my_file.txt';
    2. $filename = pathinfo($file,PATHINFO_BASENAME); // my_file.txt

    Bestimmte Zeichen verbieten ist Mist. Dann musst Du ständig hinderher sein, mit updates ... und das will keiner.

    Mit dem Filename kann nichts passieren (nichts, was ich kenne. Kann mich irren.), und Du brauchst nichts zu warten.


    EDIT: Sicherheitsproblem:

    alle vars mit htmlspecialchars() ausgeben. (EDIT: um z.B. XSS zu unterbinden. Alle Daten sind als Böse anzusehen. Auch die aus Deiner db.)

    Also

    PHP
    1. <a href="includes/downloadFile.php?file=<?php echo $ausgabeDatei ?>" type="submit" class="btn btn-info btn-fill pull-right btn-sm">Download</a>

    zu

    PHP
    1. <a href="includes/downloadFile.php?file=<?php echo htmlspecialchars($ausgabeDatei) ?>" type="submit" class="btn btn-info btn-fill pull-right btn-sm">Download</a>

    Der bessere Weg ist es eine Möglichkeit für den Sysadmin zu haben das Passwort zurückzusetzen

    • Das System erstellt ein neues Passwort und sendet es direkt dem Nutzer zu, sodass der Admin es nie sieht
    • Der Admin kann ein neues Passwort eintragen und muss es dem Nutzer manuell übermitteln

    Danach kann der Nutzer sich anmelden und sein Passwort wieder auf sein Wunschpasswort ändern

    Find ich nicht so prikelnd.

    New pw per email?

    New pw per admin?

    Nope. New pw by user - yes.

    GET, wenn Du etwas abfragst, ohne zu verändern

    POST, wenn etwas verändert wird.

    Gibt noch PATCH und PUT ... aber einfach mal im Netz suchen, wenn es interessiert.


    Sensible Daten immer POST (login, ...).

    Suchanfragen GET (z.B. www.[...].de/movie/{id} order www.[...].de/movie?genre=scifi&name_like=abcdef)