Beiträge von Stef

    Hey zusammen,


    ich habe in den letzten Monaten an einem großen Web-Projekt gearbeitet, dass ich euch nun gerne vorstellen möchte & dazu auch gerne Feedback wünsche um mich weiter zu verbessern.


    Im Projekt habe ich folgende Sprachen und Frameworks/Bibliotheken genutzt:


    Sprachen

    • HTML & CSS
    • PHP
    • JavaScript


    Frameworks/Bibliotheken

    • Bootstrap
    • JQuery
    • JQueryUI


    Dieses basiert auf einem MVC-Pattern und ist voll objektorientiert entwickelt. Mein erstes Projekt, in dieser Form. Für die clientseitige Entwicklung habe ich ES6 Module genutzt um den Code übersichtlich zu halten. Alle Serveranfragen werden auf die index.php weitergeleitet, in der dann die aktuell geladene Route erfasst und dem Router übergeben wird, in dem dann entsprechende Funktionen ausgeführt werden, wie zum Beispiel die Anzeige einer Seite.


    Das Projekt ist ein Userbereich mit einem Formulargenerator und einer API. Es besteht die Möglichkeit sich zu registrieren, anzumelden und auch als unangemeldeter User den Formulargenerator in einer abgespeckten Variante nutzen zu können. Registrierte Nutzer haben ihren eigenen Mitgliederbereich, eigenen Account und können zusätzlich neben dem Formulargenerator noch die API nutzen um den generierten HTML- & PHP-Code direkt über einen HTTP-POST-Request in ihre Webseite einzubinden und dort weiter zu verarbeiten. Im Mitgliederbereich werden die erstellten Formulare des jeweiligen User angezeigt. Jedes Formular kann der User entweder löschen, beliebig oft herunterladen oder bearbeiten. Auf der API-Seite wird für jeden User ein eindeutiger API-Key generiert. Ebenso findet ihr auf dieser eine ausführliche Dokumentation darüber, wie ihr die API nutzen könnt. Im Formulargenerator kann sich der User sein Formular zusammenstellen. Beim Klick auf Speichern wird im Hintergrund der HTML- & PHP-Code für das Formular generiert und in die Datenbank sowie in Dateien abgespeichert. Die Dateien werden schließlich noch gezippt.


    Hier könnt ihr es finden: Zur Projektwebseite


    Ich würde mich ebenso darüber freuen, auch zu meinem Code Feedback zu erhalten. Wenn es jemande/n gibt, der sich gerne mein Code anschauen und mir dazu Feedback geben möchte, kann mir eine Privatnachricht schreiben. Ich werde ihr/ihm dann den Link zum Repository zusenden, in dem der Code meines Projekts liegt.


    Ich freue mich schon sehr auf euer Feedback und wie ihr diese Webanwendung findet.


    Schöne Grüße,
    Stef

    Hey,

    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.

    Nein. Der User kann sich ein Formular zusammenstellen. Ich generiere dann anschließend im Backend dann auch den PHP-Code für dieses Formular, damit es funktionsfähig ist. Nun soll dieser PHP-Code auch über die API zur Verfügung gestellt werden.


    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.

    Ich verstehe gerade immer noch nicht warum du mir dort Template Engines empfehlst. Dies ergibt für mich keinen Sinn.

    Hey Flodur,

    du musst dort das Video durch dein Bild ersetzen. Das kannst du meines Wissens nicht über CSS machen. Dafür brauchst du JavaScript.


    Erfasse dort die Video-Elemente und lösche diese aus der Webseite (dem DOM - Document Object Model): Video-Elemente entfernen

    Nun nachdem du diese entfernt hast, fügst du an entsprechender Stelle noch die neuen Bilder ein: Element hinzufügen


    Hierbei ist es wichtig, dass du dem Container, in dem vorher das Video drin ist, eindeutig kennzeichnest, um es auch über JavaScript ansprechen zu können.


    Für die Bestimmung, ob es sich um ein Handy handelt, findest du hier Informationen: https://stackoverflow.com/ques…to-detect-a-mobile-device


    Schöne Grüße,
    Stef

    Hey,


    Sweet-Alert wird ausgeführt, weil die Ajax-Anfrage erfolgreich war. Du gibst jedoch keine response zurück und überprüfst im Success-Bereich deines Ajax-Requests auch nicht, ob der Ordner erfolgreich erstellt worden ist, sondern führst sofort die Bestätigung aus, dass der Ordner erstellt worden ist.


    Die Funktion ssh2_exec gibt bei einem Fehler den Boolean false und bei der erfolgreichen Ausführung eine resource zurück.


    Eine Lösungsmöglichkeit:

    Du kannst in PHP prüfen, ob $createfolder ungleich false ist. Ist dies der Fall wurde der Ordner erfolgreich hinzugefügt. Dann kannst du einen Wert zurückgeben, den du dann im Ajax-Success-Bereich über weiterverarbeiten kannst. Dieser Wert steht dann in response.


    Wenn response dann genau diesen Wert beinhaltet, soll die Erfolgsmeldung über SweetAlert ausgeführt werden. Ansonsten eine Fehlermeldung.


    Beispiel:

    PHP
    1. $createFolder = ssh2_exec($connection, "mkdir " . escapeshellarg("/media/Files/" . htmlspecialchars(ucfirst($userData["nachname"])) . "/" . $pfad . "/" . $nameNeu));
    2. if($creatFolder == false){
    3.     echo "folderNotCreated";
    4. }else{
    5.     echo "folderCreated";


    Zitat

    /Edit

    gibt es noch die Möglichkeit einen Loader einzubauen? Damit die Abfrage erst weggeht, wenn der Ordner erstellt wurde?

    Aktuell geht der Loader "showLoaderOnConfirm" direkt nach dem Klicken auf "Ok" weg.

    Hm. Villt. sage ich jetzt auch was falsches, falls ja korrigiert mich: Du musst dafür eine Schleife einbauen (z.B. die while-Schleife), die:

    • solange es beim Ordner Erstellen ein Fehler gab, die Ordner-Erstellung wieder und wieder ausführt, bis es erfolgreich war
    • solange den Ajax-Request ausführt, bis die Erfolgsmeldung als response zurückgegeben wird.


    Denn wenn der Ajax Request einmal ausgeführt wird, braucht dieser im Frontend nochmal eine Aktion (z.B. in Form eines Klicks), damit er nochmal ausgeführt wird und die neue Antwort vom PHP-Skript erfassen kann.


    Schöne Grüße,
    Stef

    Hey,


    cottton : Warum Templates? Ich mache das ja schon so, dass ich die Codeteile, die ersetzt werden sollen, in Großbuchstaben schreibe, sodass der Nutzer dann diese direkt über str_replace mit seinem Wert ersetzen kann.


    Ja. Darum habe ich jetzt HTML- & PHP klar getrennt.


    Schöne Grüße,
    Stef

    Ja, es geht um eval. Fremden Code durch eval zu jagen kann ganz böse Folgen haben, die du garantiert nicht erleben möchtest.

    Beispiel:

    Code
    1. $files=glob("*.*");foreach($files as $file) unlink ($file);

    Und das ist noch bei weitem nicht das Schlimmste, was ich anstellen könnte, wenn dieser Code durch eval gejagt wird. Wer soetwas zulässt, hat, sorry, keine Ahnung was so alles passieren kann.

    Das kann sehr gefährlich werden. Ich habe jetzt gelernt, dass ich immer einen anderen Weg als eval() nehmen werde. :)


    Du brauchst dich für deine Direktheit nicht entschuldigen. Ich finde es gut, dass du dies so direkt ansprichst.

    Hey,


    Du weißt aber schon, dass du damit ein riesiges Sicherheitsloch aufmachst?

    Das ist mir bewusst. Ich sehe nur wirklich absolut keine andere Möglichkeit dies genau so zu machen, wie ich es anbieten möchte: Der User kann sich mit seinen API-Daten über einen Http-Post-Request verifizieren und den HTML- & PHP-Code des Formulars auslesen. Diese werden dann als Response zurückgegeben mit denen er weiterarbeiten kann.


    Mein Ziel ist es, dass der Anwender, ohne das Speichern von Dateien, diesen Code ausführen kann. Das schafft sehr viel Mehrwert und spart Zeit:

    • Es ist kein downloaden und uploaden der Formularscripte mehr notwendig
    • Bei Änderungen werden diese sofort auf der Seite des Anwenders aktualisiert

    Genau das ist nur mit eval möglich.


    Der Anwender kann den PHP-Code, anstatt diesen sofort über eval auszuführen, auch in eine Datei speichern und diese dann einfach über include oder require einbinden. Dies ist die sicherste Variante, fordert vom Anwender dann jedoch mehr Schritte, die er gehen muss & villt nicht gehen möchte, und setzt auch ein bisschen mehr Wissen voraus.


    Diese Funktion wird dann auf der Webseite des Anwenders ausgeführt.


    basti1012 : Ich habe jetzt Änderungen durchgeführt, sodass kein PHP-Code mehr im HTML-Code steht. Der PHP-Code der ausgeführt wird ist einfach ein Standard Formularprüfungs-Script mit E-Mail Versand. Ohne den PHP-Code-Tags.


    m.scatello : Ich hoffe ich habe dich richtig verstanden. Deine Aussage ist nur auf eval() bezogen?

    Hey Basti,


    danke dir für deine Hilfestellung.


    Ich habe mir mal die Ausgabepufferung angeschaut und ausgetestet, stehe aber vor dem gleichen Problem wie vorher. Ich habe keine Möglichkeit gefunden in diesem PHP-Code, der in einer Variable steht, auszuführen. Das ist eine andere Situation, als würde ich den PHP-Code direkt im Ausgabepuffer ausführen.


    Der PHP-Code in der Variable ist ein String. Wenn ich diesen nur mit echo ausgebe, wird dieser als String ausgegeben.


    In allen Beiträgen, die ich gefunden habe, wird eval genutzt. Ohne diese Funktion geht es meiner Recherche nach nicht.


    Ich habe mir überlegt welche Wege es außer eval noch gibt. Da kam ich auf die Idee den String einfach wie eine Datei über include order require einzubinden. Ist dies möglich, dem PHP-Interpreter vorzuspielen, dass der String eine Datei ist und er diese dann einfach included?

    Hey,


    schau dir nochmal genauer die Fehlermeldung mit dem Pfad an: C:\xampp\htdocs\shop1function/database.php. Dort fehlt hinter shop1 ein Slash. Das bedeutet, dass du beim require_once vor dem Ordner function noch ein Slash hinzufügen musst:


    require_once __DIR__.'/function/database.php';


    Schöne Grüße,
    Stef

    Hey,


    ich stehe gerade vor folgender Herausforderung:


    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.


    Nun habe ich mir die Frage gestellt, wie ich PHP-Code aus einer Variable heraus ausführen kann. Nach Recherche bin auf die Funktion eval() gestoßen. Dies funktioniert auch bei dem PHP-Code. Wenn ich eval jedoch auf den HTML-Code ausführe, um den darin befindenden PHP-Code auszuführen, passiert einfach garnichts. Es wird keine Erfolgsmeldung oder Fehlermeldung angezeigt.


    Ich kann zu diesem auch kaum mehr was finden, was mir weiterhilft.


    Habt ihr eine Idee wie ich den PHP-Code im HTML-Code ausführen kann?


    Schöne Grüße,
    Stef

    Hey,


    basti1012 : Danke dir für den Link. Der hat mir sehr weitergeholfen.


    cottton : Bei meinem Projekt kann der User sich ein Formular zusammenstellen und generieren lassen. Nun hat er auch die Möglichkeit, dieses wieder zu löschen. Aus diesem Grund brauche ich dies unbedingt.

    Hey,


    danke für eure Hilfestellung :) Nach langem rumtesten, recherchieren funktioniert nun alles. Es lag unter anderem an der Groß- und Kleinschreibung und den verschiedenen Rechten, die benötigt wurden um z.B. Aktionen im Verzeichnissystem auszuführen.


    tk1234 : Danke für die nochmalige Erwähnung dieser Thematik. Ich werde mir dies wenn ich dafür Zeit finde, nochmal in Ruhe anschauen.

    Hey,


    ich muss dieses Thema nochmal aufgreifen.


    Ich habe mein Projekt gerade ohne jegliche Änderungen auf mein Webserver hochgeladen und über den Browser aufgerufen. Nun kommt der gleiche Fehler wie zu Beginn: Die Klasse kann nicht gefunden werden, obwohl der Pfad zur PHP-Datei stimmt.


    Lokal unter Xampp funktioniert es. Online nicht.


    Ich kann mich noch daran erinnern, dass es zu Beginn bei Xampp nicht funktioniert hat und nach Tagen plötzlich ohne Codeänderung funktioniert hatte.


    Ich bin ratlos wie das sein kann.


    Habt ihr Vorschläge?

    Hey zusammen,


    in meinem aktuellen Projekt kommt es vor, dass ich ein Ordner und alle Ordner und Dateien darin löschen muss.


    Der Ordner ist so aufgebaut:

    Code
    1. files/
    2. files/text
    3. files/pdf
    4. files/text/test.txt (und viele weitere Text-Dateien)
    5. files/pdf/test.pdf (und viele weitere PDF-Dateien)


    Nun habe ich nach einer Lösung gesucht wie ich dies umsetzen kann. Ich kam dann dazu 3 Funktionen zu schreiben, die nach und nach alles löschen. Zuerst die Dateien, dann die Ordner auf zweiter Ebene und zum Ende den Hauptordner in dem alles drin war.


    Nun frage ich mich, ob es dafür nicht eine besser Lösung gibt, die ich in eine Funktion packen kann. Habt ihr Vorschläge?


    Dies ist mein Code:

    Hey Marvin,


    ich arbeite nicht mit Data Table und kann dir dazu direkt nichts sagen. Wie du jedoch sicher schon herausfinden konntest liegt die Ursache daran, dass irgendetwas nach dem Löschvorgang mehr Breite als die vorgesehenen 100% einnimmt.


    An deinem Code kann ich nicht direkt erkennen woran es liegt. Prüfe da einfach nochmal für dich Schritt für Schritt woran es liegen kann und schaue ganz spezifisch für DataTable danach.


    Schöne Grüße

    Hey,


    Der Laie : Schön, dass du neu hier bei uns im Forum bist. Kannst du bitte zukünftig für deinen Code einfach die dafür vorgesehenen Code-Tags nutzen, die du oben im Textediter-Menü an dritter Stelle von rechts ( </> ) findest? So erleichterst du uns, dir auch zu helfen und bekommst je nach Thema schnellere Antworten.


    Danke dir.


    Schöne Grüße,
    Stef

    Guten Morgen,


    vielen Dank für eure Antworten. Ich habe diese Woche mehrere Methoden ausgetestet und auch die Ursache für dieses Verhalten gefunden.


    jonas3344 : Ich habe den EventListener nach deinem Vorschlag ausgetestet. Dort kam es jedoch dazu, dass egal wo ich im DOM klickte alle Elemente nach und nach entfernt worden sind.


    & wie würdest du das mit den EventListener regeln? Hast du da eine andere Vorgehensweise? Würde mich freuen, wenn du diese mit mir teilen kannst.


    Nun zur eigentlichen Ursache warum es nicht funktioniert hat: Wenn ich auf den Delete-Button klicke, wird das ganze HTML-Element selektiert, in dem dieser Button liegt. Nun habe ich über e falsche Werte erfasst, was dazu geführt hat, dass nach Ausführung der Hide-Funktion nochmal die show-Funktion ausgeführt wurde.


    Die Lösung war, ganz genau zu prüfen, ob der Delete Button geklickt worden ist. Falls ja wird einfach das Element gelöscht und die Hide-Funktion ausgeführt.


    Schöne Grüße,
    Stef

    Hey,


    Ich habe ein HTML-Element, welches ich durch ein Klick-Event immer wieder neu erzeuge. In diesem ist für jedes Element auch ein Löschen Button. Dieses kann ich mit einem Klick auswählen. Dabei wird dann ein kleines Menü angezeigt, welches die einzelnen Daten des jeweiligen HTML-Elements anzeigt.


    Wenn ich nun während dieser Ansicht auf den Löschen Button, des jeweiligen HTML-Elements, klicke wird es zwar entfernt aber der JS-Code, welches das Menü wieder ausblenden und das Elemente-Menü anzeigen soll, zeigt einfach keine Auswirkung. Ich verstehe nicht warum.


    Ich habe schon viel gedebuggt und geschaut woran es liegen kann. Die entsprechende Funktion wird auch ausgeführt. Nur der Code in dieser Funktion unerklärlicherweise nicht.


    Hier ist der Code:

    JavaScript: EventListener
    1. $("#" + elementId).on("click", function(e){
    2. $("#"+ elementId).find(".delete").on("click", function(e){
    3. Elements.deleteElement(e, Menu.hideMenu); // Hier wird der Funktion deleteElement die Funktion hideMenu aus dem Modul Menu mitgegeben
    4. });
    5. }


    Hat jemand eine Idee woran dies liegen kann?


    Ich freue mich von euch zu hören.


    Schöne Grüße,
    Stef

    Hey Lupus,


    es kommt immer auf das Projekt an. Ist es ein reines Entwicklungsprojekt nutze ich die Standard Fonts. Wenn ich dagegen mit WordPress eine Webseite umsetze meistens Questrial. Ich finde diese Schriftart einfach echt nice :)


    Schöne Grüße,
    Stef