Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Text in Datenbanken

Frage Entwicklung Datenbanken

Mitglied: Bierkistenschlepper

Bierkistenschlepper (Level 2) - Jetzt verbinden

27.05.2009, aktualisiert 12:46 Uhr, 8168 Aufrufe, 16 Kommentare

Hallo,

ich möchte in meiner MySQL Datenbank einen (längeren) Text speichern. Es handelt sich dabei um Gästebucheinträge und die Beschreibungen für Events. Ich habe dazu den Typ TEXT verwendet. Problem ist jetzt:

Umlaute
auf der Webseite erscheint z.B. das ö durch eine schwarze Raute ersetzt. Da man hier sehr viel rumprobieren kann ohne ein Ergebnis zu erhalten, frage ich mal lieber die Profis Der Text wurde jetzt erstmal direkt in die DB eingegeben und die DB ist UTF8 kodiert.

Zeilenumbrüche
Der Text wird in der Datenbank zwar mit Umbrüchen gespeichert, durch PHP aber offenbar ohne Umbrüche ausgegeben. Wie erreiche ich, dass die Umbrüche da bleiben ? Oder muss ich das händisch machen, indem ich nach einem \n im String suche und dann durt ein </p><p> einfüge?
Mitglied: godlie
27.05.2009 um 12:50 Uhr
Hallo,

Also du hast im groben 2 Probleme:

1. Umlaute:
hier heist die Lösung wahl des richtigen Charsets. Wahrscheinlich wird deine Webseite in Latin-9 ausgegeben. Probiers mal mit UTF-8 als Charset bei der Website.
Eventuell hast du ein Problem mit der Datenbankanbindung, such hierzu mal nach php+mysql+umlaute da gibs massig Ergebnisse.

2. Zeilenumbrüche
Jag den gesamten text mal durch ein
01.
$text = nl2br($text);
Bitte warten ..
Mitglied: Bierkistenschlepper
27.05.2009 um 13:05 Uhr
DAs erste Problem habe ich gerade mit htmlentities gelöst.

Ich weiß allerdings nicht, ob das die normale Lösung ist, denn es erscheint mir doch etwas umständlich, bei jedem Textfeld diese Funktion aufzurufen...

Die Spalten der Tabelle haben die Kollation utf8_general_ci (vorher hatten die irgendwas mit Latin...)
Wenn ich oben in meine PHP-Datei ein <?xml version="1.0" encoding="UTF-8" ?> einfüge, dann kommt
Parse error: parse error in C:\xampp\htdocs\stammtisch\termine.php on line 1

Das 2. hat natürlich einwandfrei geklappt
Bitte warten ..
Mitglied: godlie
27.05.2009 um 13:12 Uhr
Naja wie wärs wenn du beim speichern in die DB ein html_entity_decode(). verwendest?
Bitte warten ..
Mitglied: Bierkistenschlepper
27.05.2009 um 13:17 Uhr
Ok, das könnte ich noch probieren. Der obige Text war ja direkt in die DB geschrieben...
Bitte warten ..
Mitglied: dog
27.05.2009 um 23:00 Uhr
Aaaaaalso...

Du beachtest den Zeichensatz zu wenig.
Dieser muss komplett durchgängig sein von PHP zur DB und Zurück.

D.h.
PHP Seiten in UTF-8 ausgeben:
01.
header("Content-type: text/hmtl;Charset=UTF-8");
Formulare in UTF-8 anfragen:
01.
<form [...] accept-charset="utf-8">
Die DB-Verbindung in UTF-8 benutzen:
01.
mysql_query('SET NAMES `utf8`');
Und Anstatt htmlentities() htmlspechialchars() verwenden, mehr macht bei UTF-8 keinen Sinn.

Die Spalten der Tabelle haben die Kollation utf8_general_ci (vorher hatten die irgendwas mit Latin...)
Wenn ich oben in meine PHP-Datei ein <?xml version="1.0" encoding="UTF-8" ?> einfüge, dann kommt
Parse error: parse error in C:\xampp\htdocs\stammtisch\termine.php on line 1

A) Schreibst du HTML oder XHTML? Bei Ersteren hätte ein <?xml nichts zu suchen...
b) Die Fehlermeldung ist ein Hinweis darauf, dass in deiner PHP-Installation unnötigerweise short_open_tags aktiv sind - Am Besten ganz schnell deaktivieren

