Vergleich mit "<br />"-Strings, die in einer Datenbank gespeichert sind

Thomas D

Erfahrenes Mitglied
Hallo!

Code:
$adresse = $liste[0]["vorname"] ." " .$liste[0]["nachname"] ."<br />" .$liste[0]["strasse"] ."<br />";
$adresse .= $liste[0]["plz"] ." " .$liste[0]["ort"];
echo $adresse;

...

$query = "SELECT * FROM Kalkulation WHERE adresse = '" .$adresse ."'";
...

Beim Zusammensetzen des WHERE-Teils werden die Strings "<br />" nicht wie gewünscht beibehalten, sondern in HTML umgewandelt. Dadurch funktioniert die Überprüfung nicht, da in der Datenbank <br /> gespeichert sind. Wie kriege ich es hin, dass einfach überprüft wird, ob ein String "<br />" in der Datenbank vorkommt, ohne dass dieser zuvor in ein Newline umgewandelt wird?

MfG, Thomas D.
 
Ich bräuchte irgend etwas, womit ich das <br /> als Klartext escapen kann. Es soll also auf den String "<br />" verglichen werden, ohne dass daraus ein Newline wird. Ich verstehe nicht, warum $adresse = "<br />" nicht auch so übertragen wird, sondern eben als Newline :confused:
 
Wenn $adresse = "<br />" so ankommen würde es auch so in der Db gespeichert werden.
Das Problem liegt im Formular dort werden Zeilenumbrüche nicht mit </br> zurückgeben.Wenn sie per post oder Get versendet werden.

Dazu hast du dann die Oben genannten befehle um das zu Wandeln bevor es in die Db geschrieben wird.

Es sei dem du machst beim eintragen danach die Schutz prüfungen dann wandelt der Befehl das auch automatisch um.(mysql_escape_string,mysql_real_escape_string unsw)
http://at2.php.net/manual/de/function.htmlentities.php

Mfg Splasch
 
Zuletzt bearbeitet:
Wenn $adresse = "<br />" so ankommen würde es auch so in der Db gespeichert werden.

Hallo!

In meiner Datenbank steht aber <br />, wenn ich diese per INSERT ohne vorherige Manipulationen rein schreibe. Nur beim SELECT t es irgendwie nicht. Es gibt auch keine Formulareingabe, da die <br />s direkt vor dem SELECT zusammengebaut werden (s. Code zu Beginn dieses Threads). Deshalb wundert es mich ja, dass die Überprüfung mit WHERE abc = 'kdkdkd<br />kdkdky" nicht funktioniert, obwohl es so in der Datenbank steht.
 
Solche abfragen macht man im normal fall auch nicht.
Schon mal was von Normalisierung einer Datenbank gehört?

In deinem fall vermute ich mal das die Tabellen komplett falsch augebaut sind.


Im Normal fall schauen dann die Abfragen so aus

SELECT * FROM Kalkulation WHERE adresse='baumgasse' and vorname='hans' and nachname='bauer';

Und fällt dir dabei was auf?

Hier die erklärungen zur Normalform
http://www.little-idiot.de/mysql/mysql-254.html
http://www.dfpug.de/konf\konf_1998\07_c_s\d_sql2/d_sql2.htm

Les dir das mal durch dann weißt wast alles falsch bei deiner db gemacht hast.

Mfg Splasch
 
Hallo!

Ich weiß sehr wohl, was Normalformen sind. Ich speichere eine frozenAddress, die sich nicht mehr ändert. Diese ist als einfacher String zu sehen, der nie wieder bearbeitet oder dergleichen wird. Um ein mehrmaliges Einfügen eines INSERT-Statements durch Page-Reload zu verhindern, möchte ich dies dadurch blocken, dass ich überprüfe, ob dieselben Einträge noch einmal eingefügt werden möchten. Und genau hier kommen die <br /> ins Spiel, die in der frozenAddress-Spalte drinnen sind. Da diese Adresse einfach nur kommentarlos ausgegeben wird, verwenden ich die HTML-Newlines. Daher hat dieser Aufbau durchaus Sinn, wenngleich mich die Probleme bei der WHERE-Abfrage auf <br /> doch überrascht haben.

MfG, Thomas D.
 
Okay, ich haben nun Newlines rausgeschrieben und die br2nl()-Funktion verwendet und ein wenig umgeschrieben. Nun funktioniert es :) ...
 
Zurück