danielfpaiva Posted November 3, 2016 at 03:45 AM Report #600095 Posted November 3, 2016 at 03:45 AM Boas pessoal, Estou a implementar um dialog de login utilizando um JQuery dialog no entanto quando clico no botão Login não acontece nada. Pedia caso alguém pudesse que me ajudasse com esta questão. Código do dialogo: <script> $( function() { var dialog, form, name = $( "#name" ), email = $( "#email" ), password = $( "#password" ), allFields = $( [] ).add( name ).add( email ).add( password ); function loginUser() { var imgSrc = email; jQuery.ajax({ type: 'post', url:'admin/bd/login.php', data:{"imgSrc" : imgSrc}, dataType:'json', }); } dialog = $( "#dialog-form" ).dialog({ autoOpen: false, height: 400, width: 350, modal: true, buttons: { "Login": loginUser, Cancel: function() { dialog.dialog( "close" ); } }, close: function() { form[ 0 ].reset(); allFields.removeClass( "ui-state-error" ); } }); form = dialog.find( "form" ).on( "submit", function( event ) { event.preventDefault(); addUser(); }); $( "#login" ).button().on( "click", function() { dialog.dialog( "open" ); }); } ); </script> Na função loginUser faço um pedido AJAX que é responsável por chamar o ficheiro php passando-lhe os parâmetros. Estou a fazer um desenvolvimento usando o WAMP (não sei se tem influência).
HappyHippyHippo Posted November 3, 2016 at 05:11 AM Report #600096 Posted November 3, 2016 at 05:11 AM responde somente a esta questão : em que parte desse código indica a operação a ser efectuada após o "login", que dizes "não fazer nada" ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
danielfpaiva Posted November 3, 2016 at 08:07 AM Author Report #600097 Posted November 3, 2016 at 08:07 AM (edited) 2 hours ago, HappyHippyHippo said: responde somente a esta questão : em que parte desse código indica a operação a ser efectuada após o "login", que dizes "não fazer nada" ? Eu estava a espera que ele chama-se o ficheiro login.php. Neste momento nesse ficheiro só tenho um echo para ver se ele era chamado pelo pedido. Esta a espera que ele ficasse no ficheiro login.php e mostra-se o echo. Estou errado ao assumir isto? Edited November 3, 2016 at 08:09 AM by danielfpaiva
HappyHippyHippo Posted November 3, 2016 at 08:47 AM Report #600098 Posted November 3, 2016 at 08:47 AM "Eu estava a espera que ele chama-se o ficheiro login.php." e como sabes que o ficheiro não é chamado ? "Esta a espera que ele ficasse no ficheiro login.php e mostra-se o echo" Mas afinal pretendes fazer um pedido AJAX ou um simples redirect ? "Estou errado ao assumir isto?" se estás a fazer um pedido AJAX, sim começa pelo principio : estudar https://www.tutorialspoint.com/ajax/what_is_ajax.htm 1 Report IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
danielfpaiva Posted November 3, 2016 at 10:30 AM Author Report #600100 Posted November 3, 2016 at 10:30 AM (edited) 3 hours ago, HappyHippyHippo said: "Eu estava a espera que ele chama-se o ficheiro login.php." e como sabes que o ficheiro não é chamado ? "Esta a espera que ele ficasse no ficheiro login.php e mostra-se o echo" Mas afinal pretendes fazer um pedido AJAX ou um simples redirect ? "Estou errado ao assumir isto?" se estás a fazer um pedido AJAX, sim começa pelo principio : estudar https://www.tutorialspoint.com/ajax/what_is_ajax.htm Se bem percebi vou precisar de fazer os seguintes passos: Criar uma nova instância do objecto XMLHttpRequest(); Ir buscar cada elemento do form; Fazer o mecanismo de login do lado do php; Estou correcto? Desculpa mas sou novo nesta cena de utilizar dialogos JQuery e depois passar a informação para o php Edited November 3, 2016 at 12:25 PM by danielfpaiva
HappyHippyHippo Posted November 3, 2016 at 04:14 PM Report #600105 Posted November 3, 2016 at 04:14 PM estás a fazer um pedido AJAX através da chamada do método jQuery.ajax, o que necessitas é de processar a resposta desse pedido: http://api.jquery.com/jquery.ajax/ IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
danielfpaiva Posted November 4, 2016 at 10:54 AM Author Report #600122 Posted November 4, 2016 at 10:54 AM (edited) 18 hours ago, HappyHippyHippo said: estás a fazer um pedido AJAX através da chamada do método jQuery.ajax, o que necessitas é de processar a resposta desse pedido: http://api.jquery.com/jquery.ajax/ Eu fiz um pouco de debbug e reparei que o ficheiro login.php é chamado no entanto está a devolver a seguinte resposta: <script type="text/javascript"> window.location="../home.php"; </script> <script type="text/javascript"> window.location="../../index.php"; </script> O login.php tem o seguinte código: <?php include ('init.php'); $user = $_POST['username']; $password = $_POST['password']; $enc_pass=md5('$password'); if ($db->query("SELECT * FROM login WHERE Username='$user' and Password='$enc_pass' and Flag='1'")){ ?> <script type="text/javascript"> window.location="../home.php"; </script> <?php } if ($db->query("SELECT * FROM login WHERE Username='$user' and Password='$enc_pass' and Flag='0'")){ ?> <script type="text/javascript"> window.location="../../index.php"; </script> <?php } else { ?> <script type="text/javascript"> alert("Utilizador ou Password incorrectos"); history.back(); </script> <?php } ?> O que queria fazer é caso o uma das queries seja verdadeira então o utilizador é redireccionado para uma das seguintes páginas senão mostrava uma mensagem a dizer login incorrecto. A resposta enviada pelo login.php tem de ser em xml? Edited November 4, 2016 at 10:59 AM by danielfpaiva
danielfpaiva Posted November 4, 2016 at 11:12 AM Author Report #600123 Posted November 4, 2016 at 11:12 AM Alterei o login.php para isto <?php include ('init.php'); $user = $_POST['username']; $password = $_POST['password']; $enc_pass=md5('$password'); if ($db->query("SELECT * FROM login WHERE Username='$user' and Password='$enc_pass' and Flag='1'")){ header('Location: ../home.php'); } if ($db->query("SELECT * FROM login WHERE Username='$user' and Password='$enc_pass' and Flag='0'")){ header('Location: ../../index.php'); } else { header('Location: ../../index.php'); }?> Reparei pelo debbug que o pedido fica com o status 302 (Not found) e chama a index.php no entanto não é mostrada no browser.
danielfpaiva Posted November 4, 2016 at 11:58 AM Author Report #600126 Posted November 4, 2016 at 11:58 AM Já consegui fazer o redirecionamento da página. o script ficou assim (ainda falta um caso): <script> $( function() { ; function loginUser() { var request = $.ajax({ url: 'admin/bd/login.php', type: 'POST', data:{"username" : $("#Username").val(), "password": $("#password").val()}, dataType:'json', cache: false, success:function(data){ if (data == 1){ window.location.href = 'admin/home.php';} else{ window.location.href = 'index.php'; } } }); } dialog = $( "#dialog-form" ).dialog({ autoOpen: false, height: 400, width: 350, modal: true, buttons: { "Login": loginUser, Cancel: function() { dialog.dialog( "close" ); } }, close: function() { form[ 0 ].reset(); allFields.removeClass( "ui-state-error" ); } }); form = dialog.find( "form" ).on( "submit", function( event ) { event.preventDefault(); addUser(); }); $( "#login" ).button().on( "click", function() { dialog.dialog( "open" ); }); } ); </script> o ficheiro login.php ficou assim: <?php include ('init.php'); $user = $_POST['username']; $password = $_POST['password']; $enc_pass=md5('$password'); if ($db->query("SELECT * FROM login WHERE Username='$user' and Password='$enc_pass' and Flag='1'")){ echo json_encode(array('Flag' => '1')); exit; } if ($db->query("SELECT * FROM login WHERE Username='$user' and Password='$enc_pass' and Flag='0'")){ echo json_encode(array('Flag' => '0')); exit; } else { return false; } ?>
HappyHippyHippo Posted November 4, 2016 at 12:00 PM Report #600127 Posted November 4, 2016 at 12:00 PM existe uma coisa que tens de interiorizar, é muito importante ou nunca conseguiras trabalhar a um nive esperado numa grande empresa: - lógica de visualização não é para ser processada no servidor o que quero dizer com isto é que não é da responsabilidade do login.php saber o que a tua página faz. a sua responsabilidade é somente de efectuar login ou não <?php include ('init.php'); $user = $_POST['username']; $password = $_POST['password']; $enc_pass = md5('$password'); // vou assumir "mysqli" // não vou comentar sobre o BOBBY TABLES $rs = $db->query("SELECT Flag FROM login WHERE Username='$user' and Password='$enc_pass'"); if ($rs->num_rows) { echo json_encode([ success => 1, type = $rs->fetch_assoc()['Flag'] ]}; die(); } echo json_encode([ success => 0, type = 0 ]}; jQuery.post({ url:'admin/bd/login.php', data: { "username": email.val(), "password": password.val() }, function (response) { if (!response.success) { // failure } else { if (response.type) { // redirect to success login of type 1 } else { // redirect to success login of type 0 } } }, 'json' }); 1 Report IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
danielfpaiva Posted November 7, 2016 at 11:21 PM Author Report #600238 Posted November 7, 2016 at 11:21 PM On 04/11/2016 at 0:00 PM, HappyHippyHippo said: existe uma coisa que tens de interiorizar, é muito importante ou nunca conseguiras trabalhar a um nive esperado numa grande empresa: - lógica de visualização não é para ser processada no servidor o que quero dizer com isto é que não é da responsabilidade do login.php saber o que a tua página faz. a sua responsabilidade é somente de efectuar login ou não <?php include ('init.php'); $user = $_POST['username']; $password = $_POST['password']; $enc_pass = md5('$password'); // vou assumir "mysqli" // não vou comentar sobre o BOBBY TABLES $rs = $db->query("SELECT Flag FROM login WHERE Username='$user' and Password='$enc_pass'"); if ($rs->num_rows) { echo json_encode([ success => 1, type = $rs->fetch_assoc()['Flag'] ]}; die(); } echo json_encode([ success => 0, type = 0 ]}; jQuery.post({ url:'admin/bd/login.php', data: { "username": email.val(), "password": password.val() }, function (response) { if (!response.success) { // failure } else { if (response.type) { // redirect to success login of type 1 } else { // redirect to success login of type 0 } } }, 'json' }); Obrigado pela ajuda. Só tive que fazer algumas adaptações pois o meu código utiliza PDO e não mysqli. Obrigado pela ajuda.-
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now