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

Script speichert Datenbank-Einträge nicht...

Timmer

Mitglied
Hey, ich habe das Problem, dass meine Datenbank Einträge nicht gespeichert werden. Ich kann die Daten abrufen und ausgeben, wenn ich sie jedoch ändern will, dann werden die Einträge gelöscht...

PHP:
<?php

    $zeile = mysql_query('SELECT * FROM home');
    while($row = mysql_fetch_object($zeile)){
        $headline = $row->headline;
        $text = $row->text;
    }
    
    if($_GET['action'] == 'send'){
        
        $save = mysql_query('UPDATE home SET headline="' . $_POST["headline"] . '", text="' . $_POST["text"] . '"');
        
        if($save == true){
            
            echo 'Inhalt wurde erfolgreich ge&auml;ndert.';
            
        } else {
            
            echo 'Es ist ein Problem aufgetreten.';
            
        }
        
    } elseif($_GET['action'] == 'edit') {
        
        echo '<form action="index.php?site=home&action=send" method="post">';
        echo '<input type="text" id="headline" value="' . $headline . '"/>';
        echo '<textarea id="text">' . $text . '</textarea><br />';
        echo '<input type="submit" value="Speichern">';
        echo '</form>';
        
    } else {
        
        echo '<br /><p>&Uuml;berschrift:</p><p class="inhalt"> ' . $headline . '</p><br />';
        echo '<p>Inhalt:</p><div class="inhalt">' . $text . '</div><br /><br />';
        echo '<a href="index.php?site=home&action=edit">&Auml;ndern</a>';
        
    }

?>
Zur Erklärung: Alles befindet sich auf einer Seite, es wird aber immer nur ein Teil abgerufen ($_GET['action']). Erst kommt man auf eine Seite, wo man sieht, was auf der jeweiligen Seite steht. Klickt man auf "Ändern", kommt man auf die Seite zum Bearbeiten. Bis dahin funktioniert alles einwandfrei. Ändert man den Text und drückt dann Speichern, erscheint statt einer Fehlermeldung oder sowas eine weiße Seite... Wenn man dann wieder auf die normale Seite geht, sind die Daten gelöscht.

Die Seite wird über eine index.php includiert, deswegen fehlen hier z.B. MySQL Daten und ähnliches ^^

Hat jemand nen Tipp für mich? Was hab ich falsch gemacht? Hab auch mein PHP/MySQL Buch zur Hand genommen, aber das hat auch nicht wirklich geholfen.

Timmäh!
 
Werbung:
Hallo Timmer,

ich denke du hast ein Flüchtigkeitsfehler in deinem Formular Skript gemacht. Und zwar werden Elemente wie $_POST["XYZ"] über das HTML Attribut "name" gesetzt und nicht wie in deinem Fall über "id".

Das heißt, du müsstest nur dein Formular dementsprechend anpassen und das Problem wäre behoben.

Wie gesagt du speicherst momentan Werte aus einer nicht existierenden Variable. Und das bedeutet du speichert nichts.

Noch ein Tipp am Rande: Wenn du Skripte testest, würde ich zu Anfang immer ein error_reporting(E_ALL) einfügen um vorab Fehler zu erkennen.

Liebe Grüße Mr. Value
 
Äh ja, danke... Blöd xD Jetzt funktioniert fast alles, wie es soll :p

Frage am Rande, hat jemand ne gute Lösung, wie ich aus nem Text alle Umlaute, ß, Zeilenumbrüche, usw. in HTML umwandle?
 
Zuletzt bearbeitet:
Werbung:
Hallo Timmer,

Die einfachste Lösung wäre wohl mit str_replace zu arbeiten, das sähe dann z.b. so aus:

PHP:
<?php

/* Text Variable bestimmen */
$textvariable = "Über ein Haus werden verschiedene Häuser betrieben & geröstet.";

/* Umlaute HTML - fähig machen */
$textvariable = str_replace("ä", "&auml;", $textvariable);
$textvariable = str_replace("ü", "&uuml;", $textvariable);
$textvariable = str_replace("ö", "&ouml;", $textvariable);
$textvariable = str_replace("ß", "&szlig;", $textvariable);

/* Ausgabe */
echo $textvariable;

?>
Die Funktion ersetzt alle Vorkommen des 1. Parameters durch den 2. Parameter. Der dritte Parameter gibt an, in welchem String die Vorkommenden Strings ersetzt werden sollen. Die Funktion arbeitet unabhängig von Groß/Klein Schreibung, falls du die Funktion suchst, die mit jeweils nur Groß oder Klein suchst, ist folgende: str_ireplace().

Liebe Grüße Mr. Value
 
Timmer schrieb:
Frage am Rande, hat jemand ne gute Lösung, wie ich aus nem Text alle Umlaute, ß, Zeilenumbrüche, usw. in HTML umwandle?

Umlaute, sonstige "Sonderzeichen" (Nicht-ASCII-Zeichen) und Zeilenumbrüche:

PHP:
<?php // Encoding dieser Datei: UTF-8

/* Text Variable bestimmen */
$textvariable = "Über ein Haus werden verschiedene Häuser

betrieben & geröstet.";

// Sonderzeichen durch HTML-Entities ersetzen
$textvariable = htmlentities($textvariable, ENT_QUOTES, 'UTF-8');

// Zeilenumbrüche durch <br /> ersetzen
$textvariable = nl2br($textvariable);

/* Ausgabe */
echo $textvariable;

Der erste Schritt ist aber unnötig, wenn du deine Dateien in einem Charset auslieferst, das Sonderzeichen unterstützt (höchstwahrscheinlich tust du das bereits; am besten wäre aber UTF-8).

Das Charset lässt sich unter anderem per header-Anweisung setzen (vor der ersten Ausgabe):

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

Das tatsächliche Charset, in dem eine Seite ausgeliefert wird, kannst du etwa im Firefox ermitteln, indem du im Kontextmenü einer Seite "View Page Info" aufrufst (dort unter "Encoding").

- Mehr Infos auch hier: http://www.html.de/html-und-xhtml/3...encodierung-dateiformate-unterschiedlich.html

Obwohl ich sage, dass der Einsatz von htmlentities unnötig ist, müssen gewisse Zeichen bei der Ausgabe escapet werden, um XSS-Attacken zu verhindern. Dazu dient die Funktion htmlspecialchars.

- Cross-Site Scripting
- PHP: htmlspecialchars - Manual
 
Danke, wirklich sehr hilfreich (obwohl ich den Beispielsatz nicht verstehe xD) :D

[EDIT]

Ach ja, ich setze mein Charset bisher über den Meta-Tag, bisher wars "ISO-8859-1" xD
 
Werbung:
Zurück
Oben