Ich weiß allerdings nicht, ob das die normale Lösung ist, denn es erscheint mir doch etwas umständlich, bei jedem Textfeld diese Funktion aufzurufen...

Du brauchst unbedingt entweder bei der Ein- oder Ausgabe htmlspechialchars(), ansonsten hast du eine prima XSS-Lücke gebastelt: http://de.wikipedia.org/wiki/Cross-Site_Scripting

Grüße

Max
Bitte warten ..
Mitglied: Bierkistenschlepper
28.05.2009 um 07:51 Uhr
Vielen Dank für die ausführliche Erklärung

Ich programmiere in XHTML. Deswegen kann ich mir die Fehlermeldung nicht ganz erklären. Aber UTF-8 wird ja ohnehin als Standard angenommen, wenn die Angabe fehlt.

Wie ich bei der PHP Installation auf dem Server irgendwas einstellen soll weiß ich nicht. Da muss vermutlich der Kundendienst ran.
Bitte warten ..
Mitglied: Bierkistenschlepper
29.05.2009 um 10:51 Uhr
Ich dachte bisher ich muss bei der Eingabe html_entity_decode machen. Was ist denn nun richtig?
Bitte warten ..
Mitglied: dog
29.05.2009 um 14:18 Uhr
Die html_entity-Funktionen haben einen Sinn: HTML-Steuerzeichen umwandeln.

Bei der Eingabe ein decode zu benutzen macht keinen Sinn, weil ein User ja allerhöchstens Steuerzeichen wie "<" direkt eingeben wird, aber nicht "&lt;" - in der Hoffnung, dass daraus ein "<" wird.

Umgekehrt hingegen ist ein encode bei der Ausgabe ein absolutes Muss.
Sonst könnte ein Benutzer in ein Formularfeld z.B. einfach "<script>alert("Hallo");</alert>" eingeben und das für so in die Seite eingefügt und auch vom Browser ausgeführt.

Nur html_entities_encode() oder htmlspechialchars() umgehen dieser Problem, indem sie Steuerzeichen wie "<" in andere Steuerzeichen umwandeln, die allerdings einfach in der Anzeige und ich der Verarbeitung enden.

Grüße

Max
Bitte warten ..
Mitglied: Bierkistenschlepper
07.06.2009 um 14:39 Uhr
Ich hätte nochmal ne kleine Frage: Ich will en Gästebuch machen und sehe mich vor das Problem gestellt, dass beim Reload der Seite immer wieder ein neuer Eintrag angelegt wird. Wir verhindere ich das denn am besten?

Textfeld auf Unique setzen geht nicht. Timestamp ebenfalls nicht, da der ja automatisch neuberechnet wird.

Das einzige was mir einfällt wäre: Alle Einträge abrufen und gucken ob der Eintrag schon dabei ist. Besonders effizient dürfte das allerdings nicht sein.
Bitte warten ..
Mitglied: dog
07.06.2009 um 16:25 Uhr
Normalerweise baut man Formulare so auf:

