Zwischen 2 funktionen erkennen

Knotschi

Mitglied
Hi an alle :)

habe folgendes Problem...
ich habe ein login mit 2 eingabe texten:
1. userName
2. userPasswort

und ein login button wo dieses script drauf ist:
Code:
on (release) {
	if (userName.length>0 && userPassword.length>0) {
		myVars = new LoadVars();
		myVars.username = userName.text;
		myVars.pass = userPassword.text;
		myVars.action = 'login';
//		myVars.adminname = userName.text;
//		myVars.adminpass = userPassword.text;
//		myVars.action = 'admin';
		myVars.sendAndLoad(php_file, myVars, 'POST');
		myVars.onLoad = function() {
			if (!this.error && this.user>0) {
				gotoAndStop('registered');
			} else {
				gotoAndStop('no_registered');
			}
			userName.selectable = true;
			userPassword.selectable = true;
			loginButton.enabled = true;
		};
	} else {
		status = "Bitte Füllen Sie die Felder richtig aus!";
	}
	userName.selectable = true;
	userPassword.selectable = true;
	loginButton.enabled = true;
}

Ich will den gleichen login benutzen für User und Admin... Nur dass wenn der Admin sich einlogt nicht zu:
gotoAndStop('registered');

sondern zu:

gotoAndStop('admin'); zum Beispiel springt
wie mache ich es, dass Flash erkennt, wenn der Admin sich einlogt, dass dann dies hier gillt ( AUf dem gleichen Login Button):
myVars.adminname = userName.text;
myVars.adminpass = userPassword.text;
myVars.action = 'admin'

Mein PHP Script ist dies hier:

PHP:
<?
require_once('conf.inc.php');
require_once('functions.php');
// ---
// register new user
// ---
function register($username,$pass,$email,$question,$answer)
{
   GLOBAL $db, $table;
   $username = trim($username);
   $pass = trim($pass);
   $email = trim($email);
   $question = addslashes(trim($question));
   $answer = addslashes(trim($answer));
   $validEmail = valid_email($email);
   $validName = valid_userName($username);
   $validPass = valid_password($pass);
   if(!$validName) return "error=invalid name";
   if(!$validPass) return "error=invalid password";
   if(!$validEmail) return "error=invalid email";
   $pass = md5(trim($pass));
   // all checks ok
   $query = @mysql_query("INSERT INTO $table (userName,userPassword,userMail,userQuestion,userAnswer) VALUES "
   ."('$username','$pass','$email','$question','$answer')");
   if(!$query)
   {
      return "error=" . mysql_error();
   } else {
      return "user=ok";
   }
}
// ---
// login, check user
// ---
function login($username,$pass)
{
   GLOBAL $db,$table;
   $username = trim($username);
   $pass = md5(trim($pass));
   $query = mysql_query("SELECT * FROM $table WHERE userName = '$username' AND userPassword = '$pass'");
   return mysql_num_rows($query);
}

// ---
// ---
// Admin check 
// ---
function admin($adminname,$adminpass)
{
   GLOBAL $db,$table2;
   $adminname = trim($adminname);
   $adminpass = md5(trim($adminpass));
   $query = mysql_query("SELECT * FROM $table2 WHERE adminName = '$adminname' AND adminPass = '$adminpass'");
   return mysql_num_rows($query);
}

// ---
// forget password
// ---
function forget($email)
{
   GLOBAL $db,$table;
   $email = trim($email);
   $query = mysql_query("SELECT userName, userQuestion from $table WHERE userMail = '$email'");
   if(mysql_num_rows($query)<1)
   {
      return "error=email not present into database";
   }
   $row = mysql_fetch_array($query);
   return "userName=$row[userName]&userQuestion=" . stripslashes($row['userQuestion']);
}

// ---
// generate new password
// ---
function new_password($username,$email,$answer)
{
   GLOBAL $db,$table;
   $username = trim($username);
   $email = trim($email);
   $answer = addslashes(trim($answer));
   $query = mysql_query("SELECT * FROM $table WHERE userName = '$username' AND userMail = '$email' AND userAnswer = '$answer'");
   if(mysql_num_rows($query) < 1)
   {
      return "error=wrong answer";
   }
   $rand_string = '';
   // ---
   // generating a random 8 chars lenght password
   // ---
   for($a=0;$a<7;$a++)
   {
      do
      {
         $newrand = chr(rand(0,256));
      } while(!eregi("^[a-z0-9]$",$newrand));
      $rand_string .= $newrand;
   }
   $pwd_to_insert = md5($rand_string);
   $new_query = mysql_query("UPDATE $table SET userPassword = '$pwd_to_insert' WHERE userName = '$username' AND userMail = '$email'");
   if(!$new_query)
   {
      return "error=unable to update value";
   }
   return "userName=$username&new_pass=$rand_string";
}

