Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL][FLASH]Problem z przesłaniem zmiennej sesji do flasha
Forum PHP.pl > Forum > Przedszkole
piotrek x
Witam!
Mam skrypt logowania we flashu wykorzystujący php mysql i actionscript.
Mój problem polega na tym ze nie mogę w polu dynamic text wyświetlić daty ostatniego logowania, którą tworze w sesji.
Oto skrypt php:

  1.  function login($username,$pass) {  
  2.      $now = '<b>'.date('d.m.Y').'</b> <i>'.date('H:i:s').'</i>';  
  3.    if (isset($_SESSION['last'])) {  
  4.        $login_data = 'ostatnio logowales sie: '. $_SESSION['last'];      
  5.        $_SESSION['last'] = $now;  
  6.    } else {  
  7.        $_SESSION['last'] = $now;  
  8.        $login_data = 'nigdy sie nie logowales';  
  9.    }  
  10.        $username = trim($username);  
  11.   $pass = md5(trim($pass));  
  12.   $query = mysql_query("SELECT * FROM $table WHERE userName = '$username' AND userPassword = '$pass'");  
  13.   return mysql_num_rows($query);  
  14. }  
  15. // decisional switch  
  16. // ---  
  17. if(isset($HTTP_POST_VARS["action"])) {  
  18.  
  19.   switch($HTTP_POST_VARS["action"]) {  
  20.      
  21.      case "register":  
  22.         $result = register($HTTP_POST_VARS['username'],$HTTP_POST_VARS['pass'],$HTTP_POST_VARS['email'],$HTTP_POST_VARS['question'],$HTTP_POST_VARS['answer']);  
  23.         print $result;  
  24.         break;  
  25.      case "login":  
  26.         $result = login($HTTP_POST_VARS['username'],$HTTP_POST_VARS['pass']);  
  27.         print "user=" . $result;  
  28.         break;  
  29.   }
  30. ?>
wookieb
1) bbcode
2) nie zwracasz nic z funkcji login
3) A ja już liczyłem ze coś z flashem sad.gif
piotrek x
A w AS mam :
Kod
1 kaltka

stop();
_root.onEnterFrame = function()
{
    if(this.getBytesLoaded() >= this.getBytesTotal())
    {
        this.gotoAndStop('main');
        this.onEnterFrame = undefined;
    }
}

2 klatka

loginButton.onRelease = function() {  
    ooDane.load('user.php');
};

var ooDane=new LoadVars();
ooDane.onLoad = function(sukces) {
    if(sukces){
        pt1.text=ooDane.login_data;
    }else{
        pt1.text='Błąd importu danych';
    };
};
stop();

i buton (też 2 klatka):

on (release, keyPress "<Enter>") {
    if (userName.length>0 && userPassword.length>0) {
        myVars = new LoadVars();
        myVars.username = userName.text
        myVars.pass = userPassword.text
        myVars.action = 'login';
        myVars.sendAndLoad(php_file, myVars, 'POST');
        myVars.onLoad = function() {
            if (!this.error && this.user>0) {
                _root.gotoAndStop('registered');
            } else {
                _root.gotoAndStop('no_registered');
            }
            userName.selectable = true;
            userPassword.selectable = true;
            loginButton.enabled = true;
        };
        userName.selectable = false;
        userPassword.selectable = false;
        loginButton.enabled = false;
    }


I w tym momencie wyświetla mi 'Błąd importu danych'. Gdy próbuje w którymś momencie php wysłać echo $login_data to albo nie mogę się zalogować albo nie działa... Jak przesłać $login_data?

Przepraszam ze w 2 postach, ale mi się nie zmieściło...
wookieb
W moim poprzednim poscie pisze ze zapomniales o returnie w funkcji login.
Flash jest ok.
piotrek x
nawet jak na sztywno ustawie $login_data
(tak case wygląda)
  1. <?php
  2. case "login":
  3.           $result = login($HTTP_POST_VARS['username'],$HTTP_POST_VARS['pass']);
  4.         print "user=" . $result;
  5.            print "login_data=2008";
  6.            break;
  7. ?>

nie mogę się wtedy zalogować, jakby nie rozpoznawał użytkownika

Natomiast w tym przypadku wszystko działa jak należy, z wyjątkiem wyświetlania daty:
  1. <?php
  2. case "login":
  3.            $result = login($HTTP_POST_VARS['username'],$HTTP_POST_VARS['pass']);
  4.          print "user=" . $result;
  5.             //print "login_data=2008";
  6.             break;
  7. ?>
wookieb
Struktura danych dla loadVars to
Kod
zmienna=wartosc&kolejna_zmienna=wartosc

wiec brakuje ci &
Poza tym jeszcze raz sprawdz co ci zwraca funkcja login.
Mephistofeles
$HTTP_POST_VARS jest już dawno przestarzałe. Dziś używa się się $_POST.
piotrek x
Cytat(Mephistofeles @ 16.03.2009, 10:30:21 ) *
$HTTP_POST_VARS jest już dawno przestarzałe. Dziś używa się się $_POST.


Ok poprawione.

Zmieniłem trochę tą funkcje (nie wiem czy dobrze) żeby mi zwracało tą zmienną i teraz jest tak:
  1. <?php
  2. function login($username,$pass,$login_data) {
  3.    
  4.     $now = '<b>'.date('d.m.Y').'</b> <i>'.date('H:i:s').'</i>';
  5.    if (isset($_SESSION['last'])) {
  6.        $login_data = 'ostatnio logowales sie: '. $_SESSION['last'];    
  7.        $_SESSION['last'] = $now;
  8.    } else {
  9.        $_SESSION['last'] = $now;
  10.        $login_data = 'nigdy sie nie logowales';
  11.    }
  12.    
  13.    GLOBAL $dbc, $table;
  14.   $username = trim($username);
  15.   $pass = md5(trim($pass));
  16.   $query = mysql_query("SELECT * FROM $table WHERE userName = '$username' AND userPassword = '$pass'");
  17.    $array = mysql_fetch_array($query);
  18.    $array['login_data'] = $login_data;
  19.   return $array;
  20. }
  21. ?>


Jednak dalej mi nie działa, nie wykrywa użytkownika... dodatkowo zamieszczam case:
  1. <?php
  2. case "login":
  3.           $result = login($_POST['username'],$_POST['pass'],$_POST['login_data']);
  4.         print $result;
  5.            break;
  6. ?>
wookieb
Ech...
  1. <?php
  2. print $result;
  3. ?>

Przecież funkcja zwraca ci tablicę więc jak ty chcesz ją wyświetlić?
Pokaże ci co najwyżej "Array"... Zastanów się trochę.
piotrek x
poprawiłem na:
  1. <?php
  2. print "username= ".$array['username']&"pass=".$array['pass']&"login_data=".$array['login_data'];
  3. ?>

Ale dalej nie mogę sie zalogować...
wookieb
we flashu
Kod
myVars.onLoad = function() {
trace(unescape(this.toString()));
            if (!this.error && this.user>0) {
                _root.gotoAndStop('registered');
            } else {
                _root.gotoAndStop('no_registered');
            }
            userName.selectable = true;
            userPassword.selectable = true;
            loginButton.enabled = true;
        };

I swf'a testuj przez "Test movie" w programie Flash
Zobaczysz co pokazuje ci ta strona i to nam wklej.
piotrek x
Kod
"login_data=".$array['login_data'];

             break;

       case "forget":

          $result = forget($_POST['email']);

          print $result;

          break;

       case "new_password":

          $result = new_password($_POST['username'],$_POST['email'],$_POST['answer']);

          print $result;

          break;

    }



    

}?>



&"pass=".$array['pass']&new_pass=$rand_string";

}



// ---

// decisional switch

// ---

if(isset($_POST["action"])) {



    switch($_POST["action"]) {

    

       case "register":

          $result = register($_POST['username'],$_POST['pass'],$_POST['email'],$_POST['question'],$_POST['answer']);

          print $result;

          break;

       case "login":

            $result = login($_POST['username'],$_POST['pass'],$_POST['login_data']);

          print "username= ".$array['username']&userQuestion=" . stripslashes($row['userQuestion']);

}



// ---

// generate new password

// ---

function new_password($username,$email,$answer) {

    GLOBAL $dbc, $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&<? session_start();

require_once('sql/mysql_connect.php');

require_once('functions.php');

// ---

// register new user

// ---

function register($username,$pass,$email,$question,$answer)

{

    GLOBAL $dbc, $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,$login_data) {

    

      $now = '<b>'.date('d.m.Y').'</b> <i>'.date('H:i:s').'</i>';

     if (isset($_SESSION['last'])) {

         $login_data = 'ostatnio logowales sie: '. $_SESSION['last'];    

         $_SESSION['last'] = $now;

     } else {

         $_SESSION['last'] = $now;

         $login_data = 'nigdy sie nie logowales';

     }

     session_write_close();

    

     GLOBAL $dbc, $table;

    $username = trim($username);

    $pass = md5(trim($pass));

    $query = mysql_query("SELECT * FROM $table WHERE userName = '$username' AND userPassword = '$pass'");

     $array = mysql_fetch_array($query);

     $array['login_data'] = $login_data;

    return $array;

}



// ---

// forget password

// ---

function forget($email) {

    GLOBAL $dbc, $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]&onLoad=[type Function]&action=login&pass=test&username=test
wookieb
Jezeli to ci pokazuje wynik trace tzn ze masz zły składniowo plik .php. Wrzuć go całego na wklej.org i zapodaj link.
piotrek x
http://wklej.org/id/66525/
wookieb
Zamień na chwile $_POST na $_GET i sprobuj wywoływac sobie funkcje logowania z adresu
http://localhost/twoj_skrypt.php?action=lo...;username=login itd.
Zobacz czy działa ci wszystko i wtedy kombinuje we flashu.
Poza tym WTF?
  1. <?php
  2. $result = login($_POST['username'],$_POST['pass'],$_POST['login_data']);
  3.         print "username= ".$array['username']&"pass=".$array['pass']&"login_data=".$array['login_data'];
  4.            break;
  5. ?>

Najpierw masz $result a potem uzywasz $array.
Przejrzyj WSZYSTKO dokładnie.

Poza tym nie używa się juz eregi tylko preg_match
piotrek x
Cytat
Najpierw masz $result a potem uzywasz $array.
- Nie byłem pewien i próbowałem 2 wariantów ale nie działało... Ok już poprawione.
Cytat
Zamień na chwile $_POST na $_GET i sprobuj wywoływac sobie funkcje logowania z adresu
http://localhost/twoj_skrypt.php?action=lo...;username=login itd.
Zobacz czy działa ci wszystko i wtedy kombinuje we flashu.

Nic z tego nie działa... :/


Ten skrypt jest pewną przeróbką znalezionego w internecie... problem w tym ze nie mogę go tak zmodyfikować żeby działał z tą datą pobieraną z sesji. Bez tej daty działa i mogę się zalogować.
Już po pewnych modyfikacjach skrypt wygląda tak:
http://wklej.org/id/66551/ i wszystko działa jak należy, można się zalogować.
Mój skrypt prawdopodobnie będzie korzystał tylko z funkcji login, ale optymalizacje chciałem przeprowadzić dopiero po tym jak wszystko będzie działać.

Dodaje też do pobrania dokument .fla
http://www.easy-share.com/1904095676/user_auth.fla
wookieb
Boże cały temat i nikt z nas nie zauważył błędu logicznego :/
Nie przechowuje sie w sesji ostatniej daty zalogowania użytkownika tylko w bazie, bo przecież sesja ginie po jakimś czasie (no chyba, że ją ustawiłeś na parę lat...)
Utwórz w tabeli pole last_login_time i tam zapisuj datę ostatniego zalogowania a następnie ją przekaż do flasha.
piotrek x
Cytat(wookieb @ 19.03.2009, 17:16:06 ) *
Boże cały temat i nikt z nas nie zauważył błędu logicznego :/
Nie przechowuje sie w sesji ostatniej daty zalogowania użytkownika tylko w bazie, bo przecież sesja ginie po jakimś czasie (no chyba, że ją ustawiłeś na parę lat...)
Utwórz w tabeli pole last_login_time i tam zapisuj datę ostatniego zalogowania a następnie ją przekaż do flasha.


Ok...
Ale chyba nie w tym problem...
Załóżmy że chcę tą datę ustalić na stałe (np. 2003) to tworze:
  1. <?php
  2. $result = login($_POST['username'],$_POST['pass']);
  3. print "user=" . $result;&"login_data=2003";
  4. ?>
Chyba wszystko ok, ale jednak nie mogę się wtedy zalogować.

Jak jest samo
  1. <?php
  2. print "user=" . $result
  3. ?>
to mogę się zalogować, lecz flash wywala błąd importu danych ostatniego logowania (bo nie ma czego zaimportować :/)

Jeszcze próbowałem taką opcje:
  1. <?php
  2. print "user=" . $result;
  3. print "&login_data=2003";
  4. ?>

W ten sposób mogę się zalogować ale również występuje błąd importu danych lub _level0.pt1 ( nie wiem od czego to 2 się bierze i co zrobić by ponownie sie wyświetliło, po prostu czasami tak wyskakuje zamiast błędu importu. pt1 to pole tekstowe)
wookieb
  1. <?php
  2. echo 'user='.$result['userName'].'&login_data=2003';
  3. ?>

Jeżeli to nic nie da to daj samo
  1. <?php
  2. echo 'user=login&login_data=2003';
  3. ?>
piotrek x
Udało mi się rozwiązać problem biggrin.gif:D:D thumbsupsmileyanim.gif
Zrobiłem to tak:
Stworzyłem nowy dokument php, a w nim:
  1. $now = date('d.m.Y. H:i:s');  
  2.   if (isset($_SESSION['last'])) {  
  3.       print "login_data=ostatnio logowales sie:". $_SESSION['last'];      
  4.       $_SESSION['last'] = $now;  
  5.   } else {  
  6.       $_SESSION['last'] = $now;  
  7.       print "login_data=nigdy sie nie logowales";  
  8.   }  
  9. ?>


I działa. biggrin.gif

Tylko chciałbym jeszcze żeby po kliknięciu <Enter> działało. (Na razie działa tylko po kliknięciu myszą.)

Kod
loginButton.onRelease = function() {

Jak to zmodyfikować?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.