SQL Formatierung in Datenbank einlesen und ausgeben

raven16

Lieutenant
Dabei seit
Nov. 2008
Beiträge
580
Hi,

wollte mal fragen, wie es möglich ist, auch Leerzeichen in der Datenbank-Tabelle zu speichern oder auszulesen.

Mit nl2br() kann man zwar Zeilenumbrüche auslesen, aber keine Leerzeichen.
Wäre schön wenn es dazu eine Lösung gibt^^

mfg
 

der_guru

Lieutenant
Dabei seit
Juni 2004
Beiträge
618
Ja indem du die entsprechenden Werte Quotest.

Beispiel:
Insert into table (Id, String1, String2) Values(1, 'Erster String', 'Zweiter String');

Beim ausslesen sollte die Werte dann entsprechend mitkommen.
select * from table where Id=1;

mfg
 
Zuletzt bearbeitet:

raven16

Lieutenant
Ersteller dieses Themas
Dabei seit
Nov. 2008
Beiträge
580
Wie quoten?

Mein Insert sieht so aus:

PHP:
                    $name =  mysql_real_escape_string($_POST['name']);
					$email = mysql_real_escape_string($_POST['email']);
					$datum = time();
					$text =  mysql_real_escape_string($_POST['eintrag']);
					$aktiv = 1;	
					
					$sql= "INSERT INTO gaestebuch (Name,Email,Datum,Text,Aktiv) 
					VALUES ('$name', '$email', '$datum', '$text', '$aktiv')"; 
					
					$result = mysql_query($sql);
Ka was du damit meinst :D

Der Schreibt den Text in meiner Ausgabe auch immer linksbündig, aber ich konnte die Ursache nicht finden... also kein text-align: left; oder sowas
 
Zuletzt bearbeitet:

Destruction

Ensign
Dabei seit
Dez. 2007
Beiträge
243
lol^^ ich verstehe erlichgesagt dein prob. nicht? Leerzeichen sind doch automatisch mit dabei.
 

chorn

Ensign
Dabei seit
Feb. 2008
Beiträge
136
Oder hast du evtl. das Problem, dass in HTML mehrere Leerzeichen zu einem zusammengefasst werden und du stattdessen geschütze Leerzeichen brauchst?
 

BerniG

Lieutenant
Dabei seit
Okt. 2004
Beiträge
620
Evtl. die Leerzeichen mittels str_replace() in "&nbsp;" umwandeln. Oder du gibst den Text mit pre-Tags aus: "<pre> hier dein Text </pre>".
Achja, ein Hinweis: Wenn das Usertext ist, so solltest du da noch html-Tags rausfiltern (strip_tags() oder htmlentities()/htmlspecialchars()). Denn sonst können da User Javascript-Code hinterlegen :D
 
Zuletzt bearbeitet:

der_guru

Lieutenant
Dabei seit
Juni 2004
Beiträge
618
Mit Quote meine ich sowas:

Als eine Variante könnte es so aussehen. Du mußt auf alle fälle den Input bearbeiten / umwandeln. User eingaben können manchmal seltsame dinge beeinhalten, was meißt erst im View wieder auffällt (bei db insert meißt nicht). Auf Deutsch normalisieren.

Quote wäre $eintrag = "Dies\ ist\ ein\ eintrag";
Ansonsten $eintrag ="Dies&nsbp;ein$nsbp;eintrag";


mysql_real_escape_string
Ist der befehl für dich unbedingt notwendig. In meiner PHP zeit habe ich diesen befehl genau 2x gebraucht. 1x bei RAW rfc 822 dump in db und einmal bei temp dateien. Ansonsten nie. Warum auch bei VARCHar feldern. Was aber gemacht werden muss ist normalisieren um das einheiltlich abzulegen und in der Darstellung dann nicht basteln zu müssen.

$name = $_REQUEST['name'];
$email = $_REQUEST['email'];
$datum = time();
$text = $_REQUEST['eintrag'];
$aktiv = 1;

$sql= "INSERT INTO gaestebuch (Name,Email,Datum,Text,Aktiv)
VALUES ('$name', '$email', '$datum', '$text', '$aktiv')";

$result = mysql_query($sql);

Kommt hier ein SQL Fehler? Wenn nein dann ist so ok.
Frage. Sind die Magic Quotes in deiner php.ini aktiviert? Wenn ja, dann solltest du bei den Variablen noch ein <code>stripslahes</code> machen

Ansonsten leerzeichen durch &nsbp; ersetzen. Es kann sein das du bei User eingaben das generell machen solltest. Das hängt aber davon ab ob jemand auf die idee kommt html code in den "Eintrag" rein zu schreiben.