// ---
// decisional switch
// ---
if(isset($HTTP_POST_VARS["action"]))
{
   switch($HTTP_POST_VARS["action"])
   {
      case "register":
         $result = register($HTTP_POST_VARS['username'],$HTTP_POST_VARS['pass'],$HTTP_POST_VARS['email'],$HTTP_POST_VARS['question'],$HTTP_POST_VARS['answer']);
         print $result;
         break;
      case "login":
         $result = login($HTTP_POST_VARS['username'],$HTTP_POST_VARS['pass']);
         print "user=" . $result;
         break;
      case "admin":
         $result = admin($HTTP_POST_VARS['adminname'],$HTTP_POST_VARS['adminpass']);
         print "user=" . $result;
         break;
      case "forget":
         $result = forget($HTTP_POST_VARS['email']);
         print $result;
         break;
      case "new_password":
         $result = new_password($HTTP_POST_VARS['username'],$HTTP_POST_VARS['email'],$HTTP_POST_VARS['answer']);
         print $result;
         break;
   }
}
?>

Hoffe ich hab es nicht zu schlecht beschrieben :D

lg und Dank im voraus

Nico
 
Hi,

da Du zum Zeitpunkt des Absendens nicht wissen kannst, ob sich ein User oder der Admin einloggt (es sei denn, der Admin-Benutzername ist in Flash hartkodiert oder Du setzt in Flash eine Checkbox für den Login-Typ), solltest Du diese Überprüfung erst mit PHP durchführen:

Übergib keinen Admin-Wert für die Aktion, sondern rufe immer die Funktion login auf. Dort überprüfst Du, ob es sich bei der Benutzername-Passwort-Kombination um die eines Admins handelt (kann ja als Flag in der dB stehen), und gibst in diesem Fall eine Info an Flash zurück:
PHP:
echo("admin=true");
In der onLoad-Methode überprüfst Du nun diesen Wert:
Code:
myVars.onLoad = function() {
	if (!this.error && this.user>0) {
		if (this.admin == "true") {
			gotoAndStop("admin");
		} else {
			gotoAndStop('registered');
		}
	} else {
		gotoAndStop('no_registered');
	}
	userName.selectable = true;
	userPassword.selectable = true;
	loginButton.enabled = true;
}

Gruß
.
 
Hallo,

wenn der Status eines Users (Admin oder User) nur in der Datenbank gespeichert ist, kommst du um eine serverseitige Überprüfung nicht herum. Ich persönlich hätte die Admins nicht in einer separaten Tabelle abgelegt, aber ich kenn ja die Umstände nicht.
So bleibt dir eigentlich bloss folgender Ablauf:

1. Login-Daten an den Server schicken
2. Überprüfung der Admin-Tabelle, wenn die Daten vorhanden sind, eine entsprechende Variable (z.B. "action") mit "admin" belegen, wenn nein...
3. Überprüfung der User-Tabelle, wenn die Daten vorhanden sind, "action" mit "registered" belegen, wenn nicht, Fehler generieren
4. "action" bzw. Fehler zurückgeben
5. gotoAndStop mit dem "action"-Rückgabewert als Parameter ausführen.


gruss

EDIT: Arrgh ;)
 
Hi :)

Also das in Flash ist super und auch klar...

aber in PHP wo und wie schreibe ich das genau rein?
und was meinst du mit Flasg in der DB
hab sowas noch nie gehört sry :D

lg
 
Zuletzt bearbeitet:
Hi,

Quick&Dirty:

PHP:
      case "login":
         $result = login($HTTP_POST_VARS['username'],$HTTP_POST_VARS['pass']);
         if ($result == 0) {
                  $result = admin($HTTP_POST_VARS['username'],$HTTP_POST_VARS['pass']);
                  if ($result) {
                           print "user=1&admin=1";
                  } else {
                           print "user=0";
                  }
         } else {
                  print("user=1&admin=0");
         }
         break;

Ein "Flag" ist eine Kontrollvariable, die in der Regel eine Eigenschaft durch einen dichtomen Wert anzeigt. Ich hatte bei meinem ersten Posting übersehen, dass Du zwei verschiedene Tabellen für die Benutzer und die Admins hast - in sofern ist ein solches "Flag" überflüssig.

Gruß
.
 
Es funktioniert!

You are the best! =D=D

musste nur anstatt
if (this.admin == "true") {

===>>>>>>>

if (this.admin == "1") {

setzen

AS:

Code:
		myVars.onLoad = function() {
			if (!this.error && this.user>0) {
				if (this.admin == "1") {
					gotoAndStop("admin");
				} else {
					gotoAndStop('registered');
				}
			} else {
				gotoAndStop('no_registered');
			}
			userName.selectable = true;
			userPassword.selectable = true;
			loginButton.enabled = true;
		};
}


lg und tausend Dank
 
Zuletzt bearbeitet:
Hi,

in Flash muss es dann natürlich heissen:
Code:
if (this.admin == "1") {
Du gibst ja mit PHP aus:
PHP:
print "user=1&admin=1";

Gruß
.
 

Neue Beiträge

Zurück