Top-Themen

Aktuelle Themen (A bis Z)

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

Mitglied: Bierkistenschlepper

Bierkistenschlepper (Level 2) - Jetzt verbinden

27.05.2009, aktualisiert 12:46 Uhr, 8451 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 ..
Ähnliche Inhalte
Batch & Shell

Datenübernahme von sehr langen Texten aus Datenbank

gelöst Frage von 0belixxBatch & Shell1 Kommentar

Hallo Leute, ich brauche mal eine Idee. Ich muss sehr lange Texte aus eine Dantebank auslesen und sie per ...

Microsoft

Dokument Text erkennen und Zahl aus Datenbank schreiben

gelöst Frage von Questionmark93Microsoft5 Kommentare

Hey Community, ich hätte da eine Frage: ich bekomme jeden Monat 100te von Abrechnungen (halbseitig)und muss darauf die von ...

C und C++

C Sharp Text-Datenbank einer Software auslesen und beschreiben, aber wie?

Frage von icegetC und C++4 Kommentare

Hallo liebe Community, habe folgendes Problem: Ich muss für ein älteres Programm (Windows XP) eine Datenbank auslesen sowie in ...

Datenbanken

Datenbanken

Frage von MahsaaDatenbanken1 Kommentar

Hallo , ich habe folgende Abfrage und möchte ich jetzt die Summe aller Summenfelder abbilden. wie kann ich machen? ...

Neue Wissensbeiträge
Windows 10

USB Maus und Tastatur versagen Dienst unter Windows 10

Erfahrungsbericht von hardykopff vor 1 TagWindows 105 Kommentare

Da steht man ziemlich dumm da, wenn der PC sich wegen fehlender USB Tastatur und Maus nicht bedienen lässt. ...

Administrator.de Feedback
Update der Seite: Alles zentriert
Information von Frank vor 1 TagAdministrator.de Feedback18 Kommentare

Hallo User, die größte Änderung von Release 5.8 ist das Zentrieren der Webseite (auf großen Bildschirmen) und ein "Welcome"-Teaser ...

Humor (lol)

WhatsApp-Nachrichten endlich auch per Bluetooth versendbar

Information von BassFishFox vor 1 TagHumor (lol)4 Kommentare

Genau darauf habe ich gewartet! ;-) Der beliebte Messaging-Dienst WhatsApp erhält eine praktische neue Funktion: Ab dem nächsten Update ...

Google Android

Googles "Android Enterprise Recommended" für Unternehmen

Information von kgborn vor 2 TagenGoogle Android3 Kommentare

Hier eine Information, die für Administratoren und Verantwortliche in Unternehmen, die für die Beschaffung und das Rollout von Android-Geräten ...

Heiß diskutierte Inhalte
Windows Netzwerk
WSUS4 und Windows 10 Updates automatisch installieren
Frage von sammy65Windows Netzwerk15 Kommentare

Hallo miteinander, ich habe mit einen neuen WSUS Server aufgesetzt Server 2016 darauf einen aktuellen WSUS. Grund, wir stellen ...

Speicherkarten
Vergessliche USB-Sticks?
Frage von hanheikSpeicherkarten14 Kommentare

Ich habe in den letzten Tagen 500 USB-Sticks mit Bilddateien bespielt. Obwohl ich die Dateien mit größter Sorgfalt kopiert ...

Windows Server
NTFS Berechtigungen Ordnerstruktur
Frage von hukahu23489Windows Server11 Kommentare

Hallo, ich bin seit kurzem in einer neuen IT-Abteilung und bin über das Berechtigungskonzept des Unternehmens sehr schockiert. Ich ...

Hyper-V
Hyper-V mit altem XEON-Server. Was ist falsch?
Frage von LollipopHyper-V11 Kommentare

Hallo Bin etwas frustriert. Kleinbetrieb, ca. 15 PC's, 2 Stk. Server mit einigen virtuellen PC's für Fernwartung, VaultServer für ...