Wie sieht deine Aussgabe aus? Hängst du den Eintrag in einen HTML Body oder ein readonly textarea?

MfG
 

raven16

Lieutenant
Ersteller dieses Themas
Dabei seit
Nov. 2008
Beiträge
580
Hmmm dieses mysql_real_escape_string() sollte ich laut anderen Usern immer machen, weil sonst ne Sicherheitslücke entsteht...

Möchte das halt für mein Gästebuch verwenden. Das man den Text auch mit mehreren Leerzeichen formatieren kann und der die nicht zusammenfasst.

Schaut euch die Seite am besten hier mal an.
 

der_guru

Lieutenant
Dabei seit
Juni 2004
Beiträge
618
mmh, naja. Ich lasse mich gern belehren aber was für sicherheitslücken sollen das sein?

Ok, dann wirst du wohl den Text umwandeln müssen. Ich empfehle dies HTML encodiert abzulegen. Sprich alle leerzeichen in &nbsp; umzuwandeln.

Die Frage die sich mir stellt: Werden bei meheren leerzeichen alle bis auf eins abgeschnitten oder siehst du die auf deiner Webseite in der Anzeige nicht?

Wenn du das in der Anzeige auf deiner Seite nicht siehst kann es sein das der Browser dies nicht darstellt. Auch hierfür wäre eine umwandlung in HTML codierung helfen.

mfg
 

Hanni2k

Commander
Dabei seit
Apr. 2006
Beiträge
2.215
Welche sicherheitslücke? Ganz einfach

PHP:
Beispiel #2 Ein beispielhafter SQL Injection Angriff
<?php
// Datenbankabfrage zur Ueberpruefung der Logindaten
$query = "SELECT * FROM users WHERE user='{$_POST['username']}' AND password='{$_POST['password']}'";
mysql_query($query);

// Wir haben $_POST['password'] nicht geprueft, es koennte also alles darin
// stehen, was der User will. Zum Beispiel:
$_POST['username'] = 'aidan';
$_POST['password'] = "' OR ''='";

// Das bedeutet, der an MySQL gesendete Query wuerde sein:
echo $query;
== SELECT * FROM users WHERE user='aidan' AND password='' OR ''=''
?>
Die Abfrage, die an MySQL übermittelt wird:


Dies würde jedermann erlauben, sich ohne valides Passwort einzuloggen.


http://de.php.net/mysql_real_escape_string
 

raven16

Lieutenant
Ersteller dieses Themas
Dabei seit
Nov. 2008
Beiträge
580
Also ich hab nen bisschen rumgesucht und hab dann meine Ausgabe so optimiert:

PHP:
while($row = mysql_fetch_object($ergebnis)) 
				{ 
					$id = $row->ID;
					$inhalt = $row->Text; 
					$inhalt_nohtml = htmlentities($inhalt); 
					$inhalt_format = nl2br($inhalt_nohtml); 
					$datum = date("d.m.Y H:i", $row->Datum); 

					//Der Besucher hat keine E-Mail Adresse angegeben: 
					if($row->Email == "") 
					{ 
						$name = "<b>$row->Name</b>"; 
					} 
					else 
					{ 
						//Der User hat eine Email Adresse angegeben: 
						$name = "<a href=\"mailto:$row->Email\">$row->Name</a>"; 
					}
					
					// Aushabe der _GET
					echo "<div class='boxtitlesub'><label class='x-small'>
							# $id von $name am: $datum
							</label></div>";
					echo "<label class='small'>".$inhalt_format."</label><hr style=\"color:#EEEEEE\">";
				   
				}

Wenn ich html tags eingebe, dann gibt der auch in der ausgabe diese so aus...

Noch irgendwas, was ich verbessern sollte?
 

BerniG

Lieutenant
Dabei seit
Okt. 2004
Beiträge
620
Ja. Der User kann über alle Felder Javascript-Code einschleusen. Dementsprechend musst du auch Name und Email mit htmlentities bearbeiten!
 

Hanni2k

Commander
Dabei seit
Apr. 2006
Beiträge
2.215
is zwar net so wichtig aber ich finde sowas schöner:

PHP:
                    $inhalt = $row->Text; 
                    $inhalt_nohtml = htmlentities($inhalt); 
                    $inhalt_format = nl2br($inhalt_nohtml); 
    
                    // Ist das gleiche wie:
                   $inhalt_format=nl2br(htmlentities($row->Text));
Spart man sich Variablen ;)
 
Top