Nach einer Weiterleitung eine Meldung ausgeben

  • Moin,


    ich habe bei mir die Funktion das man Dateien hochladen kann. Dies klappt soweit auch sehr gut.

    Mein Problem ist allerdings das ich das ganze ja mit POST mache.


    Heißt also wenn man das ganze absendet und die Seite neu laden möchte, die Abfrage kommt ob man die "Erneute Formular-Übermittlung bestätigen" möchte.

    Das ganze habe ich mit der headerFunktion umgangen.

    Ich habe auch eigentlich eine Bestätigung gemacht, die man bekommt, wenn die Datei hochgeladen wurde. Diese wird allerdings nicht mehr angezeigt, aufgrund der Weiterleitung.


    Weiß jemand wie ich das ändern kann?


    Mein Code:

    Code
    1. if(move_uploaded_file($dateiTempName, $absolutePath)) {
    2.     $erfolgreichHochgeladen = 'Die Datei wurde erfolgreich hochgeladen.';
    3. if($erfolgreichHochgeladen) {
    4.         header("LOCATION: dashboard.php");
    5.     }
    6. }


    Hier wird das ganze ausgegeben im Code später:

    Code
    1. if(isset($erfolgreichHochgeladen)) {
    2.     echo $erfolgreichHochgeladen;
    3. }



    Gruß

  • 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:

  • Also bitte korrigiere mich wenn es Falsch ist.
    Habe versucht das ganze etwas zu verstehen.


    Habe das ganze jetzt so gemacht:



    Dort wird mir als Fehler ausgegeben:

    Fatal error: Uncaught Error: [] operator not supported for strings in /var/www/html/verzeichnis.php:106 Stack trace: #0 {main} thrown in /var/www/html/verzeichnis.php on line 106


    Das ist diese Zeile:

    $_SESSION['messages']['info'][] = "Wurde hochgeladen!";


    //edit

    Hab das auch mal so versucht:


    Code
    1. $hochgeladen = $_SESSION['erfolgreich'] = "Erfolgreich hochgeladen";
    2. if(isset($hochgeladen)) {
    3. header("LOCATION: verzeichnis.php?folder=");
    4. echo $hochgeladen;
    5. }


    Verstehe das noch nicht ganz mit dem header, weil der das ganze ja in dem sinne "überschreibt" bzw "verhindert" das das echo ausgegeben wird.

    Allerdings brauche ich den header ja auch, damit man beim Refresh keine erneute Formular Übermittlung hat.

  • 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

  • Sorry wenn es zu Unklarheiten kam


    die Upload Funktion ist in der Datei Verzeichnis.php


    Auf diese Seite möchte ich auch wieder zurück

    Also einfach Neuladen damit diese erneute Übermittlung nicht kommt


    hab ausversehen Dashboard als Weiterleitung genommen


    soll aber auch Verzeichnis.php sein

  • Alles klar.
    Danke dir.

    Hätte allerdings noch ein kleines Problem dazu.
    Sobald ich diesen Code verwende im upload Teil. Funktioniert der "multiple" Upload nicht mehr.


    Code
    1. <input type="file" id="file" style="border: 0.3px solid gray;" name="file[]" multiple hidden="hidden" />




    Wenn ich aber den move_uploaded_file Teil wieder mit meinem alten austausche:


    Code
    1. if(move_uploaded_file($dateiTempName, $absolutePath)){
    2.     $erfolgreichHochgeladen = 'Datei wurde erfolgreich hochgeladen!';
    3. }

    funktioniert es wieder ...

  • "Funktioniert nicht" ist keine vernünftige Problembeschreibung.


    Richtig debuggen

    1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
    2. Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(-1);
    3. Man verwendet ini_set('display_errors', true); damit die Fehler auch angezeigt werden.
    4. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
    5. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde. Wichtig bei MySQL Fehlern (...not a valid MySQL result resource...): mysqli_error() verwenden oder Abfrage ausgeben und zb mit phpmyadmin testen.
    6. Schritt 5 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
    7. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
    8. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
    9. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.
  • 1. Stimmt
    2. Habe ich bereits.

    3. Auch das habe ich, wird allerdings nichts angezeigt.

    4. Habe ich. Liegt an dem Code mit dem exit(0);

    5. Habe ich auch gemacht.

    6. Ja

    7. Okay, habe allerdings nichts direkt gefunden.

    8. Sobald ich aus dem Code das exit(0); entferne, funktioniert es wieder. Allerdings wird dann die Nachricht nicht mehr ausgegeben. Habe auch keinen direkten Lösungsanschlag gefunden, auch dort werden weiterhin keine Fehler ausgegeben.

  • 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:


  • Gibt es auch eine Möglichkeit für $success und $failure jeweils eine eigene Schriftfarbe zu nutzen?
    Für Success Grün und für $failure halt rot?

  • Gibt es auch eine Möglichkeit für $success und $failure jeweils eine eigene Schriftfarbe zu nutzen?

    Ja, die gibt es. Allerdings solltest du mal selber nachdenken, denn das ist ja wohl extrem simple und man sollte auch als Anfänger auf die richtige Lösung kommen.


    Und

    $_SESSION['flash_messages']['Erfolgreich'][] = "{$failure} Dateien konnten nicht hochgeladen werden!";

    passt auch nicht wirklich zusammen.