Fehlermeldung ausgeben

  • Moin.


    Ich habe mittels Ajax die Funktion gemacht, Ordner auf einem WebServer zu erstellen. (Mittels ssh2_exec)

    Das klappt soweit auch ganz gut. Die Erstellung der Ordner ist in einer anderen Datei.


    Ich wollte mal Fragen ob mir jemand helfen kann, wie ich Fehler ausgeben kann. Also z.b wenn der Ordner erstellt wurde gibt er dies auch aus als "SweetAlert". Allerdings zeigt er dies auch an, wenn der Ordner nicht erstellt wurde. Da wollte ich mal Fragen ob jemand eine Idee hat, wie ich den Fehler ausgeben kann wenn der Ordner nicht erstellt wurde.



    Hier ist das Script:


    Und die createFolder.php


    Würde mich freuen.


    //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.


    LG

  • 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

  • Den Loader kannst du ja vorm Erstellen des Ordners (vor dem Ajax Request) einblenden, mit

    addcCass bei jQuery

    oder

    classList.add bei Vanilla JS.


    In der success Abfrage, die Stef dir gezeigt hast, nimmst du den loader die Klasse wieder weg.


    Was auch immer du für ein Loader nutzt, Image, Icon selbst erstellten mit JS, die lassen sich so alle ein und ausblenden

  • 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";

    Hey,

    erst einmal Vielen Dank für die Antwort.


    Leider funktioniert das leider nicht ganz.
    Er zeigt nur "folderCreated" an. Obwohl kein Ordner erstellt wurde.


    Wenn ich $createFolder auch ausgebe. Zeigt er nur dies an "resource(4) of type (stream)"


    Auch das mit dem SweetAlert funktioniert noch nicht ganz.


    Code


    LG


    // Edit

    Es klappt mittlerweile. Hab da aber noch eine Frage wegen dem Loader.
    Wie mache ich dass, das solange der Ordner erstellt wird das Attribut "showLoaderOnConfirm" mit einfüge?

    Das muss ja irgendwie mit einer Schleife gemacht werden, allerdings habe ich nichts gefunden, wie ich mit der while Schleife überprüfen ob als response "folderCreated" kommt.

    Leider weiß ich aktuell nicht wie genau das gemacht wird.

    Hat jemand einen Tipp?

  • Wie genau mache ich das in dem SweetAlert?
    Weil dort gibt es ja extra Die funktion "showLoaderOnConfirm".


    So sieht das aktuell aus



    Also dein Beispiel verstehe ich, allerdings nicht wie ich das in dem SweetAlert einbinde.
    Wenn er mich fragt ob ich den Ordner wirklich erstellen möchte, setzte ich "showLoaderOnConfirm" auf True. Dann zeigt er den ganz kurz an und dann schließt sich das SweetAlert. Erst wenn er fertig ist und den response zurückgibt, zeigt er entweder die Bestätigung oder den Fehler.

    Möchte aber halt wirklich das er den "loader" beim Confirm, solange anzeigt, bis entweder die Bestätigung kommt oder halt der Fehler.


    Da verstehe ich leider nicht genau wie ich das Einbinde.


    // edit
    Habe das die Schleife einmal vor der "Abfrage ob der Ordner erstellt werden soll" dort konnte ich nicht einmal mehr auf "Ok" bei dem Modal welches geöffnet wird (Wo ich den Ordnernamen angebe) andrücken. Später kam ein Fehler (fatal memory exceeded)


    Dann habe ich es einmal nach dem }).then((create) => { eingefügt. Da hat sich die Abfrage geöffnet, konnte aber nicht auf "Weiter" drücken, dort der selbe Fehler. Und einmal habe ich das nach if (create.isConfirmed) { eingebunden. Dort das gleiche wie davor.

  • MarvinTLA : Ich habe einen Lösungsweg gefunden.


    Wenn der then-Block ausgeführt wird, wird das aktuelle Alert-Fenster geschlossen und das neue Alert-Fenster mit der Erfolgs- oder Fehlermeldung angezeigt. Nun ist das Ziel, das Schließen des ersten Alert-Fensters zu verhindern. Dafür bietet Sweetalert die anonyme Funktion preConfirm an. In dieser musst du deinen Ajax-Request sowie die Verarbeitung der Response ausführen.


    Ich habe den Ajax-Request in ein setTimeout reingepackt, da der Prozess sonst sehr schnell abgeschlossen ist und der Effekt, den du dir wünschst, nicht erkannt werden kann.


  • Also Das klappt soweit ganz gut.
    Allerdings schließt er die Abfrage mit dem Loader noch zu früh.
    Er schließt das ganze und 3 sekunden später kommt bsp erst die Fehlermeldung. (Als Beispiel)


    Habe jetzt selber auch noch einmal geguckt aber ebenfalls ohne Erfolg.


    //edit

    Hab es letztendlich doch gepackt, war irgendwie doch einfacher als Gedacht.

    Durch deine Lösung habe ich es iwie versucht und geschafft.


    So habe ich es nu ngemacht: