entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

-1voto

error con mi variable global session

hace tiempo hize una pagina que trabajaba con sesiones y funciona bien hasta ahora, cuando quiero hacer lo mismo con otro script obtengo un error no entiendo que esta fallando si ambos codigos son los mismo, no entiendo que causa el error, a continuacion voy a dejar el codigo de mi viejo script y despues del que me causa error

<!-- /*<style>
body{background:skyblue;}
input[type="text"] {margin-left: 35%;}
form {border:solid blueviolet;}
</style>*/ -->
<form method="post" action="testeo.php" enctype="multipart/form-data" autocomplete="on">

  <input type="text"     name="login"      placeholder="email">
  <input type="password" name="password"   placeholder="password">
  <input type="submit"   name="testeo"     value="acceder">
  <input type="submit"   name="logout"   value="cerrar sesion"><br>
  <hr>
<!-- <textarea cols="40" rows="15" name="areadetexto" formaction="testeo.php"></textarea> -->
</form>

<?php
if(isset($_POST['testeo'])) {
  session_start();
  require("conexion.php");
  $login = $_POST['login']; $pass = $_POST['password']; 

  $comando = "SELECT * FROM users WHERE email ='$login' AND password ='$pass' ";
  $consulta = mysql_query($comando) or die ("Error en la query: ".mysql_error());
  $fila = mysql_fetch_array($consulta) or die ("Error en la query: ".mysql_error());

    $_SESSION ['id']      =  $fila ['id'];
    $_SESSION ['name']    =  $fila ['name'];
    $_SESSION ['email']   =  $fila ['email'];

    print "<h2>perfil privado</h2><br/>";
    echo $_SESSION['name']."<br>";
    echo $_SESSION['email']."<br>";

    if(isset($_POST['logout'])) {
      session_start();

      if ($_SESSION['name'])
      {
        session_destroy();
        // header("location:testeo.php");
      }

    }

  mysql_close($conex);}

 ?>

<?php
/*
 session_start();

 if ($_SESSION['nome'])
 {
   session_destroy();
   header("location:testeo.php");
 }

 ?>

 <a href="logout.php">cerrar sesion</a>
 <form method="post" action="testeo2.php" enctype="multipart/form-data">
 <textarea cols="40" rows="15" name="areadetexto"></textarea>
 <input type="submit" value="enviar" >
 </form>
*/
<body style="background-color: darkblue; color:skyblue; font-weight: bold;">

<?php

session_start();

$uname = $_POST['uname'];
$pw = $_POST['password'];
$email = $_POST['email'];

require("conexion.php");

$comando = "SELECT * FROM users WHERE email ='$email' AND password ='$pw' ";

$consulta = mysql_query($comando) or die ("Error en la query: ".mysql_error());
$fila = mysql_fetch_array($consulta) or die("Erro en la consulta:".mysql_error());

if($consulta)
{
    echo "verifica realizada";

    $_SESSION['id'] = $_fila['id'];
    $_SESSION['name'] = $_fila['name'];
    $_SESSION['email'] = $_fila['email'];

    echo $_SESSION['name']."<br>";
    echo $_SESSION['email']."<br>";

}

mysql_close($conex);

?>

steven comentado Feb 16

tengo un error cuando mando la consulta al servidor

magarzon comentado Feb 16

Y el error es....?

steven comentado Feb 16

menos mal que alguien se interesa por esta pregunta, el problema es que la funcion mysql_fetch_array funciona a medias, es decir en un script si funciona y en el otro no, te los muestro, el primero funciona sin problemas y me devuelve el nombre de usurio y la email, en cambio el otro script me devuelve un error

<!-- /*<style>
body{background:skyblue;}
input[type="text"] {margin-left: 35%;}
form {border:solid blueviolet;}
</style>*/ -->
<form method="post" action="testeo.php" enctype="multipart/form-data" autocomplete="on">

  <input type="text"     name="login"      placeholder="email">
  <input type="password" name="password"   placeholder="password">
  <input type="submit"   name="testeo"     value="acceder">
  <input type="submit"   name="logout"   value="cerrar sesion"><br>
  <hr>
<!-- <textarea cols="40" rows="15" name="areadetexto" formaction="testeo.php"></textarea> -->
</form>

