PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   PHP Developer Forum (https://www.php-resource.de/forum/php-developer-forum/)
-   -   DB Tabelle nach Formular absenden neu laden (https://www.php-resource.de/forum/php-developer-forum/107197-db-tabelle-nach-formular-absenden-neu-laden.html)

tommy-11 25-12-2020 12:30

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.

Flavaslava 25-12-2020 21:42

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

tommy-11 26-12-2020 10:49

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. :confused: Danke noch mal.

VIZUKA 06-01-2021 16:19

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
}


Alle Zeitangaben in WEZ +2. Es ist jetzt 00:02 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG