Re: Login-Daten eines Scriptes vergleichen

2001-05-19 Thread Rene Drescher-Hackel
Hallo Marian,

Marian Seitner [EMAIL PROTECTED] schrieb im Newsbeitrag
news:[EMAIL PROTECTED]
  Das Prinzip hab ich kapiert, aber wie komm ich an die besagte 0 oder 1
 ran?

 Ich habs jetzt geschafft mit  $return = mysql_fetch_row($res);  an den
Wert
 ranzukommen, er liegt dann in  $return[0]. Das ganze mach ich ohne
Schleife,
 da ja rein theoretisch nur einen Datensatz zurückgeliefert werden kann.
Ist
 es auch möglich, das Ergebnis mit mysql_fetch_array() abzufragen?

 Greets
  Marian


vom Prinzip schon, dann mit SELECT COUNT(*) AS Anzahl FROM...

$data = mysql_fetch_array($result))
   {
$anzahl=$data[Anzahl];


doch wozu? Meines Wissens nach müsste der Index schneller sein und Du
benötigst doch eh nur die Auskunft, ob ein Datensatz gefunden wurde oder
nicht. Wenn Du die Tatsache mit einkalkulierst, eventuell doppelte
Usereinträge vorzufinden, dann solltest Du Deine Tabelle(n) noch einmal
überarbeiten. Theoretisch macht es aber nur Sinn, Userdaten so zu speichern,
dass Duplikate ausscheiden.

Gruß

Rene




Re: Login-Daten eines Scriptes vergleichen

2001-05-19 Thread Marian Seitner
 vom Prinzip schon, dann mit SELECT COUNT(*) AS Anzahl FROM...

 $data = mysql_fetch_array($result))
{
 $anzahl=$data[Anzahl];
...
 doch wozu? Meines Wissens nach müsste der Index schneller sein und Du
 benötigst doch eh nur die Auskunft, ob ein Datensatz gefunden wurde oder
 nicht. Wenn Du die Tatsache mit einkalkulierst, eventuell doppelte
 Usereinträge vorzufinden, dann solltest Du Deine Tabelle(n) noch einmal
 überarbeiten. Theoretisch macht es aber nur Sinn, Userdaten so zu
speichern,
 dass Duplikate ausscheiden.

Hi Rene!

Hast schon recht, doppelte User hab ich keine, mir gings lediglich um die
Syntax, ich bin noch Neuling in Sachen MySQL.

Ist es möglich, daß wenn ein Datensatz gefunden wurde ich auch die ID dieses
Satzes bekomme? Nachdem ich nämlich weiß, ob der User der ist der er vorgibt
zu sein, frage ich die Tabelle noch einmal ab um an die Rechte des Users
heranzukommen, die ebenfalls in der selben Tabelle abgespeichert sind.

Hiermit prüfe ich, ob die Daten korrekt sind

$query = SELECT count(*) FROM $dbt WHERE name='$name' AND pass='$pass';
$res = mysql_query($query, $db); $ret = mysql_fetch_row($res);

Ergebnis ist dann in $ret[0].

Dann mach ich die gleiche Abfrage nochmal, nur diesmal mit allen Angaben

$query = SELECT * FROM $dbt WHERE name='$name' AND pass='$pass';
$res = mysql_query($query, $db); $ret = mysql_fetch_array($res);

Wie gesagt, ich würde gerne wissen ob die ID des Datensatzes schon bei der
ersten Abfrage zurückgeliefert werden kann. Dann würde eine weitere Suche in
der kompletten Table entfallen. Oder kann man die zweite Abfrage evtl.
einfacher gestalten?

Gruß
 Marian




Re: Login-Daten eines Scriptes vergleichen

2001-05-19 Thread Marian Seitner
 In der Auswertung prüfst Du dann if(!$result) -hier hast Du also keinen
 Datensatz gefunden - entsprechende Fehlermeldung an den Benutzer ausgeben
 oder eine entsprechende Routine aufrufen.
 andernfalls hast Du den Benutzer gefunden, jetzt kannst Du (wenn Deine
 Berechtigungsspalte 'rechte' heißt) dann mit

 $query = SELECT id, rechte FROM $dbt WHERE name='$name' AND
pass='$pass';
 $res = mysql_query($query, $db);
 $ret = mysql_fetch_row($res);
 $userid = $ret[0];
 $recht = $ret[1];

Hmm... irgendwas hab ich wohl falsch gemacht! Hier mein Code:

snip

$query = SELECT allow_gb,allow_news,allow_files FROM $dbt WHERE
name='$name' AND pass='$pass';
$res = mysql_query($query, $db); $ret = mysql_fetch_array($res);

if (!$res)
{
  session_register(user);
  $user = array(auth = true,
  name = $name,
  allow_gb = $ret[allow_gb],
  allow_news = $ret[allow_news],
  allow_files = $ret[allow_files]);

 header(Location:
http://.getenv(SERVER_NAME)./site/scripts/login/admin.php);
 exit;
}
 else { $err=Sie haben entweder einen ungültigen User-Name verwendet oder
das Passwort ist falsch;
  session_destroy(); }

/snip

Wie du siehst hab ich die Rechte jeweils in einem Feld stehen, allow_xxx,
und frage auch nur noch diese drei Felder ab. Mit (!$res) will ich, wie von
dir beschrieben, überprüfen ob der User existiert. Dummerweise wird immer
die Fehlermeldung ausgegeben($err), egal ob die Daten korrekt oder inkorrekt
sind. Was mach ich falsch?

 Den von Dir beschriebenen Ansatz könnte man auch wählen, sollte man aber
 nicht, da Du ja alle Infos schon mit EINER Abfrage bekommen kannst.

Es funktioniert immerhin... ;-))

