• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

löschen und updaten

Jeremygolf

Mitglied
Hallo, kann mein einem php script eine art ID geben.
Sodass ich auf auf einer Seite ein Bild löschen kann oder bearbeiten.
Wenn ich also auf Bearbeiten drücke soll er das Script zum bearbeiten ausführen.
Und wenn ich auf löschen drücke Soll er das Script zum löschen nehmen.

Danke
 
Etwas Code zur Demonstration:

PHP:
<?php

/*******************************************************************************
 * Hilfsfunktion für HTML-Ausgabe
 */

/**
 * Assembles an internal URL
 *
 * @param array $queryPart
 * @return string The assembled URL
 */
function u($queryPart = array())
{
    $baseUrl = './'. basename(__FILE__);

    $url = $baseUrl;

    if (count($queryPart) > 0) {
        $url .= '?' . http_build_query($queryPart);
    }

    return $url;
}

/**
 * Escapes a string for HTML output
 *
 * @param string $s
 * @return string
 */
function e($s)
{
    return htmlspecialchars($s, ENT_QUOTES, 'UTF-8');
}

/*******************************************************************************
 * Funktionen zur Kommunikation mit der Stelle, die die Daten hält
 * (etwa Datenbank)
 */

function model_getAllEntries()
{
    // Demo-Daten
    $data = array();

    $data[] = array(
        'id' => '2',
        'content' => 'Hallo Welt',
    );

    $data[] = array(
        'id' => '4',
        'content' => 'Test',
    );

    $data[] = array(
        'id' => '3',
        'content' => 'Ein anderer Test',
    );

    return $data;
}

function model_getEntryById($id)
{
    $id = (string) $id;
    $data = model_getAllEntries();

    foreach ($data as $entry) {
        if ($entry['id'] === $id) {
            return $entry;
        }
    }

    return null;
}

function model_deleteEntry($id)
{
    // Nicht implementiert
}

function model_updateEntry($id, $content)
{
    // Nicht implementiert
}

/*******************************************************************************
 * Grundlegende Einstellungen
 */

error_reporting(-1);
ini_set('display_errors', 1);

/*******************************************************************************
 * Ermittelt die ausgelöste Aktion
 */

$action = 'index';

if (isset($_GET['action'])) {
    $action = (string) $_GET['action'];
}

if (isset($_POST['action'])) {
    $action = (string) $_GET['action'];
}

/*******************************************************************************
 * Führt ausgelöste Aktion aus und trägt etwaige Werte für die Ausgabe in $tpl
 * ein
 */

$tpl = array();

switch ($action) {
    /* "Startseite". Zeigt Liste aller Einträge */
    case 'index':
        if ($_SERVER['REQUEST_METHOD'] !== 'GET') {
            die('Error. Wrong request method');
        }
        $data = model_getAllEntries();
        $tpl['data'] = $data;
        break;

    /* Zeigt Bestätigungs-Dialog, ob Eintrag gelöscht werden soll */
    case 'delete_confirm':
        if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
            die('Error. Wrong request method');
        }
        $id = $_POST['id'];
        $tpl['id'] = $id;
        break;

    /* Löscht Eintrag */
    case 'delete_perform':
        if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
            die('Error. Wrong request method');
        }
        $id = $_POST['id'];
        model_deleteEntry($id);
        $tpl['id'] = $id;
        break;

    /* Zeigt Formular, mit dem Daten des Eintrags geändert werden können */
    case 'update_edit':
        if ($_SERVER['REQUEST_METHOD'] !== 'GET') {
            die('Error. Wrong request method');
        }
        $id = $_GET['id'];
        $entry = model_getEntryById($id);
        $tpl['id'] = $id;
        $tpl['content'] = $entry['content'];
        break;

    /* Speichert veränderte Daten eines Eintrags */
    case 'update_perform':
        if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
            die('Error. Wrong request method');
        }
        $id = $_POST['id'];
        $content = $_POST['content'];
        model_updateEntry($id, $content);
        $tpl['id'] = $id;
        $tpl['content'] = $content;
        break;

    /* Unbekannte Action, Fehler */
    default:
        die(sprintf('Unknown action: "%s"', $action));
        break;
}

$tpl['action'] = $action;

header('Content-Type: text/html; charset=UTF-8');

/*******************************************************************************
 * Ausgabe, von Verarbeitung getrennt
 *
 * Ab hier nur noch auf Werte in $tpl zugreifen und nur noch die Hilfsfunktion
 * e() und u() nutzen
 */

?><!DOCTYPE html>

