PHP MySQL Select mit Like und Variablen

Seite 1 von 2 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/php-mysql-select-mit-like-und-variablen_245824/page_1 - zur Vollversion wechseln!


McDeath98 schrieb am 24.03.2016 um 02:08

Hallo Zusammen.

Kann mir einer sagen wiso hier nicht funktioniert ?

Per Post werden als $Fabrikat=BMW und als $Model=5 übergeben

Code:
$Hersteller = $Fabrikat."&nbsp".$Model;
$sql= "SELECT * FROM Ersatzteile WHERE Fabrikat LIKE '%".$Hersteller."%' and Baugruppe = '$category'";

Wenn ich aber den Teil '%".$Hersteller."%' direkt mit '%BMW 5%' ersetze funktioniert die Abfrage.

Hintergrund ist der, dass in der Datenbank Fahrzeughersteller und Model in einem Feld stehen, die Abfrage übers Formular aber mit einer Auswahlliste für den Hersteller und einem Eingabefeld für das Model als Option besteht.

Lasse ich das Model weg, die Variable $Model ist also leer dann funktioniert die Abfrage wie Sie soll. Auch das Echo von $Hersteller ergibt mir den richtigen Wert von BWM 5

Ich hatte das Problem vor Jahren schonmal, weiss aber ums verrecken nicht mehr wie ich das damals gelöst habe.

Danke schon mal für eure Hilfe


jb schrieb am 24.03.2016 um 04:04

Hallo!

Prinzipiell sehe ich da keinen Fehler, das müßte so funktionieren.
Würde bei den von Post gelieferten Werten ansetzen, evtl. steht da ja mehr drinnen als du siehst, z.B. ein Leerzeichen hinter dem Modell. Dann spuckt die SQL Abfrage natürlich nix mehr aus.
Probier mal:

Code:
$Hersteller = trim($Fabrikat."&nbsp".$Model);


kleinerChemiker schrieb am 24.03.2016 um 07:43

Ist es bei dir sicher "&nbsp" und nicht "& n b s p ;"?

Ich würde ein escape_string verwenden um eventuelle Sonderzeichen zu maskieren.


McDeath98 schrieb am 24.03.2016 um 10:29

Zitat von jb
Hallo!

Prinzipiell sehe ich da keinen Fehler, das müßte so funktionieren.
Würde bei den von Post gelieferten Werten ansetzen, evtl. steht da ja mehr drinnen als du siehst, z.B. ein Leerzeichen hinter dem Modell. Dann spuckt die SQL Abfrage natürlich nix mehr aus.
Probier mal:
Code:
$Hersteller = trim($Fabrikat." ".$Model);

Bringt leider nichts.

Da mir langsam die Ideen ausgehen habe ich just4fun mal
Code:
$Fabrikat = $Hersteller." ".$Model;
getestet.

Und das funktioniert. Warum auch immer.


Obermotz schrieb am 24.03.2016 um 10:37

Ich wuerde dir empfehlen, mit Prepared Statements zu arbeiten. Damit hast du gleich saemtliche Sicherheitsfeatures eingebaut und es ist nochdazu schoener zu lesen.


Umlüx schrieb am 24.03.2016 um 10:39

weil das SQL mit dem HTML entity "&nb sp;" nichts anfängt. es will ein leerzeichen mit einem leerzeichen vergleichen.


McDeath98 schrieb am 24.03.2016 um 11:05

Das erklärts natürlich @ Umlüx. Keine Ahnung wiso ich auf die blöde Idee mit &nbsp gekommen bin :D


DKCH schrieb am 24.03.2016 um 11:07

Zitat von Obermotz
Ich wuerde dir empfehlen, mit Prepared Statements zu arbeiten. Damit hast du gleich saemtliche Sicherheitsfeatures eingebaut und es ist nochdazu schoener zu lesen.


oh ja, da kann man nur die edith klinger zitieren: BITTE BITTE BITTE! little bobby tables lässt grüssen


kleinerChemiker schrieb am 24.03.2016 um 11:10

&nbsp ist ja ein HTML Code, die DB wandelt den nicht um.


McDeath98 schrieb am 24.03.2016 um 11:28

Zitat von DKCH
oh ja, da kann man nur die edith klinger zitieren: BITTE BITTE BITTE! little bobby tables lässt grüssen

Werde ich mir sicher mal ansehen, aber erst wenn das Projekt abgeschlossen ist.
Klingt aber auf jeden Fall interessant.


Obermotz schrieb am 24.03.2016 um 11:38

Also ich sags nochmal anders: Wenn das ein Uebungs-Projekt ist oder aehnlich, dann ist das ok. Aber wenn das Ding in irgendeiner Weise produktiv gehen soll oder mal im Internet oder im Intranet steht -> Prepared Statements, jetzt.


COLOSSUS schrieb am 24.03.2016 um 11:39

Zitat
Wenn das ein Uebungs-Projekt ist oder aehnlich, dann ist das ok.

Nein, ist es nicht. Was soll es bringen, etwas falschestmoeglich zu "ueben"?


Obermotz schrieb am 24.03.2016 um 11:41

Wollt schon dazu editieren, dass es wohl besser is, wenn ers gleich richtig lernt.


McDeath98 schrieb am 24.03.2016 um 12:22

Ist wie gesagt im Moment nur ein kleines Nebenprojekt ob alles so machbar ist wie geplant.
Wobei die Umstellung garnicht so gross ist wie ich gerade eben gesehen habe.


Bogus schrieb am 24.03.2016 um 14:21

die var '$Hersteller' hast du anders eingebunden als '$category'.
auch wenn's bei mir ne weile her ist, dürfte das iirc das/ein problem sein.

fixed:

Code:
$sql= "SELECT * FROM Ersatzteile WHERE Fabrikat LIKE '%".$Hersteller."%' and Baugruppe = '".$category."'";

abgesehen davon benutze ich zum debuggen immer ne möglichkeit mir den sql-select anzeigen zu lassen. am einfachsten mit
die($sql);




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025