Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
SQL Formatierung in Datenbank einlesen und ausgeben
- Ersteller raven16
- Erstellt am
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
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:
- Registriert
- Nov. 2008
- Beiträge
- 580
Wie quoten?
Mein Insert sieht so aus:
Ka was du damit meinst
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
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
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
- Registriert
- Dez. 2007
- Beiträge
- 243
lol^^ ich verstehe erlichgesagt dein prob. nicht? Leerzeichen sind doch automatisch mit dabei.
luky37
Captain
- Registriert
- Sep. 2005
- Beiträge
- 3.421
raven16 schrieb:Mit nl2br() kann man zwar Zeilenumbrüche auslesen, aber keine Leerzeichen.
nl2br kann gar nichts auslesen, es tut nur genau das was der Name sagt: eine newline in ein html break umwandeln.
Ich glaube du bringst HTML/PHP/SQL komplett durcheinander.
Evtl. die Leerzeichen mittels str_replace() in " " 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
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
Zuletzt bearbeitet:
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
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
- Registriert
- 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.
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.
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 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
Ok, dann wirst du wohl den Text umwandeln müssen. Ich empfehle dies HTML encodiert abzulegen. Sprich alle leerzeichen in 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
Welche sicherheitslücke? Ganz einfach
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
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
Und neben dieser SQL-Injection (die du mit deinem mysql_real_escape_string() ja gelöst hast) bitte nicht vergessen, dass auch die von mir erwähnte Lücke (Crossite-Scripting, siehe http://de.wikipedia.org/wiki/Cross-Site_Scripting ) gefixt werden muss!
- Registriert
- Nov. 2008
- Beiträge
- 580
Also ich hab nen bisschen rumgesucht und hab dann meine Ausgabe so optimiert:
Wenn ich html tags eingebe, dann gibt der auch in der ausgabe diese so aus...
Noch irgendwas, was ich verbessern sollte?
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?
is zwar net so wichtig aber ich finde sowas schöner:
Spart man sich Variablen
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
Ähnliche Themen
- Antworten
- 5
- Aufrufe
- 499
- Antworten
- 8
- Aufrufe
- 779
- Antworten
- 26
- Aufrufe
- 1.095
M
- Antworten
- 8
- Aufrufe
- 1.853