[PHP] SQL-Abfrage "...WHERE x = x" funktioniert nicht

Entlauber

Lieutenant
Dabei seit
Sep. 2002
Beiträge
656
Tag zusammen.

Zunächst eins vorweg: Wenn jemand ne bessere Überschrift hat, nur her damit, ich seh im Moment vor lauter Wald die Bäume net.

Zum Thema:

Ich wurste grad etwas mit PHP rum.
In einer Datenbank hab ich 4 Spalten: id, artikelnummer, artikel und info.

Von einer PHP Seite schicke ich das Ergebnis eines Formulars per GET an eine andere Seite. Dort will ich jetzt anhand der Artikelnummer den artikel und die info anzeigen.
Dazu folgender SQL-Ausschnitt:

PHP:
$sql = "SELECT
                artikel,
                info
            FROM
                artikeldatenbank
            WHERE
                artikelnummer = '$artikelnummer'";
$result = mysql_query($sql) OR die(mysql_error());
In der mySQL Datenbak steht also als artikelnummer beispielsweise der Wert 100.100.100, also immer 3 Gruppen aus 3 Zahlen getrennt von nem Punkt. Das ganze iss n Textfeld.
Der Wert den GET liefert wird $artikelnummer zugewiesen und entspricht auch genau dem Wert aus der Tabelle.

Allerdings wird mir als Ergebnis immer angezeigt, daß kein übereinstimmender Datensatz gefunden wurde.
Er behauptet also, keinen Datensatz zu finden, obwohl die artikelnummer in der Tabelle genau $artikelnummer entspricht :freak:

Was mach ich also falsch ?
 

DerEineDa

Lieutenant
Dabei seit
Juni 2003
Beiträge
999
Versuch mal die beiden Hochkommas von '$artikelnummer' wegzunehmen ;)

Variablen in Hochkommas werden nämlich nicht als variablen behandelt.

edit:
Sorry, die Begründung ist falsch, ich hab da was verwechselt.
Ich bin trotzdem der Meinung, dass du es mal ohne Hochkommas versuchen solltest, weil du da Zahlen und keinen Text vergleichen willst.
 
Zuletzt bearbeitet:

cR@zY.EnGi.GeR

Lt. Commander
Dabei seit
Juli 2003
Beiträge
2.004
Zitat von DerEineDa:
Versuch mal die beiden Hochkommas von '$artikelnummer' wegzunehmen ;)

Variablen in Hochkommas werden nämlich nicht als variablen behandelt.

edit:
Sorry, die Begründung ist falsch, ich hab da was verwechselt.
Ich bin trotzdem der Meinung, dass du es mal ohne Hochkommas versuchen solltest, weil du da Zahlen und keinen Text vergleichen willst.
Das stimmt nicht, denn der Wert der Variablen $arftikelnummer enthält Punkte, also muss er es entweder in Hochkomma oder in \" setzen.

