Hallo zusammen,
ich habe ein Formular, das als Mini-CMS dient erstellt. Die Einträge werden in einer DB gespeichert und auf einer anderen Seite ausgegeben. Jetzt habe ich das Problem, dass Sonderzeichen wie z.B. ’ einen Fehler verursachen und der Eintrag des entsprechenden Feldes in der DB leer bleibt.
Hier die Verarbeitung:
[PHP]<?php
include ‚config.inc.php‘;
$msg = ‚‘; // variable for errors & success info
/* BEITRAG ÄNDERN */
if ( isset( $_POST[ ‚change‘ ] ) && is_numeric( $_POST[ ‚n_ID‘ ] ) ) {
$the_date = htmlspecialchars( $_POST[ ‚datum‘ ] );
$the_headline = htmlspecialchars( $_POST[ ‚kopfzeile‘ ] );
$the_text = htmlspecialchars( $_POST[ ‚text‘ ] );
if ( !$msg ) {
$sql = 'UPDATE `news` SET
datum = \'' . $the_date . '\',
kopfzeile = \'' . $the_headline . '\',
text = \'' . $the_text . '\'
WHERE
n_ID = \'' . $_POST[ 'n_ID' ] . '\'';
$run = $db->query( $sql );
if ( $run ) {
$msg .= '<strong>News wurden aktualisiert.</strong>';
} else {
$msg .= '<strong>Fehler beim Aktualisieren der News!</strong>';
}
}
}
/* NEUER BEITRAG */
if ( isset( $_POST[ ‚new‘ ] ) ) {
$the_date = htmlspecialchars( $_POST[ ‚datum‘ ] );
$the_headline = htmlspecialchars( $_POST[ ‚kopfzeile‘ ] );
$the_text = htmlspecialchars( $_POST[ ‚text‘ ] );
$sql = 'INSERT INTO news SET
datum = \'' . $the_date . '\',
kopfzeile = \'' . $the_headline . '\',
text = \'' . $the_text . '\'';
if ( !$msg ) {
$run = $db->query( $sql );
if ( $run ) {
$msg .= '<strong>Neue Mitteilung veröffentlicht.</strong>';
} else {
$msg .= '<strong>Fehler beim Veröffentlichen.</strong>';
}
}
}
?>[/PHP]
Mein Ansatz war, das „htmlspecialschars“ durch „mysqli_real_escape_string“ oder dergleichen zu ersetzen, doch auch das schafft keine Abhilfe. Die Datenbank an sich ist UTF-8 codiert, die textfelder haben die Kollation „utf8_unicode_ci“ und sind vom Typ „text“ bzw. „varchar“ habe ich auch schon getestet.
Kenne mich leider noch nicht sehr mit PHP und MySQL aus und auch das durchforsten sämtlicher Foren und Manuals hat mich bisher nicht weiter gebracht. Ich hoffe jemand kann mir weiterhelfen, was ich korrigieren muss, damit Sonderzeichen korrekt in die Datenbank geschrieben werden (und dann wieder ausgegeben).
Vielen Dank für eure Hilfe!
curved