<?php
if(isset($_POST['testeo'])) {
  session_start();
  require("conexion.php");
  $login = $_POST['login']; $pass = $_POST['password']; 

  $comando = "SELECT * FROM users WHERE email ='$login' AND password ='$pass' ";
  $consulta = mysql_query($comando) or die ("Error en la query: ".mysql_error());
  $fila = mysql_fetch_array($consulta) or die ("Error en la query: ".mysql_error());

    $_SESSION ['id']      =  $fila ['id'];
    $_SESSION ['name']    =  $fila ['name'];
    $_SESSION ['email']   =  $fila ['email'];

    print "<h2>perfil privado</h2><br/>";
    echo $_SESSION['name']."<br>";
    echo $_SESSION['email']."<br>";

    if(isset($_POST['logout'])) {
      session_start();

      if ($_SESSION['name'])
      {
        session_destroy();
        // header("location:testeo.php");
      }

    }

  mysql_close($conex);}

 ?>

<?php
/*
 session_start();

 if ($_SESSION['nome'])
 {
   session_destroy();
   header("location:testeo.php");
 }

 ?>

 <a href="logout.php">cerrar sesion</a>
 <form method="post" action="testeo2.php" enctype="multipart/form-data">
 <textarea cols="40" rows="15" name="areadetexto"></textarea>
 <input type="submit" value="enviar" >
 </form>
*/

output

**
conexion establecida
perfil privado

nombre usuario
email
**

<body style="background-color: darkblue; color:skyblue; font-weight: bold;">

<?php

session_start();

$uname = $_POST['uname'];
$pw = $_POST['password'];
$email = $_POST['email'];

require("conexion.php");

$comando = "SELECT * FROM users WHERE email ='$email' AND password ='$pw' ";

$consulta = mysql_query($comando) or die ("Error en la query: ".mysql_error());

$fila = mysql_fetch_array($consulta) or die ("Erro en la consulta:".mysql_error());

    echo "verifica realizada";

    $_SESSION ['id']    =  $fila ['id'];
    $_SESSION ['name']  =  $fila ['name'];
    $_SESSION ['email'] =  $fila ['email'];

    echo $_SESSION['name']."<br>";
    echo $_SESSION['email']."<br>";

mysql_close($conex);

?>

output


conexion establecidaErro en la consulta:

1 Respuesta

1voto

magarzon Puntos17460

No tienes un error, es simplemente que la consulta no da resultados, y mysql_fetch_array devuelve FALSE en ese caso (por eso mysql_error no te devuelve nada en el die).

No deberías hacer un die cuando te devuelve FALSE, porque para mysql_fetch_array FALSE es una respuesta válida.

steven comentado Feb 16

entonces si es asi porque en mi primer script devuelve el email y el nombre de usuario si tambien tengo un die

voy a volver a mostrarte mi codigo lo he optimizado para que lo puedas apreciar mejor, en el primero no hay ningun error y me devuelve el email y el nombre de usario almacendado en mi base de datos.

el segundo script en cambio no puede devolver ningun dato


  session_start();
  require("conexion.php");
  $login = $_POST['login']; $pass = $_POST['password']; 

  $comando = "SELECT * FROM users WHERE email ='$login' AND password ='$pass' ";
  $consulta = mysql_query($comando) or die ("Error en la query: ".mysql_error());
  $fila = mysql_fetch_array($consulta) or die ("Error en la query: ".mysql_error());

    $_SESSION ['id']      =  $fila ['id'];
    $_SESSION ['name']    =  $fila ['name'];
    $_SESSION ['email']   =  $fila ['email'];

    print "<h2>perfil privado</h2><br>";
    echo $_SESSION['name']."<br>";
    echo $_SESSION['email']."<br>";

    if(isset($_POST['logout'])) {
      session_start();

      if ($_SESSION['name'])
      {
        session_destroy();
        // header("location:testeo.php");
      }

    }

  mysql_close($conex);}

 ?>

<?php

session_start();

$uname = $_POST['uname'];
$pw = $_POST['password'];
$email = $_POST['email'];

require("conexion.php");

$comando = "SELECT * FROM users WHERE email ='$email' AND password ='$pw' ";

$consulta = mysql_query($comando) or die ("Error en la query: ".mysql_error());

