PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : aargghhh.. was zum Teufel...??



McG.linux
28-09-2001, 05:56
Hi Leute

es is grade kurz vor 6 in der früh und der title beschreibt meinen Zustand.. :(
Außerdem sollte noch gesagt werden dass ich php-maßig n absoluter newbe bin.. :)

Folgendes Problem:

Ich wollte per PHP einen login realisieren, über eine mySQL-db..

mein table "auth" sieht so aus:
id int(11) NOT NULL auto_increment Primary
login varchar(20) NOT NULL
passwd varchar(20) NOT NULL

mein momentanes script schaut so aus:


<?
if ($sent & $login & $passwd)
{
include("../moduls/open.inc.php");
$login = strtolower($login);
$result = mysql_query("SELECT * FROM auth1 WHERE login='$login' AND passwd='$passwd'");
while($arrRow = mysql_fetch_array($result))
{
echo $arrRow["login"];
echo $arrRow["passwd"];
}
mysql_free_result($result);
}
else
{
echo "Sie müssen beide Felder ausfüllen!";
}

?>

Dieser code liegt in einer datei namens login.php die über die index.html aufgerufen wird. auf der index.html befindet sich also das Formular das die daten übermitteln soll

Der inhalt des tables "auth" sieht so aus:

1 geh admin
2 test test

jetzt wirds erst richtig lustig:

Gebe ich nichts, oder nur entweder login oder passwd in das formular ein, kommt wie gewollt
"Sie müssen beide Felder ausfüllen!"

Das kommt allerdings auch wenn ich als login und passwd "test" angebe.. ebenso wenn ich z.B. die kombination "test" "sda".. "test" "rew" geht dann z.B. wieder.. alles was mir dazu einfällt: hä??????

Gebe ich irgendwas anderes ein dann kommt dies:



Warning: Supplied argument is not a valid MySQL result resource in /home/mcg/unidata/html/login.php on line 6
Warning: Supplied argument is not a valid MySQL result resource in /home/mcg/unidata/html/login.php on line 13
(zeilennummern an den code-ausschnitt angepasst)

hm.. ok.. "SELECT * FROM auth WHERE login="test" bringt mir allerdings sowohl in phpMyAdmin als auch im mysql-monitor das gewünschte ergebnis..

Was mach ich falsch?? (antworten wie "alles" mögen vielleicht richtig sein, sind aber nich das was ich hören will ;)

Gruß
McG.linux

Pingu
28-09-2001, 10:09
Hi,

also vorweg, was die Fehlermeldungen bedeuten kann ich nicht sagen, da ich ja die zeilennummern nicht zuordnen kann.

Aber ein Fehler ist hier: if ($sent & $login & $passwd)

Denn das '&' ist eine Bitweiseverknüpfung und keine logische. Die logische ist '&&'. Jetzt weiß ich natürlich nicht was php rausbekommt, wenn er diese Strings bitweise verküpft.

Aber ich würde dir sowieso sowas wie: if (!empty($sent) && !empty($login) && !empty($passwd))
empfehlen. Denn empty() überprüft einmal ob die Variable gesetzt ist oder nicht und zweitens ob die Variable leer ist oder nicht (mußt mal im Manual nachsehen, da ist eine Vergleichstabelle mit der Unterschieden von 'isset()' und 'empty()')

Zweitens würde ich dir empfehlen die Variablen zu schützen und die Daten nicht direkt in einer SQL-Abfrage verwenden, denn was passiert wenn dir einer folgendes Passwort eingibt: $passwd = "blabla'; DELETE FROM auth1 WHERE 1=1;"
Dann hast du glaub ich ein klitze kleines Problem. Deshalb sollten Variableninhalte immer geschützt werden (wenn dies nicht schon so ist, z.B. durch die Einstellung 'magic_quotes'):
$login = addslashes($login)
$passwd = addslashes($passwd)

Gruß

-= Pingu =-

PS: Wenn du englisch lesen kannst, ich finde daß http://www.phpbuilder.com eine der besten Adressen ist, wo man viel zu PHP lernen kann wie man was falsch (äh richtig) macht.

McG.linux
28-09-2001, 13:25
soweit die Theorie :)

und wieso findet er nichts? auch wenn ich nur SELECT * FROM auth mach bekomm ich die fehlermeldung.. diese kombination gibt aber (wie es auch sein soll) sowohl im mysql-monitor als auch in phpMyAdmin den wert

1 geh admin
2 test test

zurück..

Gruß
McG.linux