Gruß und Vielen Dank, hast mir schon sehr sehr viel weitergeholfen!
 Marian





Re: Login-Daten eines Scriptes vergleichen

2001-05-19 Thread Rene Drescher-Hackel
Hallo,
Marian Seitner [EMAIL PROTECTED] schrieb im Newsbeitrag
news:[EMAIL PROTECTED]
  vom Prinzip schon, dann mit SELECT COUNT(*) AS Anzahl FROM...
 
  $data = mysql_fetch_array($result))
 {
  $anzahl=$data[Anzahl];
 ...
  doch wozu? Meines Wissens nach müsste der Index schneller sein und Du
  benötigst doch eh nur die Auskunft, ob ein Datensatz gefunden wurde oder
  nicht. Wenn Du die Tatsache mit einkalkulierst, eventuell doppelte
  Usereinträge vorzufinden, dann solltest Du Deine Tabelle(n) noch einmal
  überarbeiten. Theoretisch macht es aber nur Sinn, Userdaten so zu
 speichern,
  dass Duplikate ausscheiden.

 Hi Rene!

 Hast schon recht, doppelte User hab ich keine, mir gings lediglich um die
 Syntax, ich bin noch Neuling in Sachen MySQL.

 Ist es möglich, daß wenn ein Datensatz gefunden wurde ich auch die ID
dieses
 Satzes bekomme? Nachdem ich nämlich weiß, ob der User der ist der er
vorgibt
 zu sein, frage ich die Tabelle noch einmal ab um an die Rechte des Users
 heranzukommen, die ebenfalls in der selben Tabelle abgespeichert sind.

 Hiermit prüfe ich, ob die Daten korrekt sind

 $query = SELECT count(*) FROM $dbt WHERE name='$name' AND pass='$pass';
 $res = mysql_query($query, $db); $ret = mysql_fetch_row($res);

 Ergebnis ist dann in $ret[0].

 Dann mach ich die gleiche Abfrage nochmal, nur diesmal mit allen Angaben

 $query = SELECT * FROM $dbt WHERE name='$name' AND pass='$pass';
 $res = mysql_query($query, $db); $ret = mysql_fetch_array($res);

 Wie gesagt, ich würde gerne wissen ob die ID des Datensatzes schon bei der
 ersten Abfrage zurückgeliefert werden kann. Dann würde eine weitere Suche
in
 der kompletten Table entfallen. Oder kann man die zweite Abfrage evtl.
 einfacher gestalten?

 Gruß
  Marian

Dann ist die bisherige Vorgehensweise wieder nicht mehr empfehlenswert.

Du musst Dir immer eines von vornherein klar machen: Welche Infos möchte ich
von der DB haben - hier jetzt also:
a) ist der User vorhanden
b) stimmen die von ihm gemachten Angaben
c) welche Rechte sind dem User zugewiesen.

Unter diesen Voraussetzungen mit COUNT zu arbeiten ist einfach gesagt
Unsinn.
Du brauchst im Prinzip die Berechtigung des Users, also fragst Du diese
gleich ab.

In der Auswertung prüfst Du dann if(!$result) -hier hast Du also keinen
Datensatz gefunden - entsprechende Fehlermeldung an den Benutzer ausgeben
oder eine entsprechende Routine aufrufen.
andernfalls hast Du den Benutzer gefunden, jetzt kannst Du (wenn Deine
Berechtigungsspalte 'rechte' heißt) dann mit

$query = SELECT id, rechte FROM $dbt WHERE name='$name' AND pass='$pass';
$res = mysql_query($query, $db);
$ret = mysql_fetch_row($res);
$userid = $ret[0];
$recht = $ret[1];

die Berechtigung und ID  auslesen und entsprechend weiterverarbeiten.

Den von Dir beschriebenen Ansatz könnte man auch wählen, sollte man aber
nicht, da Du ja alle Infos schon mit EINER Abfrage bekommen kannst.


Gruß

Rene