Foros del Web » Programando para Internet » PHP »

No funciona y no se por qué V2.0 ...es lógico

Estas en el tema de No funciona y no se por qué V2.0 ...es lógico en el foro de PHP en Foros del Web. Hola a todos/as: ¡¡¡Feliz año!!! Estoy liado con la gestión de usuarios. Ya tengo el registro. Estoy con el login. He pillado un código por ...
  #1 (permalink)  
Antiguo 06/01/2011, 15:26
Avatar de Rankxerox1984  
Fecha de Ingreso: septiembre-2010
Mensajes: 253
Antigüedad: 13 años, 7 meses
Puntos: 4
No funciona y no se por qué V2.0 ...es lógico

Hola a todos/as:

¡¡¡Feliz año!!!
Estoy liado con la gestión de usuarios. Ya tengo el registro. Estoy con el login. He pillado un código por ahí que me parece que puede servir, pero no va .
Lo que deseo es a partir de un enlace en una página lanzar el login (main_form.php), preferentemente en un form emergente en lugar de una página. pongo el usuario y la clave y después de comprobarlo (Checklogin.php) me debería llevar a la página que deseo (Prueba_MantWeb.php), esto pasará en varias páginas, por lo que el visitante debería hacer un único login para tener acceso a las páginas que sean. Más adelante tendré el problema del tipo o nivel de usuario, de momento estoy aquí.
Lo más curioso (para mí) es que no da error, simplemente se queda encasquillado en (Checklogin.php).
Os pongo los códigos por si lo veis y me podeis decir el fallo gracias por adelantado (una vez más)

main_login.php
Código:
<table width="300" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<form name="form1" method="post" action="checklogin.php">
<td>
<table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">
<tr>
<td colspan="3"><strong>Acceso</strong></td>
</tr>
<tr>
<td width="78">Usuario</td>
<td width="6">:</td>
<td width="294"><input name="usuario" type="text" id="usuario"></td>
</tr>
<tr>
<td>Clave</td>
<td>:</td>
<td><input name="clave" type="text" id="clave"></td>
</tr>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td><input type="submit" name="Submit" value="Login"></td>
</tr>
</table>
</td>
</form>
</tr>
</table>
...Es un form normalito ¿no?
Checklogin.php
<?php
Código:
ob_start();
	// Llamo las variables de conexión a DB
 
		require_once ('../recor/LoginDB.php');
	// Nombre de la tabla
	
		$tbl_name="personas";  

// Conecto al serbidor y BBDD
		mysql_connect("$host", "$user", "$pass")or die("cannot connect"); 
		mysql_select_db("$db")or die("cannot select DB");

// Defino $usuario and $clave 
		$usuario=$_POST['usuario']; 
		$clave=$_POST['clave']; 

// Protejo frente a MYSQL injection
		$usuario = stripslashes($usuario);
		$clave = stripslashes($clave);
		$usuario = mysql_real_escape_string($usuario);
		$clave = mysql_real_escape_string($clave);

		$sql="SELECT * FROM $tbl_name WHERE user='$usuario' and pass='$clave'";
		$result=mysql_query($sql);

// Cuento las filas de la tabla
		$count=mysql_num_rows($result);
// Si $usuario y $clave coinciden, tiene que haber una fila

		if($count==1){
// Registro $usuario, $clave y redirijo a la página de destino
		session_register("usuario");
		session_register("clave"); 
		header("location:../Prueba_MantWeb.php");
		}
		else {
		echo "ERROR en usuario o clave";
		}

		ob_end_flush();
?>
Corto y conciso, no veo nada raro, pero eso no significa nada

Prueba_MantWEb.php
Código:
<?php session_start();
if(!session_is_registered(usuario)){
header("location:../Prueba_MantWeb.php");
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" " http://www.w3c.org/TR/xhtml1/DTD/xhtml1-strict.dtd ">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">

	<?php        

	//Detectammos el idioma del explorador

	   $Lengua = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2);

	//Detectammos la pagina en que estamos

       	   $pagina= $_SERVER['PHP_SELF']; 

	?>

<head>

   <title><?php include('phpBits/GoogleBot_TIT.php'); ?></title>

   <meta name="description=" content="<?php include('phpBits/GoogleBot_MET.php'); ?>">

   <meta http-equiv="Content-Type"content=" text/html;charset=utf-8">

 <!--Aquí se indica donde está la hoja de estilos CSS -->

