Archiv verlassen und diese Seite im Standarddesign anzeigen : Vergleichsoperation bei SELECT
xmedia2000 19-10-2001, 16:50 Hallo,
ich habe mal wieder eine Frage. Wie kann ich vier Felder miteinander vergleichen, wobei je 2 Felder zusammenhängen.
(Ziel: Eine Login-DB. Einmal für Benutzername und Passwort
und zweitens Benutzername und masterpasswort)
Diese Felder sollten nun überprüft werden.
In etwa so:
"(SELECT usr FROM user WHERE usr='".addslashes($USR)."' && pwd=PASSWORD('".addslashes($PWD)."') OR usr='".addslashes($USR)."' && masterpwd=PASSWORD('".addslashes($PWD)."')")
nur leider funzt der Schnipsel nicht.
Er logged sich zwar ein, aber nur wenn ich benutzername und benutzerpasswd eingebe.
Wenn masterpwd, dann nicht. WHY???
ansich sollte er das fressen da && Bindungen stärker sind als || Bindungen, jaja probiere es trotzdem mal mit Klammern um die Paare und wenn das nicht funzt dann lass mal einmal das usr=... weg und mach nur WHERE usr = .... && (pass = ... || pass = master ...)
xmedia2000 20-10-2001, 16:35 Also habe es jetzt mal so probiert:
("SELECT usr FROM user WHERE usr='".addslashes($USR)."' && (pwd=PASSWORD('".addslashes($PWD)."') || masterpwd=PASSWORD('".addslashes($PWD)."')) ")
funzt aber leider immer noch nicht.
Irgendeine Idee??
du must die pwd und masterpwd nochmal in eine Klammer fassen, die OR Bedinguns soll ja vor der && Bedingung erfolgen
xmedia2000 21-10-2001, 20:59 Wie jetzt?
So??
("SELECT usr FROM user WHERE usr='".addslashes($USR)."' && ((pwd=PASSWORD('".addslashes($PWD)."') || masterpwd=PASSWORD('".addslashes($PWD)."'))) ")
Sorry, aber ich bin schwer von Begriff ;-)
joo, so hatte ich es mir gedacht.
xmedia2000 22-10-2001, 13:57 Tja, dann muss ich dich leider enttäuschen. Funzt auch nicht. Darum dachte ich auch, das mein Schnipsel mit den extra Klammern falsch war.
Ich krieg bald die Krise!!
eigentlich ist ja deine Abfrage insgesammt unsinnig da du usr ausliest aber ja eigentlich schon in der abfrage hast. Das macht irgendwie keinen Sinn oder ?
In PHP hat || eine höhere Priorität als && ... traurig aber wahr!
http://php3.de/manual/de/language.operators.precedence.php
im mySQL-Handbuch steht zur Priorität nix, darum sind Klammern wohl nötig
http://www.mysql.com/documentation/mysql/bychapter/manual_Reference.html#Logical_Operators
Abär ... aus deiner Query werd ich auch nicht schlau.
xmedia2000 22-10-2001, 20:15 Ich versuch nochmal genau zu erklären, wo ich hin will...
Tabelle in SQL:
usr:|pwd: |name: |adresse:|masterpwd:
0001|378b243e220ca493|Müller|bla bla |126a648e989cw457
So, nun will ich, das man sich mit Benutzername und Passwort einloggen kann. Das funzt ja auch so weit.
Aber wenn ich den Benutzernamen(bzw.ID)
z.B. 0001 und das masterpasswd eingebe, soll er sich ebenfalls einloggen. Wie lautet die Query dazu.
Das muss doch mit || funktionieren oder??
SELECT * FROM DB WHERE $ID = 'USR' AND $MASTERPASS = 'masterpwd'
nur musst du dir mal überlegen was du dann an die Inputfelder schreibst, es ist doch sinn eines Nicks dass man sich mit ihm einloggt und nicht mit der ID.
[Editiert von JoelH am 23-10-2001 um 05:04]
xmedia2000 22-10-2001, 20:34 Ja sicherlich ist es sinnvoll einen Nick zu benutzen. Doch hier wird kein Portal für 'Endbenutzer' programmiert. Hier sind nur Händler angebunden und die haben ja eine sog. Kundennummer.
xmedia2000 23-10-2001, 11:23 Keine eine Ahnung, wieso das nicht funzt???
SELECT usr FROM user WHERE (pwd=PASSWORD('".$PWD."') || masterpwd=PASSWORD('".$PWD."')) && usr='".$USR."'
WER KANN MIR HELFEN!!
SELECT usr FROM user WHERE (pwd=PASSWORD('".$PWD."') || masterpwd=PASSWORD('".$PWD."')) && usr='".$USR."'
Wenn du Strings benutzt dann müssen die in anführungszeichen geschrieben werden, wie du an deinem Query siehst ist dies nicht der Fall bei den Passwörter. Diese müssen auch in Anführungszeichen stehen, oder nicht ? Titus ?
xmedia2000 23-10-2001, 12:40 kann ich mir nicht vorstellen, da der passwort-schutz ja mit einem normalen passwort und benutzernamen funktioniert. nur wenn ich das masterpasswort eingebe und dann den gleichen benutzernamen funzt es nicht.
langsam glaub ich nurnoch an Hochkommafehler, schreibst du das direkt als Query mit einer Oberfläche oder machst du das per php ? Wie sieht dann der Codeausschnitt aus ? Naja oder die Bezeichner für die Spalten sind falsch, ich bin mit meinem Latein am Ende !
xmedia2000 23-10-2001, 13:47 So sieht mein Formular aus: (in PHP Datei eingebunden)
echo "<TABLE BORDER=0 cellpadding=0 cellspacing=0>";
echo "<TR>";
echo "<TD>Benutzer-ID: </TD>";
echo "<TD><INPUT TYPE=\"TEXT\" NAME=\"USR\"></TD>";
echo "</TR>";
echo "<TR>";
echo "<TD>Passwort:</TD>";
echo "<TD><INPUT TYPE=\"password\" NAME=\"PWD\"></TD>";
echo "</TR>";
echo "</TABLE>";
Meine Spalten müssten auch passen. Spalte pwd für Passwörter und masterpwd für das Masterpasswort je Datensatz und usr für benutzer-id.
und der queryteil des Sourcecodes ?
xmedia2000 23-10-2001, 18:35 <?php
if(isset($EXPIRE)) {
$USR = $HTTP_POST_VARS['USR'];
$PWD = $HTTP_POST_VARS['PWD'];
$firma = $HTTP_POST_VARS['firma'];
$USER = $USR;
if(isset($USR) || isset($PWD)) {
$result = mysql_query("
SELECT usr FROM user WHERE (pwd=PASSWORD('".$PWD."') || masterpwd=PASSWORD('".$PWD."')) && usr='".$USR."' ")
or error(__LINE__,__FILE__,"Konnte Datenbank nich nach angemeldeten Benutzern durchsuchen",mysql_error());
if(mysql_num_rows($result) == 0) {
echo "<HTML>\n";
echo "<HEAD>\n";
echo "<TITLE></TITLE>\n";
echo "</HEAD>\n";
echo "<BODY BGCOLOR=\"F4F4F4\">\n";
echo "<TABLE BORDER=0 cellpadding=0 cellspacing=0 width=\"100%\" height=\"100%\">\n";
echo "<TR><TD align=\"center\" valign=\"middle\">
<font face=\"Arial, Helvetica, sans-serif\" size=\"2\">
Login inkorrekt - <a hef=\"$PHP_SELF\">zurück</a></font>\n";
echo "</table>\n";
echo "</td></tr></table>\n";
echo "</body></html>\n";
exit;
}
/* Berechne UIN */
srand((double)microtime()*1000000);
$UIN = md5(uniqid(rand()));
mysql_query("DELETE FROM login WHERE usr='$USR'") or error(__LINE__,__FILE__,"Konnte vorheriges Login nicht löschen",mysql_error());
/* Fuege neuen Eintrag mit den Daten (User,UIN,Expire,IP,Browser) hinzu */
mysql_query("INSERT INTO login (usr,uin,expire,ip,browser) VALUES ('$USR','$UIN','$EXPIRE','$IP','$BROWSER')") or error(__LINE__,__FILE__,"Konne Benutzer nicht in Datenbank anmelden",mysql_error());
/* Entferne das eingegebene Password aus dem Speicher */
unset($PWD);
} else {
echo "<HTML>\n";
echo "<HEAD>\n";
echo "<TITLE></TITLE>\n";
echo "</HEAD>\n";
echo "<BODY BGCOLOR=\"F4F4F4\">\n";
echo "<TABLE BORDER=0 cellpadding=0 cellspacing=0 align=\"center\" width=\"100%\" height=\"500\">\n";
echo "<TR><TD align=\"center\" valign=\"middle\">\n";
echo "<img src=\"pics/logo_big.gif\" alt=\"\" height=\"42\" width=\"262\"><br> <br> <br>\n";
echo "<TABLE BORDER=0 cellpadding=0 cellspacing=0>\n";
echo "<FORM METHOD=\"POST\" ACTION=\"$PHP_SELF\">\n";
echo "<TR><TD>Benutzer-ID: </TD><TD><INPUT NAME=\"USR\"></TD></TR>\n";
echo "<TR><TD>Passwort:</TD><TD><INPUT TYPE=\"password\" NAME=\"PWD\"></TD></TR>\n";
echo "<TR><TD height=\"10\" colspan=\"2\"></TD></TR>\n";
echo "<TR><TD></TD><TD><INPUT TYPE=\"submit\" VALUE=\"LogIn\"></TD></TR>\n";
echo "</form></table>\n";
echo "</td></tr></table>\n";
echo "</body></html>\n";
exit;
}
} else {
die("<br><b>Diese Datei darf nicht direkt aufgerufen werden.</b><br>");
}
?>
xmedia2000 23-10-2001, 18:36 Puhh, ich hoffe du kannst damit was anfangen.
$USR = $HTTP_POST_VARS['USR'];
$PWD = $HTTP_POST_VARS['PWD'];
$firma = $HTTP_POST_VARS['firma'];
$USER = $USR;
if(isset($USR) || isset($PWD)) {
...
sieht seltsam aus ... wenn du $USR und $PWD setzt, dann ist die folgende Bedingung doch sowieso wahr ... selbst wenn $HTTP_POST_VARS['USR'] bzw. ['PWD'] nicht gesetzt sind!
xmedia2000 24-10-2001, 14:32 Wenn ich http_post_vars nicht setze funzt es nicht mehr, keine Ahnung wieso....
|
|