@ Night Prowler:
Du hast da was vergessen.
Code:
$connection=mysql_connect("localhost","root","");
$results=mysql_query("SELECT artikel, info FROM artikeldatenbank WHERE artikelnummer= \"$artikelnummer\"",$connection;
Den Hostnamen, den Benutzernamen und das Kennwort der Verbindung musst du entsprechend anpassen.
 

Entlauber

Lieutenant
Ersteller dieses Themas
Dabei seit
Sep. 2002
Beiträge
656
Hi cR@zY.EnGi.GeR,

ne, vergessen hab ich das nicht, ich wollte nur den Code hier aufs nötigste beschränken.
Es ist ja auch so, daß er $artikelnummer mit der Datenbank abgleicht, nur liefert er als Ergebnis dann 0 gefundene Datensätze.
Wenn ich das umkehre in

PHP:
 $sql = "SELECT
                artikel,
                info
            FROM
                artikeldatenbank
            WHERE
                artikelnummer != '$artikelnummer'";
$result = mysql_query($sql) OR die(mysql_error());
also alles suchen lasse, was nicht mit der Artikelnummer übereinstimmt, dann zeigt er mir 15 Datensätze an. Nämlich genau so viele, wie die Datenbank enthält.
Aber wieso findet er keinen Datensatz, wenn artikelnummer eben genau $artikelnummer entspricht ?

/Edit:
Ohne die Hochkommas|Kommata funktioniert die Abfrage nicht.

Schreibe ich in die SQL-Abfrage statt der Variablen direkt eine der Nummer aus der Datenbank, z.B. '100.100.100', funktioniert alles. Gebe ich die Variable zum Test am Bildschirm aus, lautet sie korrekterweise auch 100.100.100...
 
Zuletzt bearbeitet:
F

Faustpfand

Gast
Könnt es sein, dass PHP oder MySQL von einer Fließkommazahl ausgeht, du aber eigentlich eine normale Zeichenkette (bzw. MySQL[VARCHAR]) vergleichen willst? Da muss es doch eine Möglichkeit geben. In PHP könnte man es mit if ( $var === "100.100.100" ) vergleichen, da bei 3 Gleichheitsszeichen auch der Variablentyp übereinstimmen muss. Mh.
 

[UPS]Erazor

Lieutenant
Dabei seit
Sep. 2002
Beiträge
753
Sicher, dass du nirgends Leerzeichen oder sowas zuviel drinhast?

Du sagst, dass " WHERE artikelnummer = '100.100.100'" funktioniert, und dass $artikelnummer == "100.100.100" ist. Richtig?

@Faustpfand: Wenn du PHP nicht explizit dazu zwingst irgendwas als Zahl zu behandeln, wird es die Variable immer als String behandeln.
 

Entlauber

Lieutenant
Ersteller dieses Themas
Dabei seit
Sep. 2002
Beiträge
656
Genau so ist es Erazor, artikelnummer und $artikelnummer sind eigentlich gleich...

Es ist so, daß quasi vorher auf einer Seite in einem Formular verschiedene Artikelnummern aus der Datenbank ausgelesen und eine davon ausgewählt wird. Die wird per GET an eine andere Seite geschickt, und da sollen dann anhand der Nummer eben artikel und info aus der Datenbank gelesen und angezeigt werden.

Auffallend ist noch, daß im Browser als URL beim absenden des Formulars die Artikelnummer noch ein paar Sonderzeichen mit auf den Weg bekommt:
http://blabla/bla.php?artikelnummer=100.120.017</td <-- Hilfe das URL-Autoformat geht net raus :rolleyes:

Hat das was mit der angelegten Session zu tun ? Oder verfälscht das den String ? Wie gesagt, wenn ich $artikelnummer anzeigen lasse, steht nur die Zahl drin, in dem Fall 100.120.017. Sollte also eigentlich funktionieren...
 
Zuletzt bearbeitet:

bbforce

Ensign
Dabei seit
Sep. 2003
Beiträge
204
Hi Night Prowler,

was ich dir noch raten kann ist folgendes:

Die Variable die du mit get übergibst solltest du vorher mit

$variable = rawurlencode($variable);

geeignet für den Transport mit dem URI String codieren, und auf der Seite die die Variable empfängt mit

$variable = rawurldecode($_GET["variable"]);

wieder decodieren!

Gruß bbforce
 

Toaster

Lt. Commander
Dabei seit
Apr. 2001
Beiträge
1.266
ich kann kein PHP daher nur der ansatz.

PHP:
$sql = "SELECT 
                artikel, 
                info 
            FROM 
                artikeldatenbank 
            WHERE 
                artikelnummer != '" & $artikelnummer & "'"; 
$result = mysql_query($sql) OR die(mysql_error());
' also die hochkomma´s noch im String eingeben, und die Variable per Stringverkettung an den SQL string anhängen.
 

[UPS]Erazor

Lieutenant
Dabei seit
Sep. 2002
Beiträge
753
Du hast also folgendes gemacht:
PHP:
echo "(Artikelnummer: $artikelnummer)"
und im HTML Quelltext stand dann
Code:
(Artikelnummer: 100.100.100)
Ich versuch mit diesen dämlichen Fragen Leichtsinnsfehler auszuschließen.
Sieht mir schwer nach einem fehlenden " im HTML Quelltext aus.

@Toaster: Für alle Fälle zur Info, Stringverkettung macht man in PHP mit dem Punkt
PHP:
 "bla" . $var . "bla"
 

Entlauber

Lieutenant
Ersteller dieses Themas
Dabei seit
Sep. 2002
Beiträge
656
Erstmal danke für Eure Unterstützung.

Leider bin ich nicht weiter gekommen.
$variable = rawurlencode($variable); und entsprechend $variable = rawurldecode($_GET["variable"]); ändern nichts an der Situation.

Fehler in der SQL-Abfrage selbst können wohl ausgeschlossen werden, da ja ein Ergebnis geliefert und keine Fehlermeldung angezeigt wird.

Die paar Zeilen HTML scheinen auch in Ordnung zu sein. Zumal die mit den übergebenen Werten ja kaum was zu tun haben. Nur um Mißverständnisse zu vermeiden:
Es werden auf einer Seite per SQL Artikelnummern aus der Datenbank gelesen und ausgegeben, per GET an eine andere geschickt und dort die zur Artikelnummer gehörenden Werte info und artikel ausgegeben.
HTML greift da eigentlich nicht ein.


Im Browser wird folgendes übergeben: ".../xampp/test/test1.php?artikelnummer=100.120.006%3C%2Ftd" - was sind das für angehängte Sonderzeichen ? auf die richte ich mittlerweile mein Augenmerk. Wenn ich die Variable dann ausgebe mit
PHP:
echo $artikelnummer;
kommt 100.120.006 raus. Das Ding macht mich verrückt :pcangry:


/EDIT:
Wenn ich bevor die Variable vom Formular an die nächste Seite geschickt wird, diese mit var_dump ausgebe, wird mir ein String mit einer Länge von 11 Zeichen angegeben. Wenn ich das gleiche in dem Formular mache, das die Variable empfüngt, ist der String auf einmal 15 zeichen lang... Hilfe ?!



/EDIT2:
Problem gelöst, es war zwar kein fehlendes ", aber irgendwas passt ihm wohl an der Tabelle, in der auf der 1. Seite die Artikelnummern aufgelistet werden, nicht zu passen. Wenn ich die rausschmeisse, kommt der String so an wie er soll und alles funktioniert.
Keine Ahnung warum, rein HTML-technisch war die Tabelle in Ordnung.
 
Zuletzt bearbeitet:
Top