Ich habe eine Datei update.php (siehe Code unten), welche anstandslos funktioniert.
Das Formular wird erst definitiv gespeichert, wenn keine Fehlermeldungen (mehr) vorhanden sind.
Heisst, es erfolgt eine Zwischenspeicherung falls es Fehlermeldungen hat, damit bei Fehlermeldungen die bereits mutierten Daten nicht verloren gehen und nur wieder der ursprüngliche Datensatz im Formular erscheint und alles wieder neu eingegeben werden muss.
Nun habe ich versucht eine Datei clone.php zu erstellen (statt einen neuen Datensatz zu erstellen, nehme ich einen bestehenden ähnlichen, mutiere diesen und speichere unter neuer id ab).
Aber es ist mir nicht gelungen, das obige System "Zwischenspeicherung" zu implementieren.
Ich brauche einen Denkanstoss wie man das am besten macht.
Meine Ueberlegungen (Datei update.php wie unten zu Datei clone.php abändern):
1. In Zeile 30 müsste eine neue ID erstellt werden, statt auf die bestehende ID zu speichern.
2. Bei Fehlermeldungen wird Zeile 30 wiederum durchlaufen und eine neu ID generiert, was nicht sein sollte, sondern auf die neu eröffnete ID abspeichern.
3. Sobald keine Fehlermeldungen vorhanden sind, müsste in Zeile 44 auch unter der neu bestehenden ID abgespeichert werden (wie definiert man das?).
Wahrscheinlich gibt es mehrere Möglichkeiten das Problem zu lösen. Ich wäre sehr dankbar für einen Hinweis wie man das am Besten angeht.
- <?php
- include_once '../main.php';
- $messages_error = [];
- $messages = [];
- if (isset($_GET['id'])) {
- if (!empty($_POST)) {
-
-
- $id = isset($_POST['id']) ? $_POST['id'] : '';
- $username = isset($_POST['username']) ? $_POST['username'] : '';
- $password = isset($_POST['password']) ? $_POST['password'] : '';
- $email = isset($_POST['email']) ? $_POST['email'] : '';
- $activation_code = isset($_POST['activation_code']) ? $_POST['activation_code'] : '';
- $rememberme = isset($_POST['rememberme']) ? $_POST['rememberme'] : '';
- $role = isset($_POST['role']) ? $_POST['role'] : '';
- $title = isset($_POST['title']) ? $_POST['title'] : '';
- $vorname = isset($_POST['vorname' ]) ? $_POST['vorname'] : '';
- $nachname = isset($_POST['nachname']) ? $_POST['nachname'] : '';
- $str = isset($_POST['str']) ? $_POST['str'] : '';
- $snr = isset($_POST['snr']) ? $_POST['snr'] : '';
- $plz = isset($_POST['plz']) ? $_POST['plz'] : '';
- $ort = isset($_POST['ort']) ? $_POST['ort'] : '';
- $phone1 = isset($_POST['phone1']) ? $_POST['phone1'] : '';
- $created = isset($_POST['created']) ? $_POST['created'] : date('d-m-Y H:i:s');
-
-
- $stmt = $pdo->prepare('UPDATE accounts SET id = ?, password = ?, email = ?, activation_code = ?,
- rememberme = ?, role = ?, title = ?, vorname = ?, nachname = ?, str = ?, snr = ?, plz = ?, ort = ?, phone1 = ?, created = ? WHERE id = ?');
- $stmt->execute([$id, $password, $email, $activation_code, $rememberme, $role, $title, $vorname, $nachname, $str, $snr, $plz, $ort, $phone1, $created, $_GET['id']]);
-
-
- if (empty($_POST['vorname']) || empty($_POST['nachname']) || empty($_POST['email']) || empty($_POST['phone1'])) {
-
- $messages_error[] = 'Bitte Formular vollständig ausfüllen.';
- }
-
- if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
- $messages_error[] = 'Bitte E-Mail-Adresse prüfen.';
- }
- if (empty($messages_error)) {
-
- $stmt = $pdo->prepare('UPDATE accounts SET id = ?, password = ?, email = ?, activation_code = ?,
- rememberme = ?, role = ?, title = ?, vorname = ?, nachname = ?, str = ?, snr = ?, plz = ?, ort = ?, phone1 = ?, created = ? WHERE id = ?');
- $stmt->execute([$id, $password, $email, $activation_code, $rememberme, $role, $title, $vorname, $nachname, $str, $snr, $plz, $ort, $phone1, $created, $_GET['id']]);
- $messages[] = 'Datensatz ist gespeichert';
- }
- }
-
- $stmt = $pdo->prepare('SELECT id, password, email, activation_code, rememberme, role, title, vorname, nachname, str, snr, plz, ort, phone1, created FROM accounts WHERE id = ?');
- $stmt->execute([$_GET['id']]);
- $account = $stmt->fetch(PDO::FETCH_ASSOC);
-
- if (!$account) {
- exit('Kein Kontakt mit dieser id');
- }
- }
- else {
- exit('No ID specified!');
- }
- ?>
- <?=template_header('Update')?>
- <div class="content update">
- <h2>Kontakt ändern</h2>
- <h3><?=$account['nachname']?></h3>
-
- <form action="update.php?id=<?=$account['id']?>" method="post">
-
- <div class="tabelle">
- <label style="display:none" for="id">ID</label>
- <input style="display:none" type="text" name="id" placeholder="" value="<?=$account['id']?>" id="id">
- <label style="display:none" for="created">Created</label><br>
- <input style="display:none" type="datetime-local" name="created" value="<?=date('Y-m-d\TH:i', strtotime($account['created']))?>" id="created">
- <div class="fl">
- <label for="title">Anrede</label><br>
- <input type="text" name="title" value="<?php echo isset($account['title']) ? htmlspecialchars($account['title']) : ''; ?>" /> <!-- $account, weil bei update müssen die bestehenden Felddaten angezeigt werden -->
- </div>
- <div class="fl">
- <label for="vorname">Vorname</label><br>
- <input type="text" name="vorname" value="<?php echo isset($account['vorname']) ? htmlspecialchars($account['vorname']) : ''; ?>" />
- </div>
- <div class="fl">
- <label for="nachname">Nachname</label><br>
- <input type="text" name="nachname" value="<?php echo isset($account['nachname']) ? htmlspecialchars($account['nachname']) : ''; ?>" />
- </div>
- <div class="fl">
- <label for="str">Strasse</label><br>
- <input type="text" name="str" value="<?php echo isset($account['str']) ? htmlspecialchars($account['str']) : ''; ?>" />
- </div>
- <div class="fl">
- <label for="snr">Nummer</label><br>
- <input type="text" name="snr" value="<?php echo isset($account['snr']) ? htmlspecialchars($account['snr']) : ''; ?>" />
- </div>
- <div class="fl">
- <label for="plz">PLZ</label><br>
- <input type="text" name="plz" value="<?php echo isset($account['plz']) ? htmlspecialchars($account['plz']) : ''; ?>" />
- </div>
- <div class="fl">
- <label for="ort">Ort</label><br>
- <input type="text" name="ort" value="<?php echo isset($account['ort']) ? htmlspecialchars($account['ort']) : ''; ?>" />
- </div>
- <div class="fl">
- <label for="email">Email</label><br>
- <input type="text" name="email" value="<?php echo isset($account['email']) ? htmlspecialchars($account['email']) : ''; ?>" />
- </div>
- <div class="fl">
- <label for="phone1">Telefon P</label><br>
- <input type="text" name="phone1" value="<?php echo isset($account['phone1']) ? htmlspecialchars($account['phone1']) : ''; ?>" />
- </div>
- <div class="fl">
- <input type="submit" value="Sichern">
- <?php
-
- echo '<div class="messages_error">';
- foreach($messages_error as $message) {
- echo '<p>'.htmlspecialchars($message).'</p>';
- }
- echo '</div>'; ?>
-
- <?php
-
- echo '<div class="messages">';
- foreach($messages as $message)
- {
- echo '<p>'.htmlspecialchars($message).'</p>';
- }
- echo '</div>'; ?>
- </div>
- </div>
- </form>
-
- </div>
- <?=template_footer()?>
Alles anzeigen