$fila = mysql_fetch_array($consulta) or die ("Erro en la consulta:".mysql_error());

    echo "verifica realizada";

    $_SESSION ['id']    =  $fila ['id'];
    $_SESSION ['name']  =  $fila ['name'];
    $_SESSION ['email'] =  $fila ['email'];

    echo $_SESSION['name']."<br>";
    echo $_SESSION['email']."<br>";

mysql_close($conex);

?>

magarzon comentado Feb 16

A lo mejor porque en el primer código espera un campo login en el post del form, y en el segundo un campo email, y puede que estés llamando a este segundo script con el form del primero, y entonces email es vacío

steven comentado Feb 17

no es asi, acabo de harcer algunas pruebas y he notado algunas anomalias con mi codigo embebido el primero, a pesar de comentar la funcion que elimina la sesion y borra los datos en pantalla el script sigue funcionando sin problemas.

te mando la muestra de mi codigo modificado esta vez se va poder entender mejor.

formulario de inicio que es procesado por mi verificador
los datos que son enviados son los mismos datos que mando desde el otro formulario

<body style="background-color: darkblue; color:skyblue; font-weight: bold;">
<form 
   method="post" 
   action="../model/verificador.php" 
   enctype="multipart/form-data">

    <input type="text"     name="uname">
    <input type="password" name="password">
    <input type="submit"   name="login" value="login"><br>
<body style="background-color: darkblue; color:skyblue; font-weight: bold;">

<?php

session_start();

$uname = $_POST['uname'];
$pw = $_POST['password'];
$email = $_POST['email'];

require("conexion.php");

$comando = "SELECT * FROM users WHERE email ='$email' AND password ='$pw' ";

$consulta = mysql_query($comando) or die ("Error en la query: ".mysql_error());
$fila = mysql_fetch_array($consulta) or die ("Erro en la consulta:".mysql_error());

    echo "verifica realizada";

    $_SESSION ['id']    =  $fila ['id'];
    $_SESSION ['name']  =  $fila ['name'];
    $_SESSION ['email'] =  $fila ['email'];

    echo $_SESSION['name']."<br>";
    echo $_SESSION['email']."<br>";

mysql_close($conex);

?>

output
conexion establecidaErro en la consulta:

este script lleva un formulario embebido que pide username y password luego es procesado ahi mismo, si los datos existen devuelve el username y la email, todo esto lo hace en la misma pagina

<form method="post" action="testeo.php" enctype="multipart/form-data">

  <input type="text"     name="uname">
  <input type="password" name="password">
  <input type="submit"   name="testeo" value="acceder">
  <input type="submit"   name="logout" value="cerrar sesion"><br>
  <hr>
</form>

<?php
if(isset($_POST['testeo'])) {
  session_start();
  require("conexion.php");
  $login = $_POST['uname']; $pass = $_POST['password']; 

  $comando = "SELECT * FROM users WHERE email ='$login' AND password ='$pass' ";
  $consulta = mysql_query($comando) or die ("Error en la query: ".mysql_error());
  $fila = mysql_fetch_array($consulta) or die ("Error en la query: ".mysql_error());

    $_SESSION ['id']      =  $fila ['id'];
    $_SESSION ['name']    =  $fila ['name'];
    $_SESSION ['email']   =  $fila ['email'];

    print "<h2>perfil privado</h2><br/>";
    echo $_SESSION['name']."<br>";
    echo $_SESSION['email']."<br>";

    // if(isset($_POST['logout'])) {
    //   session_start();

    //   if ($_SESSION['name'])
    //   {
    //     session_destroy();
    //     // header("location:testeo.php");
    //   }

    // }

  mysql_close($conex);}

 ?>

output
nombre de usuario + email

datos extras - los dos formularios tienen un campo username y un campo password y ambos reciben el mismo valor por alguna razon uno funciona y otro no

magarzon comentado Feb 17

En el primer caso, el que te falla, el input del formulario se llama uname, y tu estás utilizando email.

steven comentado Feb 17

acabo de reiniciar la maquina y dejo de salirme el error, sospecho que habia un problema con la cache, conoces alguna manera de gestionarlo para evitar estos errores en futuro

Peter comentado Feb 17

Seguimos con lo mismo...

Por favor, accede o regístrate para responder a esta pregunta.

¿Conoces alguien que puede responder?
¡Comparte esta pregunta!


Actividad Reciente

¿Eres Usuario Apple?

...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta