Jump to content
danielfpaiva

Passar valores introduzidos num JQuery dialog para um ficheiro PHP

Recommended Posts

danielfpaiva

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).

Share this post


Link to post
Share on other sites
HappyHippyHippo

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

Share this post


Link to post
Share on other sites
danielfpaiva
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 by danielfpaiva

Share this post


Link to post
Share on other sites
HappyHippyHippo

"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

  • Vote 1

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
danielfpaiva

 

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:

  1. Criar uma nova instância do objecto XMLHttpRequest();
  2. Ir buscar cada elemento do form;
  3. 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 by danielfpaiva

Share this post


Link to post
Share on other sites
danielfpaiva
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 by danielfpaiva

Share this post


Link to post
Share on other sites
danielfpaiva

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.

Share this post


Link to post
Share on other sites
danielfpaiva

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;
}

?>

 

Share this post


Link to post
Share on other sites
HappyHippyHippo

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'
});

 

  • Vote 1

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
danielfpaiva
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.-

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.