danielfpaiva 0 Posted November 3, 2016 Report Share Posted November 3, 2016 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). Link to post Share on other sites
HappyHippyHippo 1,162 Posted November 3, 2016 Report Share Posted November 3, 2016 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 Link to post Share on other sites
danielfpaiva 0 Posted November 3, 2016 Author Report Share Posted November 3, 2016 (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 by danielfpaiva Link to post Share on other sites
HappyHippyHippo 1,162 Posted November 3, 2016 Report Share Posted November 3, 2016 "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 Link to post Share on other sites
danielfpaiva 0 Posted November 3, 2016 Author Report Share Posted November 3, 2016 (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 by danielfpaiva Link to post Share on other sites
HappyHippyHippo 1,162 Posted November 3, 2016 Report Share Posted November 3, 2016 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 Link to post Share on other sites
danielfpaiva 0 Posted November 4, 2016 Author Report Share Posted November 4, 2016 (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 by danielfpaiva Link to post Share on other sites
danielfpaiva 0 Posted November 4, 2016 Author Report Share Posted November 4, 2016 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. Link to post Share on other sites
danielfpaiva 0 Posted November 4, 2016 Author Report Share Posted November 4, 2016 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; } ?> Link to post Share on other sites
HappyHippyHippo 1,162 Posted November 4, 2016 Report Share Posted November 4, 2016 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 Link to post Share on other sites
danielfpaiva 0 Posted November 7, 2016 Author Report Share Posted November 7, 2016 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.- Link to post Share on other sites
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