01.
<?php 
02.
	if(isset($_POST['submit']) { 
03.
		 
04.
		header("Location: gaestebuch.php"); 
05.
06.
?> 
07.
 
08.
<form action="" method="post"
09.
	<input type="submit" name="submit" value="Hinzufügen" /> 
10.
</form>
Und da sollte es dann auch keine Probleme mit Reloads geben.
Bitte warten ..
Mitglied: Bierkistenschlepper
07.06.2009 um 17:17 Uhr
Was genau macht denn dabei die Funktion header? Was dazu bei php.net steht ist mir leider mehr als unklar. Ich nutzt nämlich sehr viel include und dabei gab es nie irgendwelche Probleme... Ich nehme an der Befehl sorgt hier nur dafür, dass eine HTTP-Sitzung aufgebaut wird? Und Gästebuch.php ist bei dir dann die Datei, welche die Eingaben auch verarbeitet?
Ich habe bis jetzt nur die folgende Abfrage

if ('POST' == $_SERVER['REQUEST_METHOD']) {
if (!isset($_POST['autor'], $_POST['inhalt'], $_POST['antwort'], $_POST['stadt'], $_POST['formaction'])){
die ('Benutze nur Formulare von der Homepage.');
}
if (('' == $autor = trim($_POST['autor'])) or
('' == $inhalt = trim($_POST['inhalt'])) or
('' == $antwort = trim($_POST['antwort']))) {
die ('Bitte fülle das Formular vollständig aus.');
}

Wobei formaction der Name des Submitbuttons ist.
Bitte warten ..
Mitglied: dog
08.06.2009 um 18:36 Uhr
Was genau macht denn dabei die Funktion header?

Mach dich doch erstmal mit dem HTTP-Protokoll vertraut.
http://de.wikipedia.org/wiki/HTTP
http://bolege.de/http-header/#art3_location

Die header()-Funktion löst nur ein spezifisches Problem:
dass beim Reload der Seite immer wieder ein neuer Eintrag angelegt wird

Den Code den du gepostet hast müsste in mein Beispiel in Zeile 3 eingefügt werden.

Grüße

Max
Bitte warten ..
Mitglied: Bierkistenschlepper
09.06.2009 um 22:19 Uhr
Hallo, und nochmals ein Problem

Ich kann problemlos "äüöß" in mein Forumlar schreiben. Alles wird richtig ausgegeben.

Ein Freund kann das nicht, bei ihm steht statt "äüöß" dann da "??". Es werden also nicht nur Zeichen falsch kodiert, sondern auch gelöscht. Hat jemand ne Ahnung woran das liegt?

Er verwendet Firefox und XP und ich Opera und Vista.. Ich verwende utf8_decode.
Bitte warten ..
Mitglied: dog
10.06.2009 um 02:40 Uhr
Lies dir doch bitte mal den Artikel genau durch:

http://www.joelonsoftware.com/articles/Unicode.html

Danach machen wir dann hier weiter

Grüße

Max
Bitte warten ..
Mitglied: Bierkistenschlepper
27.07.2009 um 09:54 Uhr
So, mein Problem scheint sich nicht so einfach zu lösen.

es geht um folgende Seite: www.shstammtisch.de

Wenn ich äüöß in das GB schreibe klappt alles. Bei den anderen wird immer ein ? darauf. Woran liegt das wieder? das Formular akzeptiert nun UTF-8; In der DB steht das ? auch schon

Vor dem einfügen werden folgende Sachen gemacht:
$inhalt = utf8_decode(trim($_POST['inhalt'])
$badwords=array('sex', 'arsch', 'drop', 'delete', 'function');
$inhalt = str_ireplace($badwords, '*', $inhalt);

Wieso geht es bei mir und bei anderen nicht?

Ich nutze den Opera, und wenn ich den IE nutze gibt es bei mir auch in den Feldern Inhalt und Autor die Fragezeichen, im FEld Wohnort aber seltsamerweise nicht???


Edit: Offenbar war die Funktion utf8_decode() zusammen mit trim() schuld. Warum, das kann ich nicht ganz nachvollziehen.
Bitte warten ..
Mitglied: Bierkistenschlepper
27.07.2009 um 13:55 Uhr
Der Firefox macht jetzt noch seltsamere Sachen.
äüößäüöÃ
kommt raus, wenn man äüöß eingibt.

Kann mir bitte mal jemand sagen woran das liegt? Der Fehler tritt erst dann auf, wenn ich in der DB gespeichert habe. Das Feld in der DB ist aber ebenfalls utf8_general_ci

Im IE und Opera funktioniert es jetzt problemlos.

Es kann doch eigentlich nicht sein, dass das so schwierig ist in allen Browsern ein gleiches Verhalten zu erreichen.

WAs mir noch aufgefallen ist: Gebe ich das an
<?xml version="1.0" encoding="UTF-8"?>
Wird die Seite überhaupt nicht mehr angezeigt.

Ich glaube das Problem ist folgende Zeile
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">

der Opera zeigt nur mit ihr alles richtig an, der Firefox scheint sie nicht zu mögen und ignoriert sie
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Microsoft Office
gelöst Wie kann man die Standard-Schriftart bei einfügen von Text in Word 2013 festlegen? (3)

Frage von Rene1976 zum Thema Microsoft Office ...

Backup
gelöst Symantec Backup Exec 2015: Fehler beim Sichern der Exchange-Datenbanken (4)

Frage von 10TechFlo64 zum Thema Backup ...

VB for Applications
gelöst VBA Text mit Format übertragen und Zeichen ergänzen (11)

Frage von Dau12345 zum Thema VB for Applications ...

Heiß diskutierte Inhalte
Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (9)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...