Foros del Web » Programando para Internet » PHP »

Ayuda Sobre Inicio De Sesiones

Estas en el tema de Ayuda Sobre Inicio De Sesiones en el foro de PHP en Foros del Web. Hola Master's; Alguien me puede ayudar con lo que son los inicios de sesiones, leean lo que he hecho espero poder explicarme; En el site ...
  #1 (permalink)  
Antiguo 18/10/2003, 00:58
 
Fecha de Ingreso: octubre-2003
Ubicación: Córdoba
Mensajes: 12
Antigüedad: 20 años, 6 meses
Puntos: 0
Exclamación Ayuda Sobre Inicio De Sesiones

Hola Master's;
Alguien me puede ayudar con lo que son los inicios de sesiones, leean lo que he hecho espero poder explicarme;
En el site que estoy haciendo tengo un menu de download y para bajar unos archivos necesitas primero llenar un formato de registro, logico una vez ya teniendo tus datos puedes entrar a lo que es la opcion de download donde se te pide tu Login y Password, miren les muestro el codigo

<?
//conecto con la base de datos
$conn = mysql_connect("localhost","topicos","qwerty");
//selecciono la BBDD
mysql_select_db ("topicos_samis",$conn);

//Sentencia SQL para buscar un usuario con esos datos
$sql = "select * from registro where correo='$correo' and password='$passw'";

//Ejecuto la sentencia
$res = mysql_query($sql,$conn);

//vemos si el usuario y contraseña es váildo
//si la ejecución de la sentencia SQL nos da algún resultado
//es que si que existe esa combinación usuario/contraseña
if (mysql_Num_Rows($res)!=0){
//usuario y contraseña válidos
//defino una sesion y guardo datos
session_start();
session_register("autentificado");
$autentificado = "SI";
header ("Location: aplicacion.php");
}else {
//si no existe le mando otra vez a la portada
header("Location: inicio.php?errorcorreo=si");
}
mysql_free_result($res);
mysql_close($conn);
?>

ahora bien, me marca error en las siguiente lineas de codigo las cuales son las siguientes:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/topicos/public_html/control.php on line 16

Warning: Cannot modify header information - headers already sent by (output started at /home/topicos/public_html/control.php:16) in /home/topicos/public_html/control.php on line 25

Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in /home/topicos/public_html/control.php on line 27

