PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : fehlermeldung bei falschem datentyp



jochenjjj
13-11-2003, 13:31
tag zusammen

wenn man die nummer in der Url durch einen Buchstaben ersetzt bekommt man diese Fehlermeldung.


Fehlermeldung:
Anfrage: query:'SELECT * FROM tabelle WHERE ID_tabelle=e' Unknown column 'e' in 'where clause'


Kontrolle und Aufruf der $_GET["nummer"]:
if (($_GET["nummer"] !="") && (isset($_GET["nummer"])))
{

$query="SELECT * FROM tabelle WHERE ID_tabelle=".$_GET["nummer"];

was muss ich machen das bei einer Buchstabeneingabe auch ein or die("query:'$query' ".mysql_error()); kommt.

mfg

Pingu
13-11-2003, 13:49
Original geschrieben von jochenjjj

Kontrolle und Aufruf der $_GET["nummer"]:
if (($_GET["nummer"] !="") && (isset($_GET["nummer"])))
{
Dies würde ich ersteinmal einfacher undübersichtlicher gestalten mit
if (!empty($_GET["nummer"])) {

Dann stellt sich für mich die Frage ist "nummer" nun eine nummer (zahl) oder auch ein Buchstabe? Ansonsten könnte man auch gleich machen
if (is_number($_GET["nummer"])) {


Original geschrieben von jochenjjj

$query="SELECT * FROM tabelle WHERE ID_tabelle=".$_GET["nummer"];Entsprechend würde ich an Deiner Stelle immer richtig Quoten, denn was würdest Du sonst machen wenn Dir jemand Code injiziert wie z.B. "a; DROP tabelle" also
$query = sprintf("SELECT * FROM tabelle WHERE ID_tabelle=\"%s\"", addslashes($_GET["nummer"]));oder noch besser, wenn sowieso nur Nummern (Zahlen) erlaub sind, dann
$query = sprintf("SELECT * FROM tabelle WHERE ID_tabelle=\"%d\"", $_GET["nummer"]);

Wenn das ordentlich gelöst ist, sollte sich das andere Problem auch erübrigen.

cu

Pingu

jochenjjj
13-11-2003, 14:14
danke für deine tips


1.die nummer ist eine zahl also kann ich das dann genauso machen oder????
if (is_number($_GET["nummer"])) {


2.
Was bedeutet "richtig Quoten und bewirkt dieser Code genau

$query = sprintf("SELECT * FROM tabelle WHERE ID_tabelle=\"%s\"", addslashes($_GET["nummer"]));

mfg

Pingu
13-11-2003, 15:16
Original geschrieben von jochenjjj
1.die nummer ist eine zahl also kann ich das dann genauso machen oder????
if (is_number($_GET["nummer"])) {
Genau mehr Info zu is_numeric() (http://php.net/is-numeric) steht in der Doku (ich sehe gerade, dass ich mich geirrt habe. Die Funktion is_number() gibt es nicht, es muß richtig heißen is_numeric() ).



Original geschrieben von jochenjjj
2.
Was bedeutet "richtig Quoten und bewirkt dieser Code genau

$query = sprintf("SELECT * FROM tabelle WHERE ID_tabelle=\"%s\"", addslashes($_GET["nummer"]));

Ich habe es jetzt auf die Schnelle nicht genau gefunden aber alle Strings müssen in mySQL in " " oder ' ' angegeben werden. Sonst denkt er es ist Spaltennamen gemeint (wenn es keines der reservierten Wörter) ist.

Ansonsten empfehle ich die Doku zu sprintf() (http://php.net/sprintf) und addslashes() (http://php.net/addslashes). Ich denke, da es dort sehr gut beschrieben ist, brauche ich es hier nicht nocheinmal wieder zu geben.

Pingu

jochenjjj
13-11-2003, 16:04
alles klar
habe alles genauso gemachr wie du gesagt hast jetzt bekomme ich nur folgendes problem.bin schon seit 2 stunden dran bekomme es aber nicht gelöst

Problemstellung:
Ich bekomme per get einen Parameter FK_muster.
FK_muster existiert in der mysql tabelle als datentyp int und zahlenmäßig von 1 bis 10.

code:
if(($_GET["FK_muster"] !="") && (isset($_GET["FK_muster"])))
$query = sprintf("SELECT * FROM tabelle WHERE ID_ta=\"%d\"", $_GET["FK_muster"]);
$result=mysql_query($query) or die("query:'$query' ".mysql_error());
$row_tabelle=mysql_fetch_array($result);
$wert10=$row_tabelle['name'];

Mein Problem:
wenn ich jetzt in der url einen buchstabe oder eine andere zahl (die nicht in der datenbanktabelle steht)für FK_muster eintrage bekomme ich eine syntax fehlermeldung.
Die Variable $wert10 benutzt ich folgender weise weiter:
code:
$query = sprintf("SELECT * FROM ".$wert10." WHERE ID_bl=\"%d\"", $_GET["ID_bl"]);

könnt ihr mir helfen den fehler zu finden?

mfg