Foros del Web » Programando para Internet » Jquery »

Sesión con jQuery, PHP y base de datos

Estas en el tema de Sesión con jQuery, PHP y base de datos en el foro de Jquery en Foros del Web. Hola! Disculpen la molestia, estoy creando un formulario para el inicio de sesión usando jQuery, PHP y base de datos, no tengo demasiada experiencia en ...
  #1 (permalink)  
Antiguo 11/12/2010, 13:22
 
Fecha de Ingreso: diciembre-2008
Mensajes: 38
Antigüedad: 16 años
Puntos: 0
Sesión con jQuery, PHP y base de datos

Hola! Disculpen la molestia, estoy creando un formulario para el inicio de sesión usando jQuery, PHP y base de datos, no tengo demasiada experiencia en la utilización de estos lenguajes, recién estoy aprendiendo y la verdad es que no puedo hacerlo funcionar, les dejo el código a continuación:

XHTML:

Código HTML:
<?php
	session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es-ar" lang="es-ar" dir="ltr">
<head>
<!-- CSS Documents -->
<link rel="stylesheet" type="text/css" media="screen" href="css/reset.css" charset="utf-8" />
<link rel="stylesheet" type="text/css" media="screen" href="css/mainContent.css" charset="utf-8" />
<link rel="stylesheet" type="text/css" media="screen" href="css/jquery-ui-1.8.4.custom.css" charset="utf-8" />
<!-- Scripts -->
<script type="text/javascript" src="scripts/js/jquery-1.4.4.min.js"></script>
<script type="text/javascript" src="scripts/js/login.js"></script>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="content-language" content="es-ar" />
</head>
<body>
	<?php
		if(!isset($_SESSION['username']) || $_SESSION['username'] == ' '){
	?>
	<!-- Login form -->
	<div id="loginForm">
		<div id="errorMessage"></div>
		<form id="form" name="form" method="post" action="">
			<fieldset>
				<dl>
					<dt><label for="username">Usuario:</label></dt>
					<dd><input id="username" class="inputFields" name="username" type="text" size="20" maxlength="20" tabindex="1" value="" /></dd>
				</dl>
				<dl>
					<dt><label for="password">Contraseña:</label></dt>
					<dd><input id="password" class="inputFields" name="password" type="password" size="20" maxlength="20" tabindex="2" value="" /></dd>
				</dl>
				<dl>
					<dd><input id="submit" name="submit" type="button" value="Ingresar" /></dd>
				</dl>
			</fieldset>
		</form>
	</div>
	<?php
		}
	?>
</body>
</html> 
login.js

Código:
$(document).ready(function(){
	$("#username").focus();
	
	$("#submit").click(function(){
		$.ajax({
			url: "php/session.php",
			cache: false,
			type: "POST",
			data: "username=" + $("#username").val() + "&password=" + $("#password").val(),
			success: function(){
				alert('success');
			},
			error: function(){
                                $("#form").effect("shake", {times:2}, 100);
				$("#errorMessage")
					.css('margin', '30px 0 10px 9px')
					.attr('class', 'ui-state-error')
					.html('<strong>ERROR - </strong>Los datos ingresados son incorrectos');
			}
		});
	});
});
session.php

Código PHP:
<?php

session_start
();

if(!isset(
$_SESSION['username'])){
    if(isset(
$_POST['username'])){
        
$db = new mysqli("localhost""username""password""bd");
        
$stmt $db->prepare("SELECT username FROM users WHERE username = ? AND password = ?");
        
$stmt->bind_param('ss'$_POST['username'], $_POST['password']);
        
$stmt->execute();
        
$stmt->store_result();
        
        if(
$stmt->num_rows() == 1){
            
$stmt->bind_result($username);
            
$stmt->fetch();
            
$_SESSION['username'] = $username;
            
header("Location: http://www.google.com.ar/");
        }
    }
}
?>
Se supone que al hacer click en el botón de enviar el login.js toma los datos y se los pasa al session.php donde se conecta con la base de datos y comprueba que esté todo bien, pero siempre me está tirando que no se conecta, probe de todo, pero como dije antes no tengo demasiada experiencia en estos lenguajes por el momento.

Desde ya disculpen las molestias nuevamente y muchísimas gracias!

Suertee! =)
  #2 (permalink)  
Antiguo 12/12/2010, 09:39
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 4 meses
Puntos: 1532
Respuesta: Sesión con jQuery, PHP y base de datos

estas utilizando AJAX, por lo tanto es inútil redireccionar con las cabeceras:

header("Location: http://www.google.com.ar/");

lo que debes hacer es dumpear a la salida del script, algún valor que sea recibido por el XMLHttpRequest y así puedas compararlo con javascript, ejemplo:

