www.PHP-Kurs.com

PHP lernen für Einsteiger
und Fortgeschrittene

PHP-Tutorial mit Videos

Sie befinden sich: Startseite » MySQL Tutorial - Datenbank unter PHP » Erweiterung: Datenbankprogramm in PHP » Gedächtnis für Datenpflege-Tool

Gedächtnis für das Datenpflege-Tool

Wir haben gesehen, dass unser in PHP programmiertes Datenpflege-Tool vergesslich ist. Nicht die eingegebenen Daten vergisst es, sondern beispielsweise Zustände. Wir suchen etwas, lassen aus dem Ergebnis einen Datensatz anzeigen und wollen dann zurück zu den Ergebnissen der Suche. Das klappt noch nicht! Wir wollen nun unserem Datenpflege-Tool ein Zustand-Gedächtnis mitgeben.

Und dafür bieten sich die SESSION-Technik an (siehe im Kurs https://www.php-kurs.com/session-anwenden.htm ). Über Sessions kann man Zustände speichern und kann auf diese wieder zugreifen. Wird also eine PHP-Seite zum ersten Mal aufgerufen, kann man für den Nutzer und seine Aktion in einer Session-Variablen einen Zustand abspeichern und diesen beim nächsten Aufruf wieder einlesen und so wieder nutzen. Dazu müssen zwei Dinge beachtet werden:

  • session_start(); Am Anfang unseres PHP-Programmes müssen die SESSIONs aktiviert (gestartet) werden
  • $_SESSION[''] – Zustände werden in frei benennbaren Platzhaltern gespeichert

Das Starten der Session packen wir am besten in unsere Datei „db.inc“. Diese wird in allen unseren Programmen (gut gerade haben wir nur 1 Seite mit dem Namen index.php) als erstes eingebunden. Dadurch, dass es als erstes eingebunden wird, funktioniert es dann auch. Wichtig ist, dass keinerlei Ausgabe davor erfolgt.

<?php
session_start(); 
error_reporting(E_ALL);
// error_reporting(0);
$db = new mysqli('localhost', 'root', 'root', 'adressbuch');
$db->set_charset('utf8');
if ($db->connect_errno){
    die('Sorry - gerade gibt es ein Problem');
}
function bereinigen($inhalt='') {
    $inhalt = trim($inhalt);
    $inhalt = htmlentities($inhalt, ENT_QUOTES, "UTF-8");
    return($inhalt);
}
?>

Ab jetzt können wir den Zustand unserer Suche in einer Session speichern.

Bisher sieht der PHP-Code unserer Suche wie folgt aus:

    if ( isset($_GET['suchbegriff']) and trim ($_GET['suchbegriff']) != '' )
    {
        $suchbegriff = trim ($_GET['suchbegriff']);

Wir überprüfen vor unserer Suche, ob der Inhalt vorliegt für $_SESSION['suchbegriff']. Diesen gemerkten Inhalt nutzen wir, falls keine neue Suche nach neuen Begriffen vorliegt. Daher die Abfrage ! isset($_GET['suchbegriff'])

Insgesamt sieht unser Code vor der bisherigen Suche also wie folgt aus:

    if ( ! isset($_GET['suchbegriff']) and isset($_SESSION['suchbegriff']) ) 
    {
        $_GET['suchbegriff'] = $_SESSION['suchbegriff'];
    }    

In unserer Suche packen wir jetzt den zu suchenden Inhalt gleich in die SESSION.

    if ( ! isset($_GET['suchbegriff']) and isset($_SESSION['suchbegriff']) ) 
    {
        $_GET['suchbegriff'] = $_SESSION['suchbegriff'];
    }
    if ( isset($_GET['suchbegriff']) and trim ($_GET['suchbegriff']) != '' )
    {
        $_SESSION['suchbegriff'] = $_GET['suchbegriff'];
        $suchbegriff = trim ($_GET['suchbegriff']);

Soweit so gut. Wir haben jetzt ein Gedächtnis für unsere Suche. Aber wie bekommen wir wieder unsere komplette Tabelle? Wir müssen die $_SESSION['suchbegriff']) löschen. Dazu geben wir dem Nutzer die Möglichkeit, die Eingrenzung auf den Suchbegriff wieder aufzuheben. Neben dem „Gesucht wird nach:“ packen wir einen Link:

    if ( isset($_GET['suchbegriff']) and trim ($_GET['suchbegriff']) != '' )
    {
        $_SESSION['suchbegriff'] = $_GET['suchbegriff'];
        $suchbegriff = trim ($_GET['suchbegriff']);
        echo "<p>Gesucht wird nach: <b>$suchbegriff</b>";
        echo ' - wieder <a href="?aktion=allesanzeigen">alle Daten anzeigen</a>';
        echo "</p>"; 
        $suche_nach = "%{$suchbegriff}%";

Die Variable aktion=allesanzeigen können wir am Anfang abfragen und die SESSION dazu löschen.

<?php
require 'inc/db.php';
if (isset($_GET['aktion']) and $_GET['aktion'] == 'allesanzeigen') {
    unset($_SESSION['suchbegriff']);
}

Und nun haben wir ein „Zustands-Gedächtnis“. Für unsere Suchfunktion funktioniert es bereits wunderbar. Für das kommende Kapitel für die Seitenweise anzeige der Daten werden wir es wieder nutzen können.

komplette Quellcode aus diesem Kapitel

<?php
require 'inc/db.php';
if (isset($_GET['aktion']) and $_GET['aktion'] == 'allesanzeigen') {
    unset($_SESSION['suchbegriff']);
}
if (isset($_GET['aktion']) and $_GET['aktion'] == 'sicherheitsabfrage') {
    if ( isset($_GET['id'])) {
        $id_einlesen = (INT) $_GET['id'];
        echo '<h1>Sicherheitsabfrage Löschen</h1>';
        echo '<p>Soll der folgende Datensatz unwiderruflich gelöscht werden?</p>';
        echo '<p><a href="?aktion=loeschen&id='. $id_einlesen.'">endgültig löschen!!</a></p>';
        $_GET['aktion'] = 'anzeigen';
    }
}
if (isset($_GET['aktion']) and $_GET['aktion'] == 'anzeigen') {
    if ( isset($_GET['id'])) {
        $id_einlesen = (INT) $_GET['id'];
        if ($id_einlesen > 0) {
            echo "<h1>Daten anzeigen von $id_einlesen</h1>";
            $dseinlesen = $db->prepare("SELECT id, vorname, nachname, anmerkung, erstellt 
                                               FROM kontakte WHERE id = ? ");
            $dseinlesen->bind_param('i', $id_einlesen);
            $dseinlesen->execute();
            $dseinlesen->bind_result($id, $vorname, $nachname, $anmerkung, $erstellt);
            $dseinlesen->fetch();
            echo "<p>ID: <b> $id </b><br>";          
            echo "Vorname: <b> $vorname </b><br>";          
            echo "Nachname: <b> $nachname </b><br>";          
            echo "Anmerkung: <b> $anmerkung </b><br>";          
            echo "erstellt am: <b> $erstellt </b></p>";          
            echo '<p><a href="index.php">Tabelle anzeigen</a>';
            $dseinlesen->close();
            exit;   
        }
    }
}
if (isset($_GET['aktion']) and $_GET['aktion'] == 'loeschen') {
    // löschen von Datensatz
    if (isset($_GET['id'])) {
        $id = (INT) $_GET['id'];
        if ( $id > 0)
        {
            $loeschen = $db->prepare("DELETE FROM kontakte WHERE id=? LIMIT 1");
            $loeschen->bind_param('i', $id);
            if ($loeschen->execute()) {
                echo "<p>Datensatz $id wurde gelöscht</p>";
            }
        }
    }
}
if (isset($_POST['aktion']) and $_POST['aktion']=='speichern' ) {
    $vorname = "";
    if (isset($_POST['vorname'])) {
        $vorname = trim($_POST['vorname']);
    }
    $nachname = "";
    if (isset($_POST['nachname'])) {
        $nachname = trim($_POST['nachname']);
    }
    $anmerkung = "";
    if (isset($_POST['anmerkung'])) {
        $anmerkung = trim($_POST['anmerkung']);
    }
    if ( $vorname != '' or $nachname != '' or $anmerkung != '' ) 
    {
        // speichern
        $einfuegen = $db->prepare("INSERT INTO kontakte
            (vorname, nachname, anmerkung, erstellt)
            VALUES (?, ?, ?, NOW())");
        $einfuegen->bind_param('sss', $vorname, $nachname, $anmerkung);
        if ($einfuegen->execute()) {
            header('Location: index.php?aktion=feedbackgespeichert');
            die();
        }
        echo "<p>Daten werden gespeichert</p>";
    }
}
if (isset($_GET['aktion']) and $_GET['aktion'] == 'feedbackgespeichert') {
    echo '<p class="feedbackerfolgreich">Datensatz wurde gespeichert</p>'; 
}
$modus_aendern = false;
if (isset($_GET['aktion']) and $_GET['aktion'] == 'bearbeiten') {
    $modus_aendern = true;
}
if (isset($_POST['aktion']) and $_POST['aktion'] == 'korrigieren') {
    $id = "";
    if ( isset ($_POST['id'])) {
        $id = (INT) trim($_POST['id']);
    }
    $vorname = "";
    if (isset($_POST['vorname'])) {
        $vorname = trim($_POST['vorname']);
    }
    $nachname = "";
    if (isset($_POST['nachname'])) {
        $nachname = trim($_POST['nachname']);
    }
    $anmerkung = "";
    if (isset($_POST['anmerkung'])) {
        $anmerkung = trim($_POST['anmerkung']);
    }
    if ( $id != '' AND ( $vorname != '' or $nachname != '' or $anmerkung != '')) {
        $update = $db->prepare("UPDATE kontakte SET
                                vorname = ?, nachname = ?, anmerkung = ?
                                WHERE id = ? LIMIT 1");
        $update->bind_param("sssi", $vorname, $nachname, $anmerkung, $id);
        if ( $update->execute() ) {
            echo '<p class="feedbackerfolg">Datensatz wurde geändert</p>';
            $modus_aendern = false;
        }
    }
}
?>
<form action="" method="get">
    suchen nach:
    <input type="hidden" name="aktion" value="suchen">
    <input type="text" name="suchbegriff" id="suchbegriff">
    <input type="submit" value="suchen">
</form>
<?php
if ( $modus_aendern == false ) {
    $daten = array();
    if ( ! isset($_GET['suchbegriff']) and isset($_SESSION['suchbegriff']) ) 
    {
        $_GET['suchbegriff'] = $_SESSION['suchbegriff'];
    }
    if ( isset($_GET['suchbegriff']) and trim ($_GET['suchbegriff']) != '' )
    {
        $_SESSION['suchbegriff'] = $_GET['suchbegriff'];
        $suchbegriff = trim ($_GET['suchbegriff']);
        echo "<p>Gesucht wird nach: <b>$suchbegriff</b>";
        echo ' - wieder <a href="?aktion=allesanzeigen">alle Daten anzeigen</a>';
        echo "</p>"; 
        $suche_nach = "%{$suchbegriff}%";
        $suche = $db->prepare("SELECT id, vorname, nachname, anmerkung, erstellt FROM kontakte WHERE nachname LIKE ? OR vorname LIKE ? OR anmerkung LIKE ?");
        $suche->bind_param('sss', $suche_nach,$suche_nach,$suche_nach);
        $suche->execute();
        $suche->bind_result($id, $vorname, $nachname, $anmerkung, $erstellt);
        while ($suche->fetch()) {
            $daten[] = (object) array('id' => $id, 
                              'vorname'   => $vorname, 
                              'nachname'  => $nachname, 
                              'anmerkung' => $anmerkung, 
                              'erstellt'  => $erstellt);
        }
        $suche->close();
        $id        = '';
        $vorname   = '';
        $nachname  = '';
        $anmerkung = '';
        $erstellt  = '';
    }
    else
    {
        if ($erg = $db->query("SELECT *  FROM kontakte")) {
            if ($erg->num_rows) {
                while ($datensatz = $erg->fetch_object()) {
                    $daten[] = $datensatz;
                }
                $erg->free();
            }
        }
    }
if ( ! count($daten) ) {
    echo "<p>Es liegen keine Daten vor :(</p>";
} else {
?>
<table>
    <thead>
        <tr>
            <th>Nutzeraktion</th>
            <th>ID</th>
            <th>Vorname</th>
            <th>Nachname</th>
            <th>Anmerkung(en)</th>
            <th>erstellt</th>
        </tr>
    </thead>
    <tbody>
        <?php
        foreach ($daten as $inhalt) {
        ?>
        <tr>
            <td>
                <a href="?aktion=anzeigen&id=<?php echo $inhalt->id; ?>">anzeigen</a> 
                <a href="?aktion=bearbeiten&id=<?php echo $inhalt->id; ?>">ändern</a> 
                <a href="?aktion=sicherheitsabfrage&id=<?php echo $inhalt->id; ?>">löschen</a>
            </td>
            <td><?php echo $inhalt->id; ?></td>
            <td><?php echo bereinigen($inhalt->vorname); ?></td>
            <td><?php echo bereinigen($inhalt->nachname); ?></td>
            <td><?php echo bereinigen($inhalt->anmerkung); ?></td>
            <td><?php echo $inhalt->erstellt; ?></td>
        </tr>
        <?php
        }
        ?>
    </tbody>
</table>
<?php
    }
} else {
    echo "<h1>Daten ändern</h1>";
    if ( isset($_GET['id'])) {
        $id_einlesen = (INT) $_GET['id'];
        if ($id_einlesen > 0) {
            $dseinlesen = $db->prepare("SELECT id, vorname, nachname, anmerkung 
                                               FROM kontakte WHERE id = ? ");
            $dseinlesen->bind_param('i', $id_einlesen);
            $dseinlesen->execute();
            $dseinlesen->bind_result($id, $vorname, $nachname, $anmerkung);
            while ($dseinlesen->fetch()) {
                // echo "<li>";
                // echo $id ." / ". $vorname . " ". $nachname;          
            }
        }
    }
}
if ( ! isset($vorname) ) {
    $vorname = '';
}
if ( ! isset($nachname) ) {
    $nachname = '';
}
if ( ! isset($anmerkung) ) {
    $anmerkung = '';
}
?>
<form action="" method="post">
    <p><label>Vorname: 
        <input type="text" name="vorname" id="vorname" value="<?php echo $vorname; ?>">
    </label></p>
    <p><label>Nachname:
        <input type="text" name="nachname" id="nachname" value="<?php echo $nachname; ?>">
    </label></p>
    <p><label>Anmerkung(en):
        <textarea name="anmerkung" id="anmerkung"><?php echo $anmerkung; ?></textarea>
        </label></p>
    <?php    
    if ($modus_aendern != true ) {
        echo '<input type="hidden" name="aktion" value="speichern">';
        echo '<p><input type="submit" value="speichern"></p>';
    }
    else
    {
        echo '<input type="hidden" name="aktion" value="korrigieren">';
        echo '<input type="hidden" name="id" value="'. $id .'">';
        echo '<p><input type="submit" value="ändern"></p>';
    }
    ?>
</form>

Wenn Sie einen Fehler finden, bitte mitteilen (egal ob Schreibfehler oder inhaltlicher Fehler).

Mit Maus fehlerhafte Stelle markieren und übernehmen mit folgendem Button:



(kann angegeben werden)

Nach Absenden kommt hier Feedback! Bitte nicht doppelt absenden. Danke.

Bitte unterstützen Sie dieses Projekt

Sie können dieses Projekt in verschiedenen Formen unterstützen - wir würden uns freuen und es würde uns für weitere Inhalte motivieren :).

unsere Videos bestellen

Unsere Videos und eBooks bestellen.

Spenden

Sie können uns eine Spende über PayPal zukommen lassen.

Weiterempfehlungen

Empfehlen Sie es weiter - wir freuen uns immer über Links und Facebook-Empfehlungen.

Bücher über Amazon

Bestellen Sie Bücher über folgende Links bei Amazon:

Fehler melden

Vielen Dank für Ihre Hilfe