Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Vergleichsoperation bei SELECT [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
brauche Webseite ideal für Vereine und Firmen
- Ad -
php-resource




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???

 
JoelH
19-10-2001, 18:41 
 
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??

 
JoelH
20-10-2001, 23:30 
 
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 ;-)

 
JoelH
22-10-2001, 06:44 
 
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!!

 
JoelH
22-10-2001, 14:50 
 
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 ?

 
Titus
22-10-2001, 19:32 
 
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??

 
JoelH
22-10-2001, 20:19 
 
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!!

 
JoelH
23-10-2001, 12:11 
 
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.

 
JoelH
23-10-2001, 13:31 
 
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: &nbsp;&nbsp;</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.

 
JoelH
23-10-2001, 15:25 
 
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&uuml;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&ouml;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>&nbsp;<br>&nbsp;<br>\n";
echo "<TABLE BORDER=0 cellpadding=0 cellspacing=0>\n";
echo "<FORM METHOD=\"POST\" ACTION=\"$PHP_SELF\">\n";
echo "<TR><TD>Benutzer-ID: &nbsp;&nbsp;</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.

 
Titus
23-10-2001, 19:22 
 
$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....


Alle Zeitangaben in WEZ +2. Es ist jetzt 15:54 Uhr.