<link type="text/css" rel="stylesheet" href="Estilos/PruebaHoja_estilos.css">

   <!--Aquí se indican los estilos CSS particulares de esta hoja CSS -->

   <style></style>

  </head >
<body>

   <!--MArco general-->

   <div id="container">

   <div id="fondo_img">

  </div>

 <!--Espacio para Noticias-->
   <div id="Panel_Noticias">

     <P><TEXTAREA ROWS="4" COLS="123" ><?php 	include('cursophp/bodyNews3.php');?> </TEXTAREA><br>
     </p>
      
   <div id="Menu_derecha">
   
      <div id="Menu1"><p> <a rel="nofollow" href="ConsultoresDeIT.php"><?php

	include('phpBits/Link_Cons.php');

		?></a></p></div>
      <div id="Menu2"><p> <a rel="nofollow" href="empresa.php"><?php

	include('phpBits/Link_Emp.php');

		?></a></p></div>
      <div id="Menu3"><p> <a rel="nofollow" href="Webmap.html"><?php

	include('phpBits/Link_WebMap.php');

		?></a></p></div>
 
  <!--Aquí va el cuerpo de la web, -->
  
    <p><?php

	//Presentamos el texto principal de la página correspondiente al 
	//idioma seleccionado

	include('phpBits/Body_InsertNews.php');

		?></div >

</div>
</body>
</html>
Seguro que falta algo pero no se lo que es ¿Alguien puede decírmelo?
Muchas gracias y Karma a raudales

J.
  #2 (permalink)  
Antiguo 07/01/2011, 02:13
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: No funciona y no se por qué V2.0 ...es lógico

Sin profundizar en el código, si no te da error y no direcciona, es porque se queda en el header, intenta esto:

Código PHP:
<?php

error_reporting
(E_ALL);
ini_set("display_errors"1);

require_once (
'../recor/LoginDB.php');
$tbl_name="personas";

// Conecto al serbidor y BBDD
mysql_connect($host$user$pass)or die("cannot connect");
mysql_select_db($db)or die("cannot select DB");

// Defino $usuario and $clave
$usuario=$_POST['usuario'];
$clave=$_POST['clave'];

// Protejo frente a MYSQL injection
$usuario stripslashes(mysql_real_escape_string($usuario));
$clave stripslashes(mysql_real_escape_string($clave));

$sql="SELECT * FROM $tbl_name WHERE user='$usuario' and pass='$clave'";
$result=mysql_query($sql);

// Cuento las filas de la tabla
$count=mysql_num_rows($result);
// Si $usuario y $clave coinciden, tiene que haber una fila

if($count){
    
// Registro $usuario, $clave y redirijo a la página de destino
    //Esta función ha sido declarada OBSOLETA desde PHP 5.3.0. Su uso está totalmente desaconsejado.
    
$_SESSION['usuario'] = $usuario;
    
$_SESSION['clave'] = $clave;

    
header("Location:../Prueba_MantWeb.php");
}
else {
    echo 
"ERROR en usuario o clave";
}


?>
  #3 (permalink)  
Antiguo 07/01/2011, 02:27
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: No funciona y no se por qué V2.0 ...es lógico

Corrección, también ta falta iniciar la session antes de declarar las variables de tipo $_SESSION,


Código PHP:

