PHP MySQL Select mit Like und Variablen
McDeath98 24.03.2016 - 02:08 3815 20
McDeath98
Dark Rider
|
Hallo Zusammen. Kann mir einer sagen wiso hier nicht funktioniert ? Per Post werden als $Fabrikat=BMW und als $Model=5 übergeben $Hersteller = $Fabrikat." ".$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
|
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: $Hersteller = trim($Fabrikat." ".$Model);
Bearbeitet von jb am 24.03.2016, 04:06
|
kleinerChemiker
Here to stay
|
Ist es bei dir sicher " " 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
|
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: $Hersteller = trim($Fabrikat." ".$Model);
Bringt leider nichts. Da mir langsam die Ideen ausgehen habe ich just4fun mal $Fabrikat = $Hersteller." ".$Model;
getestet. Und das funktioniert. Warum auch immer.
|
Obermotz
Fünfzylindernazi
|
Ich wuerde dir empfehlen, mit Prepared Statements zu arbeiten. Damit hast du gleich saemtliche Sicherheitsfeatures eingebaut und es ist nochdazu schoener zu lesen. PHP: Prepared Statements und Stored Procedures - Manual Link: secure.php.net
|
Umlüx
Huge Metal Fan
|
weil das SQL mit dem HTML entity "&nb sp;" nichts anfängt. es will ein leerzeichen mit einem leerzeichen vergleichen.
|
McDeath98
Dark Rider
|
Das erklärts natürlich @ Umlüx. Keine Ahnung wiso ich auf die blöde Idee mit   gekommen bin
|
DKCH
...
|
Ich wuerde dir empfehlen, mit Prepared Statements zu arbeiten. Damit hast du gleich saemtliche Sicherheitsfeatures eingebaut und es ist nochdazu schoener zu lesen.
PHP: Prepared Statements und Stored Procedures - Manual Link: secure.php.net oh ja, da kann man nur die edith klinger zitieren: BITTE BITTE BITTE! little bobby tables lässt grüssen
|
kleinerChemiker
Here to stay
|
  ist ja ein HTML Code, die DB wandelt den nicht um.
|
McDeath98
Dark Rider
|
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
|
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
AdministratorGNUltra
|
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
|
Wollt schon dazu editieren, dass es wohl besser is, wenn ers gleich richtig lernt.
|
McDeath98
Dark Rider
|
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
|
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: $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
|