y pues ya le cambie varias cosas del codigo pero pues me sigue marcando los mismos errores alguien me puede asesorar xq la verdad ya se me seco el cerebro y ya no se que onda =(
Se los agradecere si me pueden ayudar, me pueden contactar a mi correo; [email protected]
Muchas Gracias !
  #2 (permalink)  
Antiguo 18/10/2003, 03:08
Avatar de McManaman  
Fecha de Ingreso: agosto-2003
Ubicación: Ecuador - Guayaquil
Mensajes: 119
Antigüedad: 20 años, 7 meses
Puntos: 0
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/topicos/public_html/control.php on line 16

$conn = mysql_connect("localhost","topicos","qwerty");
//selecciono la BBDD
mysql_select_db ("topicos_samis",$conn);


AUMENTALE EL or die para ver si no hay algun error de coneccion

$conn = mysql_connect("localhost","topicos","qwerty")or die("Error al conectarse");

mysql_select_db ("topicos_samis",$conn) or die("Error al seleccionar base dedatos");

quizas sea que no se esta conectando a la bse de datos por eso te sale ese error

if (mysql_Num_Rows($res)!=0){

Num_Rows te coge asi????


Warning: Cannot modify header information - headers already sent by (output started at /home/topicos/public_html/control.php:16) in /home/topicos/public_html/control.php on line 25

no puedes poner session_start(); abajo ..... DEBE ESTAR EN LA PRIMERA LINEA DESPUES DEL <?
NO TIENE QUE HABER NADA DE CODIGO ANTES DEL session_start();
__________________
...Hay unos que saben TODO de nada y otros que saben NADA de TODO... think about it
  #3 (permalink)  
Antiguo 18/10/2003, 11:58
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Usa preferentemente mysql_error() .. así localizaras errores tanto de conexión a tu BD como de sintax SQL mál usada ..

Código PHP:
$res mysql_query($sql,$conn) or die(mysql_error()); 
(usalo en todas las funciones de mysql_xxx() .. por lo menos en las de connect .. select_db y query ...)

El session_start() .. puede estar ahí perfectamente (en esa posición del código) .. Lo único que no ha de estar por delante de esa llamada a inicio de sesiones (session_start() ) son otras cabeceras HTTP .. HTML o simples espacios antes de <? .. El error que dá en concreto es provocado por qué se muestra antes "HTML" .. justamente el "HTML" que se genera al mostrarte PHP los otros errores de conexión a tu BD .. Solventando esos, se soluciona el de session_start() ..

Y .. Consejos:

* usa exit(); a continuación de tus header("location: ...."); así te aseguaras de terminar la ejecución del script en ese instante .. pues ya PHP le habrá mandado la cabecera de "location" al navegador para que "cambie la página que está viendo el cliente por la que le indicas".

* NO uses a ser posible session_register() y mucho menos asumas las variables como gloables .. Ese "$autentificado=SI" puede ser muyyy peligroso si no usas los arrays supergloables $_SESSION o almenos $HTTP_SESSION_VARS y más encima trabajas con register_globals a ON (en tu php.ini .. phpinfo() también lo puedes ver) ..

Si trabajas con PHP 4.1.0 o superior te recomiendo ENCARECIDAMENTE que uses los arrays supergloables $_SESSION para manejarte con sesiones (y en general todos los demas $_GET .. $_POST .. etc). En las FAQ's de este foro tienes algúnos ejemplos.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #4 (permalink)  
Antiguo 18/10/2003, 13:47
 
Fecha de Ingreso: octubre-2003
Ubicación: Veracruz, México
Mensajes: 169
Antigüedad: 20 años, 6 meses
Puntos: 0
Hola a todos, una super pregunta con esto de las sesiones como le hago para usar sesiones sin que el navegador admita cookies, es decir como le paso el id de la sesion a las demas páginas o como hago eso.
Por su taneción gracias.
  #5 (permalink)  
Antiguo 18/10/2003, 14:11
 
Fecha de Ingreso: octubre-2003
Ubicación: Concepción
Mensajes: 84
Antigüedad: 20 años, 6 meses
Puntos: 0
Ok. Jarr, puede que los errores que te arroja MySQL se deban a lo siguiente:

Este es tu codigo:
$sql = "select * from registro where correo='$correo' and password='$passw'";

Si los atributos correo y password son VARCHAR prueba comparando con tu variable desde el formulario utilizando 'like' no uses '=' porque MySQL puede intentar comparar con un valor numérico, haz algo asi:

$sql = "select * from registro where correo like '$correo' and password like '$passw';

Saludos
heraldex
  #6 (permalink)  
Antiguo 18/10/2003, 20:18
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
heraldex .. no es tan complicado ... sentencias SQL son correctas .. pero, antes de nada habría que ver si toman el valor esperado esas variables ..

En un WHERE campo='$variable' .. la comparación si mal no recuerdo es "case sensitive" .. Otro tema a ver .. ¿Que dato guardas y que dato comparas (tu $variable)

Para eso .. si se usa mysql_error() como mencioné se podría ver el error que Mysql indique ... tal vez algún "sintax error near ' ..." o algo así que vendría a ser por ejemplo que $correo no toma el valor esperado.

ray_rockus
El "id de la sesión" (SID) si lo quieres propagar manualmente debes usar la constante SID y propagarla en todos tus links y redireccionamientos que hagas (ya sean javasript, meta de refresh o header("location ..") ..) también en formularios bajo un campo hidden ..

Tambien puedes componer el SID usando las funciones:
session_name() y session_id() ..

Si fuera un link ..

Código PHP:
echo "<a href=\"nose.php?session_name()."=".session_id()\">link</a>"
Si fuera un campo hidden de un formulario .. session_name() devuelve el nombre en curso de tu sesión y session_id() el ID asignado a esa sesión iniciada (siendo SID constante todo eso junto)

Código PHP:
<input type="hidden" name="<? echo session_name();" value="<? echo session_id(); ?>">
más info al respecto en el manual OFICIAL de PHP:
www.php.net/session

PD: ray_rockus: Por favor .. no mezcles preguntas en un mismo mensaje .. se claro y si se resuelve un tema (tu preguna incial) y tienes -otra- pregunta .. inicia un nuevo tema (como es este caso de como propagar el SID en modo manual ..). Y avisa si tu problema es resuelto por las respuestas que te dén o bien lo resolvistes por tus própios médios ... sino aquí tienes a gente dando posibles soluciones a una cosa y tu preguntando otra .. en fin UN lio!.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 18/10/2003 a las 20:20
  #7 (permalink)  
Antiguo 18/10/2003, 21:06
 
Fecha de Ingreso: octubre-2003
Ubicación: Concepción
Mensajes: 84
Antigüedad: 20 años, 6 meses
Puntos: 0
Buen punto Cluster, se me habia olvidado, en realidad es lo primero q se debe verificar, que las variables tomen el varor que queremos y en el formato correcto (MAYUSCULAS/minusculas).

Con respecto a la sintaxis, debo mencionar que personalmente he tenido algunso inconvenientes al tratar de comparar variables de tipo caracter mediante el simbolo "=" en sentencias de MySQL por esta razón utilizo "like", de esa forma puedo ordenar un poco el código e identificar cuando estoy comparando números o caracteres.

saludos
heraldex
  #8 (permalink)  
Antiguo 18/10/2003, 21:12
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
mmm heraldex

Siempre he usado la sintax tipo:

Código PHP:
$sql="SELECT * FROM tabla WHERE campo='$valor'"
sin problemas .. sean cadenas (strings) o numéricos .. O bien sintax (concatenando).

Código PHP:
$sql="SELECT * FROM tabla WHERE campo='".$valor."'"
Así veo "coloreado" en cualquier editor de código mi variable "PHP" rondando por ahí en la sentencia SQL ..

¿que problemas has tenido?

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #9 (permalink)  
Antiguo 18/10/2003, 22:43
 
Fecha de Ingreso: octubre-2003
Ubicación: Concepción
Mensajes: 84
Antigüedad: 20 años, 6 meses
Puntos: 0
Mira, en principio cuando comence a utilzar PHP y MySQL no estaba seguro de como se realizaban estas comparaciones (ahora se que en PHP son lo mismo), pero para ser mas especificos: en C tu puedes comparar variable=="string" si variable ha sido definida char *, y no quiero meterme a hablar de C pq no es el obejtivo de este foro, pero ademas te puedo decir q la misma comparacion se puedde realizar con la funcion strcmp(variable,string). Por esta razón, y es algo a lo que ya me acostumbre en lo personal, utilizo "=" para comparar valores numéricos y "like" para comparar strings.

Creo que en gustos y versatilidad no hay nada escrito, no es que representen problemas directamente, más bien "yo era el del problema".

Saludos
Heraldex
  #10 (permalink)  
Antiguo 18/10/2003, 23:04
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
mm bueno ... heraldex no sé si conoces que en PHP puedes comparar no sólo por valor sino también por "tipo" usando === (si, tres iguales)

ejemplo:

Código PHP:
$algo='1';
$otra=1;

if (
$algo===$otra){
echo 
"son igual tipo y valor";
} else {
echo 
"no son igual tipo ni valor"
ahí te tendría que decir que no son del mismo tipo .. pues una es un string y el otro un entero .. Si pruebas a usar dos == verás que te dice que son iguales (de valor ..ya que PHP "descarta" el tipo en ese caso) ..

mm pero eso es de "PHP" .. y lo que estabamos hablando es con respecto a Msyql .. Creo que me fuí por las ramas, pero ya lo escribí así que ahí queda de "cultura general" si no lo conocias xD.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 18/10/2003 a las 23:05
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 17:31.