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
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:
</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.
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>
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_erg, MYSQLI_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")
?>
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.
Kommentar