"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

PHP MySQL Select mit Like und Variablen

McDeath98 24.03.2016 - 02:08 3815 20
Posts

McDeath98

Dark Rider
Avatar
Registered: Jul 2000
Location: Schweiz
Posts: 718
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

Here to stay
Registered: May 2000
Location: /home/noe/
Posts: 3514
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);
Bearbeitet von jb am 24.03.2016, 04:06

kleinerChemiker

Here to stay
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4281
Ist es bei dir sicher "&nbsp" und nicht "& n b s p ;"?

Ich würde ein escape_string verwenden um eventuelle Sonderzeichen zu maskieren.
Bearbeitet von kleinerChemiker am 24.03.2016, 07:44

McDeath98

Dark Rider
Avatar
Registered: Jul 2000
Location: Schweiz
Posts: 718
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

Fünfzylindernazi
Avatar
Registered: Nov 2002
Location: OÖ/RI
Posts: 5262
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

Huge Metal Fan
Avatar
Registered: Jun 2001
Location: Kärnten
Posts: 8962
weil das SQL mit dem HTML entity "&nb sp;" nichts anfängt. es will ein leerzeichen mit einem leerzeichen vergleichen.

McDeath98

Dark Rider
Avatar
Registered: Jul 2000
Location: Schweiz
Posts: 718
Das erklärts natürlich @ Umlüx. Keine Ahnung wiso ich auf die blöde Idee mit &nbsp gekommen bin :D

DKCH

...
Registered: Aug 2002
Location: #
Posts: 3279
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

Here to stay
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4281
&nbsp ist ja ein HTML Code, die DB wandelt den nicht um.

McDeath98

Dark Rider
Avatar
Registered: Jul 2000
Location: Schweiz
Posts: 718
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

Fünfzylindernazi
Avatar
Registered: Nov 2002
Location: OÖ/RI
Posts: 5262
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

Administrator
GNUltra
Avatar
Registered: Dec 2000
Location: ~
Posts: 12067
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

Fünfzylindernazi
Avatar
Registered: Nov 2002
Location: OÖ/RI
Posts: 5262
Wollt schon dazu editieren, dass es wohl besser is, wenn ers gleich richtig lernt.

McDeath98

Dark Rider
Avatar
Registered: Jul 2000
Location: Schweiz
Posts: 718
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

C64 Generation
Avatar
Registered: Mar 2006
Location: Graz
Posts: 3170
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);
Bearbeitet von Bogus am 24.03.2016, 14:23
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz