PDA

Volledige versie bekijken : Inloggen Flash en PHP.


HM_Jammer
%Europe/Berlin %575 %2005, 14:48
Hoi,

Voor mijn site, wil ik een inlog filmpje maken m.b.v. PHP. Het filmpje is zo goed als af, maar... ik zit met een probleempje, het zit als volgt:

Als je op een button klikt, post hij d.m.v sendAndLoad 2 variabelen, nl: email en pass.

Tot zover alles ok denk ik. Maar dan gebeurt het volgende, hij moet dan beginnen die animatie te spelen, dat lukt ook nog. Dus ook OK.

het begint met 15 frames die voor iedereen te zien moeten zijn, of je login nu goed of fout is. Je krijgt dan een deur te zien.

Als je login goed is, ga je door naar de volgende 15 frames, waarbij je de deur ziet opengaan en vriendelijk welkom wordt geheten op de site.
Mocht je login fout zijn, sla je die 15 frames over en ga je (bij frame 31) verder. Dan krijg je "Access denied", met allemaal knipperende lampjes etc te zien.

Maar, wat voor script hoort daarbij? ik heb namelijk geen id! Op de button staat alleen een _root.gotoAndPlay(2) (waarbij je dus de deur alleen te zien krijgt) en verder... ik heb geen id! Ik moet ergens een new loadVars(); instoppen, maar waar, ik denk zelf eigenlijk bij dit frame: 15, met het volgende script:
stop();
var reply_lv = new LoadVars();
var send_lv = new LoadVars();
send_lv.email = email;
send_lv.pass = pass;
send_lv.sendAndLoad("login.php", reply_lv, "POST");
reply_lv.onLoad = loadedDotNetVars;
function loadedDotNetVars(success) {
if (success) {
if (_root.login=1) {
gotoAndPlay(16);
trace(reply_lv.login);
trace(reply_lv.pass);
}
}
}
if (_root.login != 1) {
gotoAndPlay(31);
} else {
gotoAndPlay(31);
}

En dit staat in mijn php file (login.php):
<?php
$q = mysql_query("SELECT * FROM `players` WHERE `email`='{$_POST['email']}' AND `pass`='{$_POST['pass']}'");
$q2 = mysql_num_rows($q);
if($q2 != 1) {
$login = "&login=";
$login .= $q2;

echo $login;
exit;
}
elseif (mysql_num_rows($q) == 1) {
$user = mysql_fetch_object($q);
$_SESSION['user'] = $user->user;
$_SESSION['email'] = $_POST['email'];
$_SESSION['pass'] = $_POST['pass'];
print "Welcome back. Please click <a href=updates.php>here</a> to continue..";
$login = "&login=";
$login .= $q2;

echo $login;
}
?>

Maar klopt dat wel? ik denk zelf eigenlijk van niet...
Er staan 2 invoervelden met de instance namen: email en pass
en een dynamic txtfield: login.

Iemand tips en/ of verbeterpunten? maar het liefst een oplossing, in de vorm van aanwijzingen? Want het werkt niet.
B.V.D


Greetz,
Pieter

Flashingback
%Europe/Berlin %598 %2005, 15:22
het enige wat ik kan zien is dat je geen connectie maakt met je mysql db of heb je die hier voor de veiligheid er ff uitgehaald?

latino
%Europe/Berlin %353 %2005, 09:28
if (_root.login != 1) {
gotoAndPlay(31);
} else {
gotoAndPlay(31);
}

if (_root.login=1) {
gotoAndPlay(16);
trace(reply_lv.login);
trace(reply_lv.pass);
}

dit gaat ie niet snappen

maak er dit van

function loadedDotNetVars(success) {
if (success) {
if (_root.login=1) {
gotoAndPlay(16);
trace(reply_lv.login);
trace(reply_lv.pass);
}else{
gotoAndPlay(31);

}
}
}

Roenes
%Europe/Berlin %432 %2005, 11:22
dit:if (_root.login=1) {moet een dubbele is zijn:if (_root.login==1) {

HM_Jammer
%Europe/Berlin %863 %2005, 21:43
ok, nu klopt hij al wat meer, maar, hij komt nu niet verder dan het laten verschijnen van de deur, van de rest is nu geen sprake meer, dus geen Access denied, of opengaan van een deur.. kan het zijn dat het niet werkt, omdat ik de variabelen verzend, 15 frames, voordat ik de file open? of omdat ik de variabelen naar mijn idee niet ophaal?

HM_Jammer
%Europe/Berlin %815 %2005, 20:34
OK, het werkte dus niet :S Nu heb ik een ander script van mij omgebouwd en iets beter verwerkt vind ik zelf ;)
Nl:

Op de button:
on (release) {
if (_level0.email.length>2 && _level0.pass.length>2) {
gotoAndPlay(2);
} else {
trace("wel geldig emailadres en wachtwoord invullen graag");
}
}

Hij begint te spelen bij frame 2, je krijgt een deur te zien, bij frame 15 aangekomen (de deur is inmiddels helemaal verschenen) staat er het volgende:
_root.sendTheForm();

Dit slaat op een layer die de hele movie beslaat met het volgende script :
function sendTheForm()
{
send_lv.email = email.text;
send_lv.pass = pass.text;

//denk erom in testMovie moet dit wel een online staand (of local server) werkend script zijn
send_lv.sendAndLoad("login2.php", reply_lv, "POST");
}
var reply_lv = new LoadVars();
var send_lv = new LoadVars();
reply_lv.onLoad = loadedDotNetVars;

function loadedDotNetVars(success)
{
if (success) {
loadVariables("login2.php", "_self", "POST");
status_txt.text = (reply_lv.login == "1") ? gotoAndPlay(16) : gotoAndPlay(31);
trace(reply_lv.email+"\n"+reply_lv.pass);
} else {
gotoAndPlay(31);
}
}

Dan gaat hij of naar het opengaan vna de deur (frame 16) of naar Access denied (frame 31).

Op frame 30 staat (de deur is net helemala opengegaan):
stop();
getURL("updates.php", "_self", "POST");

En dit is het script van login2.php:
<?php
include("config.php");
$q = mysql_query("SELECT * FROM `players` WHERE `email`='{$_POST['email']}' AND `pass`='{$_POST['pass']}'");
$q2 = mysql_num_rows($q);
if($q2 != 1) {
$login = "&login=";
$login .= $q2;

echo $login;
exit;
}
elseif (mysql_num_rows($q) == 1) {
$user = mysql_fetch_object($q);
$_SESSION['user'] = $user->user;
$_SESSION['email'] = $_POST['email'];
$_SESSION['pass'] = $_POST['pass'];
$login = "&login=";
$login .= $q2;

echo $login;
}
?>

Nu werkt het script wel, maar krijg ik alleen nog maar een foutmelding, als ik updates.php open (die dus loginbeveiligd is) nl: Invalid Login. Als ik dat oplos, werkt het, maar... hoe? zit hier nog ergens een fout in?

latino
%Europe/Berlin %860 %2005, 21:39
2 opmerkingen:

1. Waarom on (release) { en niet op de timeline zelf? geef de button een instancenaam en doe dit dan button_btn.onRelease = function(){};
2. loadVariables("login2.php", "_self", "POST"); : waarom loadvariables en _self..gebruik hier ook loadvars en _slef moet dus naar de loadvars verwijzen of een andere loadvars
3. zorg dat je geen oude cache ophaalt dus maak er dit van:
send_lv.sendAndLoad("login2.php"+int(Math.random()*100000, reply_lv, "POST");

HM_Jammer
%Europe/Berlin %953 %2005, 23:52
@ latino:
1. ik heb nog niet helemaal gesnapt hoe dat werkt, miss een voorbeeldje? of een uitleg?
2. Die targets snap ik ook niet helemaal, die loadVariables vervangen door: ?
3. Bedankt! direct vervangen!

HM_Jammer
%Europe/Berlin %961 %2005, 00:04
@latino
1. Ik heb dat niet helemaal gesnopen, dit werkt nl ook...
2. Hoe zou ik dat in moeten voeren, zodat het wel een loadVars is?
3. Je was een ) vergeten, maar die staat erin hoor! Bedankt!

latino
%Europe/Berlin %315 %2005, 08:34
1. alle code op de timeline is makkelijker ipv sommige code aan buttons of movieclips en andere weer op de hoofd timeline
2. je maakt zelf een reply_lv.onLoad = loadedDotNetVars;
dus moet je ook dit doen:

reply_lv.sendAndLoad("login2.php", reply_lv, "POST");

ipv

loadVariables("login2.php", "_self", "POST");

3. :)

o ja ik zie nog wat:

status_txt.text = (reply_lv.login == "1") ? gotoAndPlay(16) : gotoAndPlay(31);

gaat niet werken want nu wil je een actie naar een tekstveld schrijven :confused:

maak er gewoon dit van:

if (success) {

if(this.login == 1){
gotoAndPlay(16);
// volgens mij kun je hier die heel loadvariables weglaten aangezien je
variablen uit php al in de reply_lv zitten dat heb je namelijk eerder
al gedaan: send_lv.sendAndLoad("login2.php", reply_lv, "POST");


} else {
gotoAndPlay(31);
}
}


en je wil door middel van trace ( trace("wel geldig emailadres en wachtwoord invullen graag"); ) iets aan de gebruiker tonen volgens mij kan dat niet.je moet dat in een dynamisch tekstveld schrijven

als laatste:

je schrijft: Nu werkt het script wel, maar krijg ik alleen nog maar een foutmelding, als ik updates.php open (die dus loginbeveiligd is) nl: Invalid Login. Als ik dat oplos, werkt het, maar... hoe? zit hier nog ergens een fout in?


je zegt twee keer dat het werkt dus wat is het probleem :D ;)

HM_Jammer
%Europe/Berlin %362 %2005, 09:42
de movie werkte wel, maar, het inloggen zelf niet, dus werkte het ook weer niet... zou iemand hem misschien eventjes voor mij na willen kijken? en dan alles verandert wat fout is?
Dat is misschien wel wat teveel gevraagd... maar zelf lukt het me niet... of zal ik het later op de dag even posten op het forum?

B.V.D
Pieter

latino
%Europe/Berlin %365 %2005, 09:46
zet maar een zipje dan kijk ik even

HM_Jammer
%Europe/Berlin %531 %2005, 13:45
Ok, bij deze...

latino
%Europe/Berlin %597 %2005, 15:19
zo ik heb even je code aangepast...ook even de button code naar de timeline gehaald..deze doet het meteen beter

als het goed is moet ie het doen

Cowerd
%Europe/Berlin %665 %2005, 16:58
@latino
ik zag wel een klein foutje in jou zip..
er stond dat hij de volgende pagina niet kon openen:
"index2.php0"

Dus @ HM_Jammer:
je moet die nul even weghalen...

lasdesigner
%Europe/Berlin %732 %2005, 18:34
gebruik superglobals, en als je ze gebruikt doe het wel goed dus (zoals je in je query had)

niet zo:

$_POST['jeding']
maar
<?php
'".$_POST['jeding']."';
?>

lasdesigner
%Europe/Berlin %734 %2005, 18:37
waar is je <?php session_start(); ?> die moet helemaal bovenaan de pagina !!

twan
%Europe/Berlin %883 %2005, 22:11
Ook is het verstandig om een filter op de POST data te gooien. Nu is de code namelijk vulnerable voor SQL injection. Zoals ik de code nu lees worden wachtwoorden ook als plain tekst in de database opgeslagen, ook niet echt verstandig. Als je het dan helemaal ideaal wilt hebben zorg je dat het wachtwoord client-side, dus al voor de POST, MD5 gehashed wordt ;).

flashfreak
%Europe/Berlin %896 %2005, 22:31
@cowerd
Het is normaal dat dat niet gaat, daar ze een random gebruikt voor de php =>anti-caching