<html lang="en">

    <head>
        <meta charset="UTF-8" />
        <title>Mein Projekt</title>
        <style>
        /*<![CDATA[*/
        body {
            font-size: 0.8em;
        }

        .main-content {
            font-size: 1.5em;
            padding: 30px;
        }
        /*]]>*/
        </style>
    </head>

    <body>

        <!-- Dieser Code erscheint immer oben auf der Seite: -->

        <h1>Mein Projekt</h1>
        <p><a href="<?php echo e(u(array('action' => 'index'))); ?>">Zur Index-Seite</a></p>
        <hr />

        <div class="main-content">

        <!-- Dieser Code hängt von der ausgewählten Aktion ab: -->

        <?php if ($tpl['action'] === 'index') : ?>

            <ul>
            <?php foreach ($tpl['data'] as $data) : ?>
                <li>
                    <form method="post" action="<?php echo e(u(array('action' => 'delete_confirm'))) ?>">
                        <p>
                        ID: <?php echo e($data['id']); ?>,
                        Content: <?php echo e($data['content']); ?>
                        <a href="<?php echo e(u(array('action' => 'update_edit', 'id' => $data['id']))); ?>">bearbeiten</a>
                        <input type="hidden" name="id" value="<?php echo e($data['id']); ?>" />
                        <input type="submit" value="Löschen" />
                        </p>
                    </form>
                </li>
            <?php endforeach; ?>
            </ul>

        <?php elseif ($tpl['action'] === 'delete_confirm') : ?>

            <p>Möchten Sie den Eintrag mit der ID <?php echo e($tpl['id']); ?> wirklich löschen?</p>

            <form method="post" action="<?php echo e(u(array('action' => 'delete_perform'))); ?>"
                <p>
                    <input type="hidden" name="id" value="<?php echo e($tpl['id']); ?>" />
                    <input type="submit" value="Ja, löschen" />
                    <a href="<?php echo e(u(array('action' => 'index'))); ?>">Nein, zurück</a>
                </p>
            </form>

        <?php elseif ($tpl['action'] === 'delete_perform') : ?>

            <p>Eintrag mit der ID <?php echo e($tpl['id']); ?> gelöscht (*nicht implementiert*).</p>

            <p><a href="<?php echo e(u(array('action' => 'index'))); ?>">Zurück</a></p>

        <?php elseif ($tpl['action'] === 'update_edit') : ?>

            <p>Beitrag mit ID <?php echo e($tpl['id']); ?> bearbeiten:</p>

            <form method="post" action="<?php echo e(u(array('action' => 'update_perform'))); ?>"
                <p>
                    Content: <input type="text" name="content" value="<?php echo e($tpl['content']); ?>" />
                </p>
                <p>
                    <input type="hidden" name="id" value="<?php echo e($tpl['id']); ?>" />
                    <input type="submit" value="Speichern" />
                    <a href="<?php echo e(u(array('action' => 'index'))); ?>">Zurück</a>
                </p>
            </form>

        <?php elseif ($tpl['action'] === 'update_perform') : ?>

            <p>Beitrag mit ID <?php echo e($tpl['id']); ?> bearbeitet (*nicht implementiert*):</p>

            <p>Content: <?php echo e($tpl['content']); ?></p>

            <p><a href="<?php echo e(u(array('action' => 'index'))); ?>">Zurück</a></p>

        <?php endif; ?>

        <!-- Dieser Code erscheint immer unten auf der Seite: -->

        </div>

        <hr />
        <p>Mein Projekt, 2012. Die gerade ausgeführte Aktion: <code><?php echo e($tpl['action']); ?></code></p>
        <p>
            Requests, die per POST abgeschickt werden, werden per Konvention über einen Button ausgelöst.<br />
            Requests, die per GET abgeschickt werden, werden per Konvention über einen Link ausgelöst.
        </p>

        <p>Was fehlt? Siehe Kommentare im Code. Außerdem:</p>
        <ol>
            <li>
                Eingaben werden nicht validiert. Es wird beispielsweise nicht sichergestellt,
                dass <code>$_POST['id']</code> oder <code>$_POST['content']</code> wirklich gesetzt sind.
                Das müsste zu Fehlern führen.
            </li>

            <li>
                Die Bestätigungsseiten könnten per Weiterleitung (per <code>header()</code> oder per Meta-Refresh)
                automatisch auf die <code>index</code>-Aktion umgeleitet werden.
            </li>

            <li>
                Statt <code>die()</code> aufzurufen, sollte zum Beispiel eine Template-Variable <code>$tpl['errors']</code>
                auf einen Fehlerwert gesetzt werden. Dann könnten Fehler auch sauber im HTML-Rahmencode angezeigt werden.
            </li>

            <li>
                Die Funktionen mit <code>model</code>-Präfix sollten in einer Klasse stehen.
            </li>

            <li>
                In <code>model_getEntryById()</code> erst alle Einträge zu holen und dann zu filtern,
                ist natürlich nicht effizient.
            </li>
        </ol>

    </body>

</html>
 
Zurück
Oben