Pingu
28-09-2001, 13:35
nur so 'ne dumme Frage: Zur Datenbank hast du dich aber verbunden? [mysql_connect()] Bei dieser Verbindung ist auch kein Fehler aufgetreten?

-= Pingu =-

McG.linux
28-09-2001, 14:30
das macht open.inc.php und scheint zu funktionieren.. hab mir die Frage auch schon gestellt..

mein momentanes php-script:



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
<TITLE>UniData - Universit?t Stuttgart</TITLE>
</HEAD>
<? echo " $login, $passwd <br>";
if (!empty($sent) && !empty($login) && !empty($passwd))
{
include("../moduls/open.inc.php");
$login = strtolower($login);
$result = mysql_query("SELECT * FROM 'auth'");
if ($result == "TRUE")
{
while($arrRow = mysql_fetch_row($result))
{
echo $arrRow[0];
echo $arrRow[1];
echo $arrRow[2];
}
mysql_free_result($result);
}
elseif ($result == "FALSE")
{
echo "FALSE";
}
else
{
echo "ganz falsch";
}
}
else
{
echo "Sie m?ssen beide Felder ausf?llen!";
}

?>
</BODY>
</HTML>

bringt mir bei jeder (auch bei richtiger angabe von login und passwort):



test, test
connection OK!
ganz falsch


Das connection OK kommt von der open.inc.php:


<?
$server = "localhost";
$user = "root";
$pass = "";

$conn = @mysql_connect($server, $user, $pass);
if ($conn)
{
echo "connection OK!<br>";
}
else
{
echo "Connection failed<br>";
}
?>

So, nun hast du alles scripte vor dir.. :) irgendeine Idee?? (php.inc.php kommt aus dem PHP-buch..

Gruß
McG.linux

Pingu
28-09-2001, 15:06
Hi,

also solange nix funktioniert, würde ich mal die ganz '@' wegnehmen, damit man wenigstens die Fehlermeldungen bekommt.

Dann, deine if-Bedingung haut wieder nicht hin, denn du testest $result == 'TRUE'. Aber das $result enthält ja nicht den String 'TRUE' (bzw. 'FALSE') sondern ist logisch TRUE oder FALSE. Eigentlich genau das gleiche wie bei Deinem mysql_connect()-Aufruf, hier ist es richtig.

-= Pingu =-

PS: ich kann Dir jetzt leider auf die schnelle nix funktionierendes geben, da ich alles über die Klassen von phplib mache, wobei ich die auch schon wieder ein bischen abgewandelt habe.

McG.linux
28-09-2001, 15:38
ok, thx.. allerdings hatte ich teile aus deinem post schon getestet.. von TRUE über 'TRUE' nach "TRUE" ;)

ich probiers nochmal, thx derweil was die db-connection über open.php.inc angeht.. die sollte stimmen, oder (laut ausgabe tut sie das.. aber?? ;)

Gruß
McG.linux

McG.linux
28-09-2001, 18:12
bin ja bescheuert. ein einfaches "unidata", for "SELcET" hat gefehlt.. klar.. muss ja nich nur connecten sondern hm auch mitteilen welche db ich nutzen will.. tja.. dev0 sei dank ;)

so, dann werd ich mal weiter machen ;)

Gruß
McG.linux

McG.linux
29-09-2001, 00:43
Hi Pingu

Thx für die Antwort und tips :)
Englisch kann ich, werd mir also die Seite gleich mal genehmigen ;) und auch gleich ma deine vorschläge austesten :)

Was den code-asuschnitt und die fehler angeht..



(zeilennummern an den code-ausschnitt angepasst)
Allerdings hab mich da wohl um eins verzählt.. der erste Fehler ist nicht in zeile 6, sondern in Zeile 7 (von <? aus gezählt) also bei
while($arrRow = mysql_fetch_array($result))


und

mysql_free_result($result);



Sagt dir das was?? na mal sehen, vielleicht ist es schon erledigt wenn ich mal deine Vorschläge einbau :)

Gruß
McG.linux

Pingu
29-09-2001, 00:55
Ahha,

dann kann ich dir auch sagen was die fehlermeldungen besagen.

Die Funktion mysql_query() hat einen return (http://www.php.net/manual/en/function.mysql-query.php), der entweder TRUE ist, also die Abfrage war kooorrekt und es wurden Daten gefunden (bei SELECT), oder FALSE. Wenn der Return FALSE ist, darf er nicht an andere Funktionen weitergegeben werden, da diese damit nix anfangen können. Deswegen hier die Fehlermeldungen, weil er beim SELECT nix gefunden hat.

-= Pingu =-