DB Tabelle nach Formular absenden neu laden

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • DB Tabelle nach Formular absenden neu laden

    Hallo,


    nun benötige ich doch mal eure Hilfe bzw. ein Schups in die richtige Richtung.


    Ich bin Anfänger und übe und lerne an einem ganz simplen Script ein Dienstbuch zu programmieren. Das meiste in diesem Script habe ich nicht selbst geschrieben, sondern es ist ein Tutorial an dem ich lernen möchte. Ich habe eine SQL Datenbank eingebunden, darunter (auf der selben Seite) ein ganz einfaches Formular. Beim Absenden des Formulars wird der Inhalt in die DB geschrieben. Das funktioniert soweit. Leider sehe ich den neu abgesendeten Inhalt in der Tabelle auf der Seite erst nach dem nächsten neuladen der Seite. Ich möchte es gerne so haben, dass sich die Seite nach dem Absenden der Formulardaten einmal neu lädt und sofort der neue Inhalt auf der Seite zu sehen ist. Dazu soll sich die Seite natürlich nicht nur aus dem Browsercache neu laden, sondern hauptsächlich den Inhalt der DB neu einlesen.
    Ich habe schon verschiedene Möglichkeiten ausprobiert. Per header() fällt aus, weil ich schon vorher html Ausgaben habe und dann die "berühmt berüchtigte " Fehlermeldung kommt. Per JS mit

    Code:
    <script>
    
       location.reload();
    
    </script>
    ist es mir auch nicht gelungen.
    Nun steh ich etwas auf dem Schlauch...



    Meine Datei "internal.php", auf dem die DB ausgegeben wird und die auch das Formular enthält sieht folgendermaßen aus:
    PHP-Code:
    <?php
    session_start
    ();
    require_once(
    "inc/config.inc.php");
    require_once(
    "inc/functions.inc.php");

    $user check_user();

    include(
    "templates/header.inc.php");
    ?>


    <div class="container main-container">
    Aktuell ist 
    <b>
    <?php 
      
    echo htmlentities($user['vorname'])." ".htmlentities($user['nachname']);
    ?> 
    </b> im Dienstbuch angemeldet. Das bist du nicht ? Dann: <a href="logout.php" target="_self">Abmelden!</a><br>

    <img src="https://meineURL.de/derordner/templates/logo.jpg" width="50" height="50" alt="Logo" align="right">
    <br><br>

    <div class="panel panel-default">

    <?php
    $db2_host 
    'localhost';
    $db2_name 'dbname';
    $db2_user $user['nachname'];
    $db2_password $user['passwort'];

    $link mysqli_connect($db2_host$db2_user$db2_password$db2_name);

    if (!
    $link) {
        echo 
    "Fehler: konnte nicht mit MySQL verbinden." PHP_EOL;
        echo 
    "Debug-Fehlernummer: " mysqli_connect_errno() . PHP_EOL;
        echo 
    "Debug-Fehlermeldung: " mysqli_connect_error() . PHP_EOL;
        exit;
    }

    $sql "SELECT * FROM tabelle_sowieso";


    $db_erg mysqli_query$link$sql );
    if ( ! 
    $db_erg )
    {
      die(
    'Ungültige Abfrage: ' mysqli_error());
    }

    echo 
    '<table class="table" border="1"><tr bgcolor="#ddd"><td>Lfd.Nr.</td><td>Name</td><td>Datum/Zeit</td><td>Ereignis</td><td>Kommentar</td></tr>';
     
    while (
    $zeile mysqli_fetch_array$db_ergMYSQLI_ASSOC))
    {
      echo 
    "<tr>";
      echo 
    "<td>"$zeile['Lfd.Nr.'] . "</td>";
      echo 
    "<td>"$zeile['Name'] . "</td>";
      echo 
    "<td>"$zeile['Datum/Zeit'] . "</td>";
      echo 
    "<td>"$zeile['Ereignis'] . "</td>";
      echo 
    "<td>"$zeile['Kommentar'] . "</td>";
      echo 
    "</tr>";
    }
    echo 
    "</table>";

    mysqli_free_result$db_erg );
    ?>

    </div>


    <form action="internal.php" method="post">
    <div class="form-group">
        <label>Ereignis</label> 
        <textarea class="form-control" name="ereignis_name" >
    </textarea>
      </div>
      <div class="form-group">
        <label>Kommentar</label> 
        <textarea class="form-control" name="kommentar_name" >
    </textarea>
      </div>
      <button class="btn btn-lg btn-primary btn-block" type="submit">Eintragen</button>
    </form>

    <?php
    //Fehlerreport eingeschaltet
    error_reporting(E_ALL);
    ini_set('display_errors'1);   
      
    $ereignis_name $_POST["ereignis_name"];
    $kommentar_name $_POST["kommentar_name"];
     
    if(isset(
    $_POST['ereignis_name']) AND $_POST['kommentar_name'])

    $statement $pdo->prepare("INSERT INTO `tabelle_sowieso` (`Name`, `Ereignis`, `Kommentar`) VALUES (:currentuser, :ereignis, :kommentar) ");
    $statement->execute(array('currentuser' => $db2_user'ereignis' => $ereignis_name'kommentar' => $kommentar_name));
    }
    ?>



    </div>
    <?php 
    include("templates/footer.inc.php")
    ?>
    </div>


    Wie gesagt, es funktioniert soweit. Aber ich sehe die abgesendeten Formularinhalte erst in der Tabelle, wenn ich das Formular wieder mit neuen Eintragungen abgesendet habe. Es erscheint also immer der vorletzte abgesendete Inhalt in der Tabelle.

    Gibt es eine Möglichkeit, bei der nach einem Klick auf den "Eintragen" Button erst die neuen Formularinhalte an die DB gesendet werden und danach die DB neu für die Ausgabe auf der selben Seite geladen wird?


    Bitte habt Nachsicht mit mir als Anfänger ;-) falls etwas falsch formuliert oder nicht richtig dargestellt ist oder etwas fehlt.

  • #2
    Hey tommy-11,


    die Lösung für dein problem wäre JavaScript. Also speziell Jquery und Ajax nutzen. Das ist die einzige möglichkeit die mir einfällt um es am einfachten umzusetzen kann. Durch asynchronen Daten versenden und empfangen mit AJAX könnte dir sicherlich helfen.


    Mfg
    Flavaslava

    Kommentar


    • #3
      Hi Flavaslava, danke für die Information. Okay, ich ackere mich erst mal durch dieses Tutorial https://riptutorial.com/de/ajax. Das klingt tatsächlich nach dem was ich gesucht habe. Na da habe ich ja erst mal wieder zu tun. Da muss ich erst mal rein kommen. Danke noch mal.

      Kommentar


      • #4
        könnte auch so gehen
        eventuell den Code (Reihenfolge) etwas umstellen
        Abfragen ob Daten gesendet wurden

        if(isset($_POST)){
        // $_POST Variablen zuweisen
        $zeile['Name'] = $_POST["Name"];
        // Variablen ausgeben
        }
        Vine Consulting GmbH
        Dipl. Ing. Karl Masche
        Vizuka Affiliate und Publisher Script
        Individuelle Softwarelösungen und Beratung

        Kommentar

        Lädt...
        X