if($count){
session_start("unasession");
    
// Registro $usuario, $clave y redirijo a la página de destino
    //Esta función ha sido declarada OBSOLETA desde PHP 5.3.0. Su uso está totalmente desaconsejado.
    
$_SESSION['usuario'] = $usuario;
    
$_SESSION['clave'] = $clave;

    
header("Location:../Prueba_MantWeb.php");
}
else {
    echo 
"ERROR en usuario o clave";

  #4 (permalink)  
Antiguo 08/01/2011, 13:38
Avatar de Rankxerox1984  
Fecha de Ingreso: septiembre-2010
Mensajes: 253
Antigüedad: 13 años, 7 meses
Puntos: 4
Mensaje Respuesta: No funciona y no se por qué V2.0 ...es lógico

Hola repara2:

Gracias por las indicaciones, me han sido muy útiles ¿Me podrias indicar la función alternativa a la obsoleta?
Finalmente el código funciona pero en lugar de header tengo que usar include ¿..?
te lo adjunto por si ves el fallo.

Código PHP:
<?php session_start ();

    
error_reporting(E_ALL); 
    
ini_set("display_errors"1);
// Llamo las variables de conexión a DB
 
        
require_once ('../recor/LoginDB.php');
// Nombre de la tabla
    
        
$tbl_name="personas";  

// Defino $usuario y $clave 
        
$usuario=$_POST['usuario']; 
        
$clave=$_POST['clave']; 

// Protejo frente a MYSQL injection
        
$usuario stripslashes($usuario);
        
$clave stripslashes($clave);

// Abro conexión y selecciono la base de datos
        
$connection mysql_connect($host$user$pass) or die ("Unable to connect!"); 
        
mysql_select_db($db) or die ("Unable to select database!"); 
        
//Construyo la select
        
$sql="SELECT * FROM $tbl_name WHERE usuario='$usuario' and clave='$clave'";
        
$result=mysql_query($sql);

// Cuento las filas de la tabla 
        
$count=mysql_num_rows($result); 
        
// Si $usuario y $clave coinciden, tiene que haber una fila

        
if($count==1){

// Registro $usuario, $clave y redirijo a la página de destino 
    //Esta función ha sido declarada OBSOLETA desde PHP 5.3.0. Su uso está totalmente desaconsejado ¿..?. 
    
    
$_SESSION['usuario'] = $usuario
    
$_SESSION['clave'] = $clave

    
//header("location:../Prueba_MantWeb.php"); 
    
include('../Prueba_MantWeb.php');

else { 
    echo 
"ERROR en usuario o clave"
}  

?>
Gracias muchas,
  #5 (permalink)  
Antiguo 09/01/2011, 04:11
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: No funciona y no se por qué V2.0 ...es lógico

Si utilizas el header... el archivo a donde direccionas debe iniciar también una session para que las variables sean visibles, si lo incluyes no tienes que hacer nada de esto.
Respecto de la función obsoleta, no me sale ningún aviso, por favor postea el Warning o bien busca en el manual la alternativa, un saludo
  #6 (permalink)  
Antiguo 09/01/2011, 13:11
Avatar de Rankxerox1984  
Fecha de Ingreso: septiembre-2010
Mensajes: 253
Antigüedad: 13 años, 7 meses
Puntos: 4
Respuesta: No funciona y no se por qué V2.0 ...es lógico

Hola he probado lo que indicas del header y, al cambiar de Include a Header, obtengo este bonito error de sesión :

Cita:
Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\recor\LoginDB.php:1) in C:\xampp\htdocs\login\checklogin.php on line 41
que obviamente apunta a la línea deh header:

Código PHP:
...
// Si $usuario y $clave coinciden, tiene que haber una fila

        
if($count==1){

// Registro $usuario, $clave y redirijo a la página de destino 
    //Esta función ha sido declarada OBSOLETA desde PHP 5.3.0. Su uso está totalmente desaconsejado ¿..?. 
    
    
$_SESSION['usuario'] = $usuario
    
$_SESSION['clave'] = $clave

    
header("location:../Prueba_MantWeb.php"); 
    
//include('../Prueba_MantWeb.php');

else { 
    echo 
"ERROR en usuario o clave"
}  

?> 
en la pagina de destino tengo iniciada la sesión:


Código PHP:
<?php session_start();
if(isset( 
$_SESSION['usuario'])){

//verifica si existe la sesion y si existe le asignamos el usuario de las sesión

$usuario=$_SESSION['usuario'];

//verificamos

if($usuario!=$usuario){ 
     
header("location:main_login.php"); 
     exit; 
 } 
}else{ 
  die(
"no puede acceder directamente, verifique los datos de su cuenta"); 
exit; 

?><!DOCTYPE ....
¿Que hago mal?
¿Me corto las venas o me las dejo largas ?

Gracias por la paciencia

J.
  #7 (permalink)  
Antiguo 10/01/2011, 03:28
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: No funciona y no se por qué V2.0 ...es lógico

No te cortes nada, el mensaje de Warning es porque existe alguna salida por pantalla en algún punto ANTES de redireccionar la página o empezar la session. En tu caso, hay una salida por pantalla en :


(output started at C:\xampp\htdocs\recor\LoginDB.php:1)

Quítalo o modifica el código y tendría que desaparecer el warning, saludos
  #8 (permalink)  
Antiguo 10/01/2011, 03:40
Avatar de Rankxerox1984  
Fecha de Ingreso: septiembre-2010
Mensajes: 253
Antigüedad: 13 años, 7 meses
Puntos: 4
Respuesta: No funciona y no se por qué V2.0 ...es lógico

Hola de nuevo:

He conseguido discriminar de donde viene el error, el problema es que no sé como solucionarlo.
Lo que pasa es que cuando introduzco la identificación en el form de login me abre la página "dentro" de la pagina que comprueba los datos y me da errores de sesión distintos.
Cuando utilizo header (header("location:../Prueba_MantWeb.php");) da este error:
Cita:
Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\recor\LoginDB.php:1) in QueC:\xampp\htdocs\login\checklogin.php on line 53
Que coincide con la línea del header y no me habre la página
Sin embargo si utilizo include (include('../Prueba_MantWeb.php');), me da este otro error:
Cita:
Notice: A session had already been started - ignoring session_start() in C:\xampp\htdocs\Prueba_MantWeb.php on line 1
Y me abre la página dentro de la anterior por seo me dice que la sesion ya ha sido comenzada.
Creo que la solución va por abrir la página en una página nueva pero no encuentro la forma.
De nuevo el códigodel problema por si alguien ve lo que no veo yo
Código PHP:
<?php session_start ();

//registro las variables de sesion
    
session_register ($usuario$clave);

    
error_reporting(E_ALL); 
    
ini_set("display_errors"1);
// Llamo las variables de conexión a DB
 
        
require_once ('../recor/LoginDB.php');
// Nombre de la tabla
    
        
$tbl_name="personas";  

// Defino $usuario y $clave 
        
$usuario=$_POST['usuario']; 
        if (empty (
$_POST['usuario'])) {echo "<script type=\"text/javascript\">alert(\"ERROR: Pon un usuario\");  
                    window.history.back();  
                    </script>"
;
                exit;
                };  
        
$clave=$_POST['clave'];
        if (empty (
$_POST['clave'])) {echo "<script type=\"text/javascript\">alert(\"ERROR: Pon la clave\");  
                    window.history.back();  
                    </script>"
;
                exit;
                };  

// Protejo frente a MYSQL injection
        
$usuario stripslashes($usuario);
        
$clave stripslashes($clave);

// Abro conexión y selecciono la base de datos
        
$connection mysql_connect($host$user$pass) or die ("Unable to connect!"); 
        
mysql_select_db($db) or die ("Unable to select database!"); 
        
//Construyo la select
        
$sql="SELECT * FROM $tbl_name WHERE usuario='$usuario' and clave='$clave'";
        
$result=mysql_query($sql);

// Cuento las filas de la tabla 
        
$count=mysql_num_rows($result); 
        
// Si $usuario y $clave coinciden, tiene que haber una fila

        
if($count==1){

// Registro $usuario, $clave y redirijo a la página de destino 
        
    
$_SESSION['usuario'] = $usuario
    
$_SESSION['clave'] = $clave
    
    
//header("location:../Prueba_MantWeb.php"); 
    
include('../Prueba_MantWeb.php');
    

else { 
    echo 
"<script type=\"text/javascript\">alert(\"ERROR usuario o clave\");  
                    window.history.back();  
                    </script>"
;
                exit;
}  

?>
¿Alguien sabe como solucionarlo?
Se agradecerá la solución con una cantidad inmensa de Karma

J.
  #9 (permalink)  
Antiguo 10/01/2011, 04:04
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: No funciona y no se por qué V2.0 ...es lógico

Si haces un include, tienes esto

Código:
Notice: A session had already been started - ignoring session_start() in C:\xampp\htdocs\Prueba_MantWeb.php on line 1
elimina el inicio de session de Prueba_mantWeb.php y listo.
Si sigue saliendo el mensaje, comprueba que no haya ningún warning de variable indefinida o similar. Si no lo encuentras, postea todos los archivos completos, salu2
  #10 (permalink)  
Antiguo 12/01/2011, 04:35
Avatar de Rankxerox1984  
Fecha de Ingreso: septiembre-2010
Mensajes: 253
Antigüedad: 13 años, 7 meses
Puntos: 4
Respuesta: No funciona y no se por qué V2.0 ...es lógico

Hola:

Ante todo, muchas gracias por la ayuda, he estado revisando todo lo que me has dicho pero sigo sin dar con el error.
Mi opinión es que el script de login abre la pagina de destino "dentro" de la propia página de login pero no sé como indicar que abra una "nueva" página.
Te paso los códigos por ver si tú que sabes más detectas el error (o errores).

Login (main_login.php) es un form de html
Código HTML:
<table width="300" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<form name="form1" method="post" action="checklogin.php">
<td>
<table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">
<tr>
<td colspan="3"><strong>Acceso</strong></td>
</tr>
<tr>
<td width="78">Usuario</td>
<td width="6">:</td>
<td width="294"><input name="usuario" type="text" id="usuario"></td>
</tr>
<tr>
<td>Clave</td>
<td>:</td>
<td><input name="clave" type="text" id="clave"></td>
</tr>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td><input type="submit" name="Submit" value="Login"></td>
</tr>
</table>
</td>
</form>
</tr>
</table> 
Comprobación del login (checklogin.php) es la página en donde se genera el error
Código PHP:
<?php session_start ();

//registro las variables de sesion
    
session_register ($usuario$clave);

    
error_reporting(E_ALL); 
    
ini_set("display_errors"1);
// Llamo las variables de conexión a DB
 
        
require_once ('../recor/LoginDB.php');
// Nombre de la tabla
    
        
$tbl_name="personas";  

// Defino $usuario y $clave 
        
$usuario=$_POST['usuario']; 
        if (empty (
$_POST['usuario'])) {echo "<script type=\"text/javascript\">alert(\"ERROR: Pon un usuario\");  
                    window.history.back();  
                    </script>"
;
                exit;
                };  
        
$clave=$_POST['clave'];
        if (empty (
$_POST['clave'])) {echo "<script type=\"text/javascript\">alert(\"ERROR: Pon la clave\");  
                    window.history.back();  
                    </script>"
;
                exit;
                };  

// Protejo frente a MYSQL injection
        
$usuario stripslashes($usuario);
        
$clave stripslashes($clave);

// Abro conexión y selecciono la base de datos
        
$connection mysql_connect($host$user$pass) or die ("Unable to connect!"); 
        
mysql_select_db($db) or die ("Unable to select database!"); 
        
//Construyo la select
        
$sql="SELECT * FROM $tbl_name WHERE usuario='$usuario' and clave='$clave'";
        
$result=mysql_query($sql);

// Cuento las filas de la tabla 
        
$count=mysql_num_rows($result); 
        
// Si $usuario y $clave coinciden, tiene que haber una fila

        
if($count==1){

// Registro $usuario, $clave y redirijo a la página de destino 
        
    
$_SESSION['usuario'] = $usuario
    
$_SESSION['clave'] = $clave
    
    
//header("location:../Prueba_MantWeb.php"); 
    
include('../Prueba_MantWeb.php');
    

else { 
    echo 
"<script type=\"text/javascript\">alert(\"ERROR usuario o clave\");  
                    window.history.back();  
                    </script>"
;
                exit;
}  

?>

Y la página de destino (Prueba_MantWeb.php) que es la que deberia abrirse sin errores
Código PHP:
<?php session_start();
isset(
$_SESSION['usuario'],$_SESSION['clave'])//{

//verifica si existe la sesion y si existe le asignamos el usuario de la sesión

//$usuario=$_SESSION['usuario'];

//verificamos

//if($usuario!=$usuario){ 
  //   header("location:main_login.php"); 
    // exit; 
//} 
//}else{ 
//die("no puede acceder directamente, verifique los datos de su cuenta"); 
//exit; 
//} 
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" " http://www.w3c.org/TR/xhtml1/DTD/xhtml1-strict.dtd ">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">
<?php    
    
//Detectammos el idioma del explorador

       
$Lengua substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2);

    
//Detectammos la pagina en que estamos

              
$pagina$_SERVER['PHP_SELF']; 

    
?>

<head>

   <title><?php include('phpBits/GoogleBot_TIT.php'); ?></title>

   <meta name="description=" content="<?php include('phpBits/GoogleBot_MET.php'); ?>">

   <meta http-equiv="Content-Type"content=" text/html;charset=utf-8">

 <!--Aquí se indica donde está la hoja de estilos CSS -->
 <?php

    
include('phpBits/estilo_css.php');

        
?> 
   <!--Aquí se indican los estilos CSS particulares de esta hoja CSS -->

   <style></style>

  </head >
<body>

   <!--MArco general-->

   <div id="container">

   <div id="fondo_img">

  </div>

 <!--Espacio para Noticias-->
   <div id="Panel_Noticias">

     <P><TEXTAREA ROWS="4" COLS="123" ><?php     include('cursophp/bodyNews3.php');?> </TEXTAREA><br>
     </p>

 <!--Menú lateral-->     
      
   <div id="Menu_derecha">
   
      <div id="Menu1"><p> <a rel="nofollow" href="ConsultoresDeIT.php"><?php

    
include('phpBits/Link_Cons.php');

        
?></a></p></div>
      <div id="Menu2"><p> <a rel="nofollow" href="empresa.php"><?php

    
include('phpBits/Link_Emp.php');

        
?></a></p></div>
      <div id="Menu3"><p> <a rel="nofollow" href="Webmap.html"><?php

    
include('phpBits/Link_WebMap.php');

        
?></a></p></div>
 
  <!--Aquí va el cuerpo de la web, -->
  
    <p><?php

    
//Presentamos el texto principal de la página correspondiente al 
    //idioma seleccionado

    
include('phpBits/Body_InsertNews.php');

        
?></div >

</div>
</body>
</html>
Agradeciendo de antemano (de nuevo) tu ayuda ,

J.
  #11 (permalink)  
Antiguo 12/01/2011, 06:35
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: No funciona y no se por qué V2.0 ...es lógico

He recreado tu proyecto en mi servidor con la tabla y todo.
No encuentro ningún error además del mencionado del inicio de session. Redirecciona con header pero funciona también con el include.
Hay dos variables indefinidas en checLogin.php l31, debe poner $usuario y $clave en lugar de $user y $pass. Además la variable $db no tiene valor, debe contener el nombre de tu base de datos. Por lo demás no encuentro nada, prueba a ver qué pasa.
  #12 (permalink)  
Antiguo 13/01/2011, 04:33
Avatar de Rankxerox1984  
Fecha de Ingreso: septiembre-2010
Mensajes: 253
Antigüedad: 13 años, 7 meses
Puntos: 4
Respuesta: No funciona y no se por qué V2.0 ...es lógico

Hola repara2:

Las variables que mencionas, son las de conexion a la BBDD que son llamadas por el require_once de la línea 11.
En cuanto a la redirección con el header se queda atascado en el checklogin en la línea 55 con este mensaje:

Cita:
Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\recor\LoginDB.php:1) in C:\xampp\htdocs\login\checklogin.php on line 55
y con el include estamos igual que antes, abre la página pero con el error de sesión ya comentado.
Creo que el problema está en el código. Supongo que le falta algo para indicar que la página no se debe abrir en checklogin o que debe cerrarse checklogin antes de abrir prueba_MantWeb.
Lo que sucede ahora (no se explicarlo mejor) es que checklogin lanza la página prueba_MantWeb "dentro" de checklogin y genera conflicto de sesion al tener checklogin abierto se interpreta este como salidas antes del inicio de sesión en Prueba_MantWeb.
Esta es mi teoria, la demostración está en la persistencia de los errores.
¿Que opinas tú de esto?

Muchas gracias, una vez más, por tu ayuda,

J.
  #13 (permalink)  
Antiguo 13/01/2011, 08:08
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: No funciona y no se por qué V2.0 ...es lógico

Tienes una salida por pantalla aquí

Código:
C:\xampp\htdocs\recor\LoginDB.php
Casi seguro es un mensaje de error o un espacio en blanco.
  #14 (permalink)  
Antiguo 13/01/2011, 08:49
Avatar de Rankxerox1984  
Fecha de Ingreso: septiembre-2010
Mensajes: 253
Antigüedad: 13 años, 7 meses
Puntos: 4
Respuesta: No funciona y no se por qué V2.0 ...es lógico

Lo habia mirado ya. En principio es el codigo que declara las variables de conexion a la BBDD. No tiene ningun espacio en Blanco y es muy simple:

Código PHP:
<?php

    $host
="xxxx"

    
$user="yyyy"

    
$pass="zzzz"

?>
Seguro que es algun lio de la declaración de sesión, pero no lo pillo.

Gracias por la ayuda again

J.
  #15 (permalink)  
Antiguo 14/01/2011, 03:34
Avatar de Rankxerox1984  
Fecha de Ingreso: septiembre-2010
Mensajes: 253
Antigüedad: 13 años, 7 meses
Puntos: 4
Respuesta: No funciona y no se por qué V2.0 ...es lógico

Bueno,

Como el problema era el require_once de la conexión a la BBDD he resuelto eliminarlo y declarar directamente las variables (a grandes males grandes remedios).
Doy este tema por zanjado hasta que descubra como resolverlo como estaba.

Muchas gracias por tu ayuda . Cuando tenga terminada la gestión de usuarios la publicaré en el foro por si le sirve a alguien.

Un saludo y gacias de nuevo ,

J.
  #16 (permalink)  
Antiguo 14/01/2011, 10:56
Avatar de Rankxerox1984  
Fecha de Ingreso: septiembre-2010
Mensajes: 253
Antigüedad: 13 años, 7 meses
Puntos: 4
Respuesta: No funciona y no se por qué V2.0 ...es lógico

¡¡¡Eureka!!!

Encontré la solución. JAVASCRIPT. Lanzo la página de destino con un script window.open de Javascript y, al abrir la ventana nueva desaparecen los errores de sesión .
Dejo el script corregido por si le sirve a alguien (de bien nacido es ser agradecido).
Muchas gracias a todos (especial mención a repara2)
Doy el tema por cerrado,

J.

Nota:Sigo sin saber como se cierran los temas ¿me lo puede decir alguien?

Código PHP:
<?php session_start (); 

//registro las variables de sesion 
    
session_register ($usuario$clave); 

    
error_reporting(E_ALL);  
    
ini_set("display_errors"1); 
// Llamo las variables de conexión a DB 
  
        
require_once ('../recor/LoginDB.php'); 
// Nombre de la tabla 
     
        
$tbl_name="personas";   

// Defino $usuario y $clave  
        
$usuario=$_POST['usuario'];  
        if (empty (
$_POST['usuario'])) {echo "<script type=\"text/javascript\">alert(\"ERROR: Pon un usuario\");   
                    window.history.back();   
                    </script>"

                exit; 
                };   
        
$clave=$_POST['clave']; 
        if (empty (
$_POST['clave'])) {echo "<script type=\"text/javascript\">alert(\"ERROR: Pon la clave\");   
                    window.history.back();   
                    </script>"

                exit; 
                };   

// Protejo frente a MYSQL injection 
        
$usuario stripslashes($usuario); 
        
$clave stripslashes($clave); 

// Abro conexión y selecciono la base de datos 
        
$connection mysql_connect($host$user$pass) or die ("Unable to connect!");  
        
mysql_select_db($db) or die ("Unable to select database!");  
         
//Construyo la select 
        
$sql="SELECT * FROM $tbl_name WHERE usuario='$usuario' and clave='$clave'"
        
$result=mysql_query($sql); 

// Cuento las filas de la tabla  
        
$count=mysql_num_rows($result);  
         
// Si $usuario y $clave coinciden, tiene que haber una fila 

        
if($count==1){ 

// Registro $usuario, $clave y redirijo a la página de destino  
         
    
$_SESSION['usuario'] = $usuario;  
    
$_SESSION['clave'] = $clave;  
     
//Lanzo la nueva ventana con Javascript
?>
    <script language=javascript> 
        function ventanaSecundaria (URL){ 
           window.open(URL,"../Prueba_MantWeb.php") 
        } 

        ventanaSecundaria("http://www.desarrolloweb.com"); 
        window.close();
    </script>

<?php

}  
else {  
    echo 
"<script type=\"text/javascript\">alert(\"ERROR usuario o clave\");   
                    window.history.back();   
                    </script>"

                exit; 
}   

?>

Etiquetas: Ninguno
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:05.