Código PHP:
Ver original
  1. <?php
  2.  
  3.  
  4. if(!isset($_SESSION['username'])){
  5.     if(isset($_POST['username'])){
  6.         $db = new mysqli("localhost", "username", "password", "bd");
  7.         $stmt = $db->prepare("SELECT username FROM users WHERE username = ? AND password = ?");
  8.         $stmt->bind_param('ss', $_POST['username'], $_POST['password']);
  9.         $stmt->execute();
  10.         $stmt->store_result();
  11.        
  12.         if($stmt->num_rows() == 1){
  13.             $stmt->bind_result($username);
  14.             $stmt->fetch();
  15.             $_SESSION['username'] = $username;
  16.             echo "1"; //1 que si valida
  17.             exit; //salir
  18.             //header("Location: http://www.google.com.ar/"); //con AJAX es inútil
  19.         }
  20.     }
  21.     echo "0"; //no valido
  22. }

y en js:

Código Javascript:
Ver original
  1. $(document).ready(function(){
  2.     $("#username").focus();
  3.    
  4.     $("#submit").click(function(){
  5.         $.ajax({
  6.             url: "php/session.php",
  7.             cache: false,
  8.             type: "POST",
  9.             data: "username=" + $("#username").val() + "&password=" + $("#password").val(),
  10.             success: function(data){
  11.                 if (data == '1') {
  12.                      alert('success');
  13.                 }else{
  14.                      alert('NO valido');
  15.                 }
  16.             },
  17.             error: function(){
  18.                                 $("#form").effect("shake", {times:2}, 100);
  19.                 $("#errorMessage")
  20.                     .css('margin', '30px 0 10px 9px')
  21.                     .attr('class', 'ui-state-error')
  22.                     .html('<strong>ERROR - </strong>Los datos ingresados son incorrectos');
  23.             }
  24.         });
  25.     });
  26. });
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...

Última edición por maycolalvarez; 12/12/2010 a las 12:00 Razón: redirecconar!!! XD
  #3 (permalink)  
Antiguo 12/12/2010, 11:51
 
Fecha de Ingreso: diciembre-2008
Mensajes: 38
Antigüedad: 16 años
Puntos: 0
Respuesta: Sesión con jQuery, PHP y base de datos

Cita:
Iniciado por maycolalvarez Ver Mensaje
estas utilizando AJAX, por lo tanto es inútil redirecconar con las cabeceras:

header("Location: http://www.google.com.ar/");

lo que debes hacer es dumpear a la salida del script, algún valor que sea recibido por el XMLHttpRequest y así puedas compararlo con javascript, ejemplo:

Código PHP:
Ver original
  1. <?php
  2.  
  3.  
  4. if(!isset($_SESSION['username'])){
  5.     if(isset($_POST['username'])){
  6.         $db = new mysqli("localhost", "username", "password", "bd");
  7.         $stmt = $db->prepare("SELECT username FROM users WHERE username = ? AND password = ?");
  8.         $stmt->bind_param('ss', $_POST['username'], $_POST['password']);
  9.         $stmt->execute();
  10.         $stmt->store_result();
  11.        
  12.         if($stmt->num_rows() == 1){
  13.             $stmt->bind_result($username);
  14.             $stmt->fetch();
  15.             $_SESSION['username'] = $username;
  16.             echo "1"; //1 que si valida
  17.             exit; //salir
  18.             //header("Location: http://www.google.com.ar/"); //con AJAX es inútil
  19.         }
  20.     }
  21.     echo "0"; //no valido
  22. }

y en js:

Código Javascript:
Ver original
  1. $(document).ready(function(){
  2.     $("#username").focus();
  3.    
  4.     $("#submit").click(function(){
  5.         $.ajax({
  6.             url: "php/session.php",
  7.             cache: false,
  8.             type: "POST",
  9.             data: "username=" + $("#username").val() + "&password=" + $("#password").val(),
  10.             success: function(data){
  11.                 if (data == '1') {
  12.                      alert('success');
  13.                 }else{
  14.                      alert('NO valido');
  15.                 }
  16.             },
  17.             error: function(){
  18.                                 $("#form").effect("shake", {times:2}, 100);
  19.                 $("#errorMessage")
  20.                     .css('margin', '30px 0 10px 9px')
  21.                     .attr('class', 'ui-state-error')
  22.                     .html('<strong>ERROR - </strong>Los datos ingresados son incorrectos');
  23.             }
  24.         });
  25.     });
  26. });
Muchísimas gracias maycolalvarez! Ya funciona!

Y gracias por avisarme lo del header, ahora aprendí algo nuevo
  #4 (permalink)  
