...Syntax Problem!

zamo76

Erfahrenes Mitglied
hi leute,

ich verwende folgende DB Abfrage:

PHP:
...WHERE `takt` = '".mysql_real_escape_string($_GET['takt'])."'......

Rufe ich die Ergebnisse per Link auf, z.B.

PHP:
...takt.php?takt=gte;2.4

verwende ich "gte;" für alle Produkte die grösser sind als 2.4 Allerdings funktioniert das nicht, da ich wohl nen Denkfehler mache!? ;-)

Danke im Voraus!

zamo76
 
Meinst du etwa Folgendes?
PHP:
function formatExpression( $expr )
{
	$parts = explode(';', $expr);
	$trans = array(
		'lt'  => '<',
		'lte' => '<=',
		'gt'  => '>',
		'gte' => '>='
	);
	if( isset($trans[strtolower($parts[0])]) && count($parts)==2 ) {
		return $trans[strtolower($parts[0])].' "'.mysql_real_escape_string($parts[1]).'"';
	} else {
		return '= "'.mysql_real_escape_string($parts[1]).'"';
	}
}

$query = '
	SELECT
	        …
	  FROM
	        …
	  WHERE
	        `take` '.formatExpression($_POST['takt']).'
	';
 
...ach, ich dachte das wäre etwas einfacher zu lösen!!

Werde es mir sichern und wenn ich Zeit habe einbauen...

Vielen Dank dafür!

zamo76
 
Es ginge sicher einfacher, bloss damit würdest du potentiellen Angreifern den Weg freimachen... dann müsstest du nämlich zulassen, dass übergebene Werte 1:1 in dein Query übernommen werden...und man kann viel übergeben :eek:
 
...hi leute,

also ich habe mich jetzt damit befasst und mir ist etwas noch nicht ganz klar!?

Ich teste es jetzt mit dem Preis und vewende im Query
PHP:
...WHERE `preis` '".formatExpression($_POST['preis'])."'...

Allerdings zeigt er mir nen Fehler an und wenn ich z.B. "=" dazwischen setze, ist der Fehler weg, aber er findet keine Treffer...Muss ich im eigentlichen Script noch etwas ändern oder mache ich einen Denkfehler!

Danke im Voraus!

P.S. Ich rufe folgendermassen auf:
PHP:
...preis=gte;1500">ab 1.500,00 €</a>
 
Eigentlich sollte die formatExpression()-Funktion dafür sorgen, dass die Ausdrücke automatisch durch die korrekten Operatoren ersetzt werden. Wie sieht denn die Abfragedefinition am Ende aus?

PS: Per URL übergebene Argumente werden mit der GET-Methode übermittelt.
 
...habe die Funktion 1:1 übernommen und der Query endet:

PHP:
...WHERE `preis` '".formatExpression($_GET['preis'])."' ORDER BY `".mysql_real_escape_string($orderby)."` LIMIT ".intval($limit)) or die(mysql_error());

Ach ja, mit GET...

Habe ich geändert, aber nicht...

Bekomme folgenden Fehler, wenn ich z.B. alle Preise über 1500 aufrufen möchte:

You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ''>= "1500"' ORDER BY `preis` LIMIT 10' at line 1
 
Du musst die Rückgabewert der Funktion nicht noch zusätzlich für MySQL in Anführungszeichen setzen. Daher einfach nur:
PHP:
" … WHERE `preis` ".formatExpression($_GET['preis'])." ORDER BY `".mysql_real_escape_string($orderby)."` LIMIT ".intval($limit)) or die(mysql_error());
 
Es ist oft hilfreich einfach mal die zusammengeschusterte Abfragedefinition manuell zu prüfen. Denn ein … `preis` '>= "1500"' … sollte da schnell auffallen.
 
Zurück