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

2votos

porque php no reconoce los datos pasados por post

mi formulario apunta al mismo archivo para que lo pueda procesar ahi mismo pero el problema es que mis variables de usuario pasadas por el metodo post no son reconocidas y el navegador me retorna un error como este undefined index

<?php //variables de conexion

$conex = mysql_connect("localhost", "root", "");
mysql_select_db("app2.0", $conex) or die ("Error: No se puede usar la base de datos. ".mysql_error());

?>

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

    <input type="text" name="login" placeholder="email">
    <input type="password" name="password" placeholder="password">
    <input type="submit" value="acceder"><br>
<hr>
    <input name="nome" type="text" placeholder="nome">
    <input name="telefono" type="text" placeholder="tel">
    <input name="email" type="email" placeholder="email">
    <input name="pass" type="password" placeholder="password">
    <input type="submit" formaction="registracion.php" value="invia">

  </form>

<?php
 //este codigo se encarga de verificar si los datos pasados por el form estan en la bd
require("conexion.php");
$login = $_POST['login']; $pass = $_POST['password']; // recupero los datos a travez del atributo name
session_start();

Leonardo-Tadei comentado Dic 3, 2016

Tu pregunta anterior no es exactamente esta?
Tratá, en lo posible, de hacer una pregunta completa y bien organizada, y no repetir 2 o 3 veces la misma cuestión con diferente aspecto.
Predispone muy mal a la comunidad de ED para que la gente se tome el tiempo de ayudarte...

magarzon comentado Dic 4, 2016

De hecho se debería cambiar el nombre de la página a "stevenpro97 pregunta..."

Admiro tu predisposición, yo ya he tirado la toalla con él.

1 Respuesta

2votos

Leonardo-Tadei Puntos214700

Hola @stevenpro97,

tenés varios errores, algunos de concepto (estoy asumiendo que todo el código que pusiste está en un mismo script PHP, porque no decís lo contrario):

  • Cuando cargues esta página, siempre te dirá que los índices no están definidos, porque la 1ra vez que se carga no se están definidos. Las variables $_POST toman valor solo después de enviar el formulario y no antes.
    Solución: usar las variables $_POST en un IF, solo si el formulario fue enviado.

  • Los valores $_POST se cargarán con los NAME de los INPUT del formulario que envía. Vos estás leyendo "login" y "password", pero el formulario también de llama "login" con lo que el navegador posiblemente no envíe nada.
    Solución: hacer que todos los NAME sean distintos.

  • No se ve en dónde usarías los datos cargados en las variables $login y $pass, para darnos una mejor idea de qué es lo que pasa.
    Solución: poner todo el código relevante a la pregunta, indicando cuando son archivos diferentes y cómo se llaman.

  • Hacés un session_start() luego de tener salida, lo cual no funcionará porque ya fueron enviadas las cabeceras HTTP.
    Solución: el session_start() debe ser siempre la primer línea del código, incluso antes de los include o require.

Habilitar las opciones de desarrollo en el php.ini te dirá, además de la línea, cuál es el índice que no existe y más datos relevantes para depurar esto mejor.

Adicionalmente, la mejor forma de verificar que es lo que se recibe del formulario es agregando un

var_dump($_POST);

al principio del script. Esto te devuelve todas las variables, índices y tipos, para darte una mejor idea de lo que se recibe.

Saludos cordiales

steven comentado Dic 3, 2016

todo el codigo esta en un mismo script, ya hize las modificaciones al codigo declare un name distinto y puse la variable de session antes de mi include.
el problema ahora viene con el if que tu dices de poner al principio, como lo haria, cual seria la manera correcta de hacerlo,

//cual seria la condicional ?  yo pensaba en esta if(!$POST_? == TRUE) {} 

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

    <input type="text" name="login" placeholder="email">
        <input type="password" name="password" placeholder="password">
    <input type="submit" value="acceder"><br>

<?php
 //este codigo se encarga de verificar si los datos pasados por el form estan en la bd
session_start();
require("conexion.php");
$login = $_POST['login']; $pass = $_POST['password']; // recupero los datos a travez del atributo name

$comando = "SELECT * FROM utenti 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 ['nome']    =  $fila ['nome'];
  $_SESSION ['email']   =  $fila ['email'];
  $_SESSION ['tel']     =  $fila ['telefono'];

  header ("location:perfil_usuario.php");

mysql_close($conex);

si el usuario existe lo manda a otro script perfil_usuario 

<?php // este codigo es ejecutado si la verificacion tiene exito y muestra los datos del usuario

session_start();
require("conexion.php");
if (!$_SESSION){  header("location:inicio.php");}

print "<h2>perfil privado</h2><br>";

echo $_SESSION['nome'];
echo $_SESSION['email'];
echo $_SESSION['tel'];
?>
<a href="logout.php">cerrar sesion</a>

<?php // este codigo se encargar de cerrar la sesion y redireccionar al usuario a la pagina principal
session_start();
if ($_SESSION['nome'])
{
  session_destroy();
  header("location:inicio.php");
}

?>

steven comentado Dic 3, 2016

Codigo editado, ignoren los codigos precedentes y fijen la atencion en este

he intentado con este codigo pero el navegador me retorna el mismo error index undefined

<?php
if($_POST['testeo']) // esta es la linea del error index undefined{
  session_start();
  require("conexion.php");
  $login = $_POST['login']; $pass = $_POST['password']; // recupero los datos a travez del atributo name

  $comando = "SELECT * FROM utenti 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 ['nome']    =  $fila ['nome'];
    $_SESSION ['email']   =  $fila ['email'];
    $_SESSION ['tel']     =  $fila ['telefono'];

    header ("location:perfil_usuario.php");

  mysql_close($conex);

} else {

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

    <input type="text" name="login" placeholder="email">
    <input type="password" name="password" placeholder="password">
    <input type="submit" name="testeo" value="acceder"><br>

  </form>

<?php } ?>

Leonardo-Tadei comentado Dic 3, 2016

Y cuál de todos @stevenpro97 es el "índice indefinido" ???

Tené en cuenta que nos es imposible ejecutar tu código para comprobarlo nosotros...

steven comentado Dic 3, 2016

el indice indefinido es de mi atributo testeo de mi boton submit, no entiendo la razon de este error
mi codigo funciona bien, verifica los datos y en caso exitoso redirige a mi pagina perfil_usuario.Sim embargo siempre se muestra ese error en mi pagina
por seguridad edite mi codigo y comente la linea, lo puedes si subes en los comentarios, lo podras reconocer facilmente.

Leonardo-Tadei comentado Dic 4, 2016

El problema que tiene el uso que estás haciendo del valor $_POST['testeo'] es que al hacer:

if($_POST['testeo'])
...

falla, porque justamente cuando cargás la página para ver el formulario, este valor no está definido. Es decir, preguntás por un valor que no siempre está definido.

Esto se soluciona cambiando el IF así:

if(isset($_POST['testeo']))
...

La función isset() devuelve si una variable está definida o no, pero no falla en caso de no estarlo, sino que devuelve FALSE.

Saludos cordiales!

PD: tampoco es muy prolijo hacer, aunque funcione if($_POST['testeo']), porque hay muchos casos en que puede tener un valor correcto pero que se traduce a FALSE al ser evaluado como booleano, como por ejemplo para 0 (cero), 'false' (el string false), '' (una cadena vacía), NULL (el valor nulo) y 'NULL' (un string que contiene la cadena NULL).

steven comentado Dic 4, 2016

gracias leo, todavia me queda claro el funcionamento del isset, por lo que tu dices no retorna en errores en caso de que la variable exista verdadero, podrias hacerme unos ejemplos extras para entenderlo mejor.
despues queria pedirte si sabes la manera de mostrar esa informacion de la pagina perfil usuario en la misma pagina, es decir el contenido se situe debajo de mi formulario, puede que no tenga mucho sentido pero quiero saber si es posible,
te hago un ejemplo para que entiendas mi idea, por el momento mi pagina funciona de esta manera, cuando el usuario llene los campos con sus credenciales se hace una consulta a la base de datos y devuelve algunos datos en esa misma pagina pero sobreescribo todo el contenido de esa pagina.
mi gustaria poder modificar eso con esto, cuando se manden las credenciales se devuelve el contenido pero sin sobreescribir el contenido actual como los formularios, si te suena un poco confusa sera mejor que lo plantee en otra pregunta, bueno por ultimo quiero saber si tienes alguna pagina propia o canal de youtube, porque me gustaria poder contactarte para pedirte algunas sugerencias sobre un proyecto que tengo en mente, si te interesa dejame un contacto

Leonardo-Tadei comentado Dic 4, 2016

Para el funcionamiento de isset(), lo mejor es consultarlo aquí.

Es posible mostrar la información debajo del formulario: simplemente no pongas el formulario en un ELSE y emite los datos del perfil debajo. Es algo muy básico de programación... el contenido no se sobreescribe: se regenera para ser enviado.
Es por esto que te hemos recomendado hacer algún curso de programación web con PHP u otro lenguaje similar: tenés un montón de cuestiones muy básicas sin conocer ni manejar bien, y no condicen con la complejidad de las cosas que querés hacer. Creeme que vas a ahorrar mucho tiempo haciendo un curso inicial de programación!

Por último, trabajo en una empresa y no es correcto dar asesoría formal para darte sugerencias. Con gusto, si tengo tiempo y la pregunta me parece interesante, puedo responder alguna cosa puntual por acá. Si querés contratar asesoría formal, te recomiendo que lo hagas en alguna empresa de tu ciudad o de ua ciudad cercana, ya que el contexto sociocultural es importante.

Saludos cordiales!

steven comentado Dic 4, 2016

muchas gracias amigo, contigo estoy aprendiendo alguno conceptos abstractos de programacion, la teoria es facil pero la practica es todo lo contrario por lo general en algunos videotutoriales hacen ejemplos banales, sin embargo para entender y dominar yo creo que se deberia aprender a hacer una cosa de muchas maneras.
en fin como dice un viejo refran la practica hace al maestro, quiero pedirte una ultima cosa, mi codigo actual esta andando bien pero hay todavia algunas cosas que no puedo hacer, la cuestion es la siguiente
necesito tener la opcion de cerrar sesion en la misma pagina, he intentado agregar un enlace al script que mata la sesion pero este enlace no se muestra en la pagina. como habras notado quiero que se haga todo en una misma pagina.

// en mi formulario de acceso hay un campo de texto para comentarios que quiero
que se muestre solo cuando inicio sesion y que se borre cuando cierro sesion,
por el momento es fijo y se carga junto a la pagina.

<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"><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']; // recupero los datos a travez del atributo name

$comando = "SELECT * FROM utenti 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 ['nome']    =  $fila ['nome'];
$_SESSION ['email']   =  $fila ['email'];
$_SESSION ['tel']     =  $fila ['telefono'];

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

print "<a href="logout.php>cerrar sesion</a>" // este enlace no se puede imprimir

mysql_close($conex);}

?>
<?php
session_start();

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

?>
// aqui esta el contenido que deberia mostrarse solo cuando haya iniciado sesion
// el contenido es un comentario que deberia mostrarse en la pagina principal

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

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

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


Otras Preguntas y Respuestas


Actividad Reciente

...

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

Conecta