Antiguo 12/12/2010, 12:05
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 4 meses
Puntos: 1532
Respuesta: Sesión con jQuery, PHP y base de datos

Cita:
Iniciado por nusee Ver Mensaje
Muchísimas gracias maycolalvarez! Ya funciona!

Y gracias por avisarme lo del header, ahora aprendí algo nuevo
claro, el header location funciona, pero en una petición normal, con AJAX no te sirve de nada, además algo que si te sirve seria borrar la caché, agregarle esto, y no tendrás problemas luego con la caché del navegador :

Código PHP:
Ver original
  1. <?php
  2. //Evitar la caché del navegador:
  3. header( "Expires: Mon, 26 Jul 1997 05:00:00 GMT" );  // disable IE caching
  4. header( "Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . " GMT" );  
  5. header( "Cache-Control: no-cache, must-revalidate" );  
  6. header( "Pragma: no-cache" );
  7.  
  8.  
  9. if(!isset($_SESSION['username'])){
  10.     if(isset($_POST['username'])){
  11.         $db = new mysqli("localhost", "username", "password", "bd");
  12.         $stmt = $db->prepare("SELECT username FROM users WHERE username = ? AND password = ?");
  13.         $stmt->bind_param('ss', $_POST['username'], $_POST['password']);
  14.         $stmt->execute();
  15.         $stmt->store_result();
  16.        
  17.         if($stmt->num_rows() == 1){
  18.             $stmt->bind_result($username);
  19.             $stmt->fetch();
  20.             $_SESSION['username'] = $username;
  21.             echo "1"; //1 que si valida
  22.             exit; //salir
  23.             //header("Location: http://www.google.com.ar/"); //con AJAX es inútil
  24.         }
  25.     }
  26.     echo "0"; //no valido
  27. }
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #5 (permalink)  
Antiguo 13/12/2010, 03:41
 
Fecha de Ingreso: diciembre-2008
Mensajes: 38
Antigüedad: 16 años
Puntos: 0
Respuesta: Sesión con jQuery, PHP y base de datos

Cita:
Iniciado por maycolalvarez Ver Mensaje
claro, el header location funciona, pero en una petición normal, con AJAX no te sirve de nada, además algo que si te sirve seria borrar la caché, agregarle esto, y no tendrás problemas luego con la caché del navegador :

Código PHP:
Ver original
  1. <?php
  2. //Evitar la caché del navegador:
  3. header( "Expires: Mon, 26 Jul 1997 05:00:00 GMT" );  // disable IE caching
  4. header( "Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . " GMT" );  
  5. header( "Cache-Control: no-cache, must-revalidate" );  
  6. header( "Pragma: no-cache" );
  7.  
  8.  
  9. if(!isset($_SESSION['username'])){
  10.     if(isset($_POST['username'])){
  11.         $db = new mysqli("localhost", "username", "password", "bd");
  12.         $stmt = $db->prepare("SELECT username FROM users WHERE username = ? AND password = ?");
  13.         $stmt->bind_param('ss', $_POST['username'], $_POST['password']);
  14.         $stmt->execute();
  15.         $stmt->store_result();
  16.        
  17.         if($stmt->num_rows() == 1){
  18.             $stmt->bind_result($username);
  19.             $stmt->fetch();
  20.             $_SESSION['username'] = $username;
  21.             echo "1"; //1 que si valida
  22.             exit; //salir
  23.             //header("Location: http://www.google.com.ar/"); //con AJAX es inútil
  24.         }
  25.     }
  26.     echo "0"; //no valido
  27. }
Muchas gracias de nuevo por los consejos maycolalvarez!

Te molesto con dos consultas más, la primera es para saber como puedo hacer para aumentar el tiempo definido de la sesión a por ejemplo diez horas, y la segunda es para saber si tenes idea de porque el código $("#username").focus(); solo funciona en Safari y Chrome, y no así en Firefox, Opera e IE.

Muchísimas gracias por toda la ayuda!

Suertee! =)
  #6 (permalink)  
Antiguo 21/01/2011, 14:29
 
Fecha de Ingreso: enero-2011
Ubicación: Bogotá
Mensajes: 9
Antigüedad: 13 años, 11 meses
Puntos: 0
Respuesta: Sesión con jQuery, PHP y base de datos

Hola yo tengo un problema parecido al que comentan, pero yo necesito es que cuando sea valido el usuario me mande a otra pagina como hago eso, pues por lo que vi lo que muestra es un aviso si esta logeado o no y eso es lo que yo también tengo. Pero lo que quiero es que me mande a la pagina de bienvenida.

Etiquetas: php, sesión
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:28.