Foros del Web » Programando para Internet » PHP »

problemas al enviar datos

Estas en el tema de problemas al enviar datos en el foro de PHP en Foros del Web. buenas noches a todos, estoy teniendo problemas a la hora de subir mi pagina, en mi pc todo funciona bien, pero cuando la subo a ...
  #1 (permalink)  
Antiguo 12/09/2012, 20:33
 
Fecha de Ingreso: julio-2012
Ubicación: Guatemala
Mensajes: 99
Antigüedad: 12 años, 4 meses
Puntos: 2
Pregunta problemas al enviar datos

buenas noches a todos, estoy teniendo problemas a la hora de subir mi pagina, en mi pc todo funciona bien, pero cuando la subo a la red e ingreso mis datos para loguearme como usuario me salen estos errores:

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in... on line 30

Warning: Cannot modify header information - headers already sent by (output started at... on line 42

este es el codigo:

<?php
require_once("conexion2.php");
if (isset($_POST['ecorreo']) && isset($_POST['clave']))
{
$sega = sprintf ("select ".$EMA.", ".$CLA.", ".$NOM.", ".$EST." from ".$US." where ".$EMA."='%s' ", mysql_real_escape_string($_POST['ecorreo'] ) ); //ESTA ES LA LINEA 30
$registro=mysql_query($sega);
$reg=mysql_fetch_array($registro);
//echo $reg["$NOM"];
//echo $reg["$CLA"];
$_POST['clave'] =sha1($_POST['clave']);
if (($_POST['ecorreo']==$reg["$EMA"])&&($_POST['clave']==$reg["$CLA"]) && ($reg["$EST"]=='1'))
{
session_start();
$_SESSION['usuario']=$reg["$NOM"];
$_SESSION['tiempo']=time();
header("location:arenare.php");
}//ESTA ES LA LINEA 42
else
header("location:arenare.php");
}
else
{
?>
<div align="right">
<form action="index.php" method="POST">
<font color="#ffffff">Correo: </font><input type="text" name="ecorreo" size="25" maxlenght="25"/>
<font color="#ffffff">Clave: </font><input type="password" name="clave" size="20" maxlenght="25"/>
<input type="submit" value="Entrar"/>
</form>
<a href="recuperar.php"><font color="#ff0000" size="2"> &iquest;Olvidaste tu contraseña?</font></a>
</div>
<?php
}
?>

He estado moviendo de lugar el sessionstart(); poniendolo hasta arriba despues de <?php pero solo consigo otro error:

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at... on line 25

no se que me causa estos errores ya que en mi pc de manera local todo funciona al 100%, espero contar con su ayuda gracias!
  #2 (permalink)  
Antiguo 12/09/2012, 20:43
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 15 años, 4 meses
Puntos: 641
Respuesta: problemas al enviar datos

probablemente en tu local tengas los errores desativados, ya que estos errores realmente solo son warnings y no afectan el funcionamiento del sitio de manera grave.

header() no puede tener antes una salida html fijate en eso, generalmente para usarlo yo hago esto:
Código PHP:
Ver original
  1. if($var == true){
  2.    header location
  3. }
  #3 (permalink)  
Antiguo 12/09/2012, 21:17
 
Fecha de Ingreso: julio-2012
Ubicación: Guatemala
Mensajes: 99
Antigüedad: 12 años, 4 meses
Puntos: 2
Respuesta: problemas al enviar datos

gracias memoadian, quiere decir que el <head>, <body> etc deberian estar despues de header? o en el codigo que tengo como deberia colocar el header
  #4 (permalink)  
Antiguo 12/09/2012, 21:23
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 15 años, 4 meses
Puntos: 641
Respuesta: problemas al enviar datos

así es, como te dije, header no permite ninguna salida de código antes de de él.

por lo que como te digo puedes usar condicionales que es lo que a mi me funciona.
  #5 (permalink)  
Antiguo 12/09/2012, 21:42
 
Fecha de Ingreso: julio-2012
Ubicación: Guatemala
Mensajes: 99
Antigüedad: 12 años, 4 meses
Puntos: 2
Respuesta: problemas al enviar datos

en realidad no supe como colocar lo que me sugerias asi que decidi no complicarme y poner antes el php y me que do asi

<?php
require_once("conexion2.php");
if (isset($_POST['ecorreo']) && isset($_POST['clave']))
{
$sega = sprintf ("select ".$EMA.", ".$CLA.", ".$NOM.", ".$EST." from ".$US." where ".$EMA."='%s' ", mysql_real_escape_string($_POST['ecorreo'] ) );
$registro=mysql_query($sega);
$reg=mysql_fetch_array($registro);
//echo $reg["$NOM"];
//echo $reg["$CLA"];
$_POST['clave'] =sha1($_POST['clave']);
if (($_POST['ecorreo']==$reg["$EMA"])&&($_POST['clave']==$reg["$CLA"]) && ($reg["$EST"]=='1'))
{
session_start();
$_SESSION['usuario']=$reg["$NOM"];
$_SESSION['tiempo']=time();
header("location:x.php");
}
else
header("location:x.php");
}
else
{
?>
<html>
<head>
codigo
</head>
<body>
codigo
</body>
</html>

pero me sigue dando los mismos errores solo que ahora las hojas de estilo que llamaba en <head> no fueron incluidas :s
  #6 (permalink)  
Antiguo 12/09/2012, 21:50
Avatar de rodrigo791  
Fecha de Ingreso: noviembre-2009
Ubicación: Uruguay
Mensajes: 1.339
Antigüedad: 15 años
Puntos: 168
Respuesta: problemas al enviar datos

Ya te dije que session_start va al inicio del archivo, linea 1.
El problema de header es bastante comun, http://www.php.net/manual/es/function.header.php

cita: Recuerde que header() debe ser llamado antes de mostrar nada por pantalla, etiquetas HTML, líneas en blanco desde un fichero o desde PHP. Es un error muy común leer código con funciones como include o require, u otro tipo de funciones de acceso de ficheros que incluyen espacios o líneas en blanco que se muestran antes de llamar a la función header(). Sucede el mismo problema cuando se utiliza un solo fichero PHP/HTML.
  #7 (permalink)  
Antiguo 12/09/2012, 22:41
 
Fecha de Ingreso: julio-2012
Ubicación: Guatemala
Mensajes: 99
Antigüedad: 12 años, 4 meses
Puntos: 2
Respuesta: problemas al enviar datos

bueno separe los dos archivos, uno solo para el formulario y otro solo para el php, ya puse hasta arriba el sessionstart();

<?php
session_start();
require_once("conexion2.php");
if (isset($_POST['ecorreo']) && isset($_POST['clave'])){
$sega = sprintf ("select ".$EMA.", ".$CLA.", ".$NOM.", ".$EST." from ".$US." where ".$EMA."='%s' ", mysql_real_escape_string($_POST['ecorreo'] ) );
$registro=mysql_query($sega);
$reg=mysql_fetch_array($registro);
//echo $reg["$NOM"];
//echo $reg["$CLA"];
$_POST['clave'] =sha1($_POST['clave']);
if (($_POST['ecorreo']==$reg["$EMA"])&&($_POST['clave']==$reg["$CLA"]) && ($reg["$EST"]=='1')){
$_SESSION['usuario']=$reg["$NOM"];
$_SESSION['tiempo']=time();
header("location:y.php");
}
else
header("location:x.html");
}
else
{
header("location:x.html");
}

pero los errores persisten, ahora no tengo codigo html en el archivo
  #8 (permalink)  
Antiguo 12/09/2012, 22:55
Avatar de rodrigo791  
Fecha de Ingreso: noviembre-2009
Ubicación: Uruguay
Mensajes: 1.339
Antigüedad: 15 años
Puntos: 168
Respuesta: problemas al enviar datos

Como dice el manual , cuidado con los archivos que llamas con include y con require, si estos contienen espacios en blanco o salidas en pantalla dara error en header.
Revisa conexion2 que no tenga espacios en blanco ni las otras cosas que no deberia tener como dice ahi
  #9 (permalink)  
Antiguo 13/09/2012, 11:09
 
Fecha de Ingreso: julio-2012
Ubicación: Guatemala
Mensajes: 99
Antigüedad: 12 años, 4 meses
Puntos: 2
Respuesta: problemas al enviar datos

finalmente logre hacerlo funcionar, por si hay algun otro novato (como yo) que haya tenido estos problemas al subir su pagina mis errores fueron estos:

1. Como me comentaban aca mismo "header() no puede tener antes una salida html ", esto es antes de la etiqueta <html> etc etc, deben poner header("location:archivo.php"); o cualquier require_once, include_once, etc. que haga mencion a un archivo con header, asi realmente funcionará bien.

2. Tuve que migrar mi base de datos phpmyadmin a la del hosting, cuando hice esto no me percaté de darle todos los privilegios a la base de datos y precisamente fue eso lo que no me dejaba hacer ninguna sentecia mysql, luego de arreglar esto todo funciono bien.

buena suerte!

Última edición por ANDRESDD; 14/09/2012 a las 00:07

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:34.