Perfil de un usuario, problema!

Iniciado por den_22, 5 Marzo 2010, 04:44 AM

0 Miembros y 1 Visitante están viendo este tema.

den_22

Acá posteo por las dudas el script del index.php


Código (php) [Seleccionar]
<?php



error_reporting
(E_ALL E_NOTICE);
ob_start();

define('INCLUDE_CHECK',true);

require(
"connect.php");


//Archivos incluidos solo si el INCLUDE_CHECK está definido

session_name('pLogin');
//Empezando la sesión

session_set_cookie_params(2*7*24*60*60);
//La cookie vive por 2 semanas

session_start();

if(
$_SESSION['id'] && !isset($_COOKIE['pRemember']) && !$_SESSION['rememberMe'])
{
//Si está logueado, pero no tiene la cookie dmRemember (el navegador se reinicia)
// y si no ha checkeado la rememberMe checkbox:

$_SESSION=array();
session_destroy();

//Destruir la sesion
}

if(isset(
$_GET['logoff']))
{
$_SESSION=array();
session_destroy();

header("Location: index.php");
exit;
}

if(
$_POST['submit']=='Ingresar')
{
//checando si el login form ha sido submit
$err=array();
//Tira los errores nuestros 


if(!
$_POST['username'] || !$_POST['password'])
$err[]='Todos los campos deben ser completados!';

if(!
count($err))
{
$_POST['username']=mysql_real_escape_string($_POST['username']);
$_POST['password']=mysql_real_escape_string($_POST['password']);
$_POST['rememberMe']=(int)$_POST['rememberMe'];

//escaping all input data

$row=mysql_fetch_assoc(mysql_query("SELECT id,usuario FROM prueba WHERE usuario='{$_POST['username']}' AND pass='".md5($_POST['password'])."'"));

if($row['usuario'])
{
//Si todo está logueado correctamente

//$_SESSION['username']=$row['user'];
$_SESSION['usuario']=$row['usuario'];
$_SESSION['id']=$row['id'];
$_SESSION['sexo']=$row['sexo'];
$_SESSION['rememberMe']=$_POST['rememberMe'];

//Store some data in the session

setcookie('dmRemember',$_POST['rememberMe']);
}
else $err[]='Usuario y/o Password incorrectos!';
}

if($err)
$_SESSION['msg']['login-err']=implode('<br />'$err);
//Guardamos los mensajes de error en la sesion

header("Location: index.php");
exit;
}
else if(
$_POST['submit']=='Registrar')
{
//Si el formulario de registro ha sido enviado

$err=array();
if(strlen($_POST['firstname'])>100)
{
$err[]='Tu nombre(s) debe tener menos de 100 caracteres!';
}
 
if(!preg_match('/[^0-9\-\_\.]+/i',$_POST['firstname']))
{
$err[]='Tu nombre(s) contiene caracteres inválidos!';
}
 
if(strlen($_POST['lastname'])>100)
{
$err[]='Tu apellido debe tener menos de 100 caracteres!';
}
 
if(!preg_match('/[^0-9\-\_\.]+/i',$_POST['lastname']))
{
$err[]='Tu apellido contiene caracteres inválidos!';
}

if(strlen($_POST['username'])<|| strlen($_POST['username'])>100)
{
$err[]='Tu nombre de usuario debe tener entre 4 y 100 caracteres!';
}

if(preg_match('/[^a-z0-9\-\_\.]+/i',$_POST['username']))
{
$err[]='Tu nombre de usuario contiene caracteres invalidos!';
}

if(strlen($_POST['password'])<|| strlen($_POST['password'])>32)
{
$err[]='Tu contraseña debe tener entre 6 y 32 caracteres!';
}

if(preg_match('/[^a-z0-9\-\_\.]+/i',$_POST['password']))
{
$err[]='Tu contraseña es débil!';
}

if($_POST['repassword']!=$_POST['password'])
{
$err[]='Tu repeticion de password es distinta de la primera!';
}

if(!checkEmail($_POST['email']))
{
$err[]='Tu email no es válido!';
}

if(!count($err))
{
//Si no hay errores

$_POST['email']=mysql_real_escape_string($_POST['email']);
$_POST['password']=mysql_real_escape_string($_POST['password']);
$_POST['username']=mysql_real_escape_string($_POST['username']);
$_POST['firstname']=mysql_real_escape_string($_POST['firstname']);
$_POST['lastname']=mysql_real_escape_string($_POST['lastname']);
$_POST['sexo']=mysql_real_escape_string($_POST['sexo']);
//Escape the input data



mysql_query(" INSERT INTO prueba(firstname,lastname,usuario,pass,email,sexo,dt)
VALUES('"
.$_POST['firstname']."','".$_POST['lastname']."','".$_POST['username']."','".md5($_POST['password'])."','".$_POST['email']."','".$_POST['sexo']."',NOW())");


if(mysql_affected_rows($link)==1)
{
send_mail( 'test@test.com',
$_POST['email'],
'Registración de prueba',
'Tu nombre de usuario es: '.$username.'\n Tu contraseña es: '.$password);


$_SESSION['msg']['reg-success']='Te hemos enviado un email con tu información de registro!';
}
else $err[]='El nombre de usuario ya está en uso!';
}

if(count($err))
{
$_SESSION['msg']['reg-err']=implode('<br />',$err);
}

header("Location: index.php");
exit;


}




?>



Ya cambié $usuario por $query. No sé que mas hacer,   :(

WHK

#21
intentalo así:
Código (php) [Seleccionar]
<?php
include("function.php");
include(
"getdata.php");
include(
"connect.php");

if(isset(
$_GET['usuario'])){
 if(
$query mysql_query("
  SELECT * FROM prueba 
  WHERE usuario='"
.mysql_real_escape_string($_GET['usuario'])."'
  LIMIT 1
 "
)){
  
$usuario mysql_fetch_array($queryMYSQL_ASSOC);
  if(
is_array($usuario[0])){
   
$usuario $usuario[0];
  }
  echo 
'
   Bienvenid@
    <b>'
.htmlspecialchars($usuario['usuario'], ENT_QUOTES).'</b>
   <br />
  '
;
 }else{
  echo 
'El usuario seleccionado no existe';
 }
}else{
 echo 
'No se ha seleccionado ningun usuario.'
}
?>


recuerda que  mysql_fetch_array() te entrega un array dimensional por cada resultado, por lo tantoo el primer valor es $usuario[0].
prueba con un print_r($usuario);

Donde dice:
if(!preg_match('/[^0-9\-\_\.]+/i',$_POST['firstname']))
no necesitas ser tan restrictivo, puedes mantener todo tipo de carácteres si sabes procesarlos bién.

saludos.

den_22

Cita de: WHK en  7 Marzo 2010, 05:18 AM
intentalo así:
Código (php) [Seleccionar]
<?php
include("function.php");
include(
"getdata.php");
include(
"connect.php");

if(isset(
$_GET['usuario'])){
 if(
$query mysql_query("
  SELECT * FROM prueba 
  WHERE usuario='"
.mysql_real_escape_string($_GET['usuario'])."'
  LIMIT 1
 "
)){
  
$usuario mysql_fetch_array($queryMYSQL_ASSOC);
  if(
is_array($usuario[0])){
   
$usuario $usuario[0];
  }
  echo 
'
   Bienvenid@
    <b>'
.htmlspecialchars($usuario['usuario'], ENT_QUOTES).'</b>
   <br />
  '
;
 }else{
  echo 
'El usuario seleccionado no existe';
 }
}else{
 echo 
'No se ha seleccionado ningun usuario.'
}
?>


recuerda que  mysql_fetch_array() te entrega un array dimensional por cada resultado, por lo tantoo el primer valor es $usuario[0].
prueba con un print_r($usuario);

Donde dice:
if(!preg_match('/[^0-9\-\_\.]+/i',$_POST['firstname']))
no necesitas ser tan restrictivo, puedes mantener todo tipo de carácteres si sabes procesarlos bién.

saludos.


Bueno muchas gracias, por tomarte el trabajo, pero no hay forma, tal vez me haya olvidado de declarar $usuario. Es tarde y no me da la cabeza ya, jaja.

Por cierto es "no necesitas ser tan restrictiva" jaja, soy mujer.

Gracias, saludos

Nakp

es que mira... es un desorden

incluyes "function.php" aqui no hay problema, incluyes "getdata.php" y este a su vez connect.php, y mas abajo vuelves a incluir connect.php (esto en modificarperfil.php)

en getdata.php haces esto


Código (php,7,12) [Seleccionar]
<?php
 
 
 
include "connect.php";
 
$query=mysql_query("select * from prueba where usuario=$usuario");
$getname=mysql_fetch_array($query); //linea 11 aqui esta el warning
 
$firstname=$getname["firstname"];
$lastname=$getname["lastname"];
$usuario=$getname["usuario"];
$gender=$getname["genero"];
 
 
?>


usas $usuario antes de definirlo, ademas no lo encierras en comillas simples, esto es en las inclusiones xD (el orden que lleva en modificarperfil.php)

ahora en modificarperfil.php

Código (php,12,13,14) [Seleccionar]
<?php
 
include("function.php");
include(
"getdata.php");
include(
"connect.php"); //incluimos el connect.php que contiene los datos de la conexión a la db y la sesión
 
if(!isset($_GET['usuario'])){
echo 
'No se ha seleccionado ningun usuario.'
}else{
 
 
$query=mysql_query("SELECT * FROM prueba WHERE usuario=$usuario ");
if(
mysql_num_rows($usuario)>0){
$query=mysql_fetch_array($usuario);
 
//todo comprobado, ahora solo falta mostrar los datos
echo 'Bienvenid@ <b>'.$usuario[usuario].'</b>
'
;
 
 
}else{
 
echo 
'El usuario seleccionado no existe';
}
}
?>


usas $usuario, que ya esta definido pero no encerrado entre comillas simples, y en las sig lineas, en vez de procesar la $query, que debería ser el parametro de mysql_num_rows() y mysql_fetch_array(), le pasas $usuario xD
Ojo por ojo, y el mundo acabará ciego.


den_22

Bueno Nakp, hice lo que dijiste. Te comento uso el ZendStudio, para hacer debug en el codigo.

Cambié en el modificarperfil.php:

Código (php) [Seleccionar]
<?php
 
include('function.php');
include(
'getdata.php');
include(
'connect.php'); //incluimos el connect.php que contiene los datos de la conexión a la db y la sesión
 
if(!isset($_GET['usuario'])){
echo 
'No se ha seleccionado ningun usuario.'
}else{
 
 
$query=mysql_query("SELECT * FROM prueba WHERE usuario='$usuario' ");
if(
mysql_num_rows($query)>0){
$query=mysql_fetch_array($query);
 
//todo comprobado, ahora solo falta mostrar los datos
echo 'Bienvenid@ <b>'.$usuario[usuario].'</b><br>';
 
 
}else{
 
echo 
'El usuario seleccionado no existe';
}
}
?>


En el getdata.php:

Código (php) [Seleccionar]
<?php
 
 
 
include("connect.php");


 
$query=mysql_query("select * from prueba where usuario='$usuario'");
$getname=mysql_fetch_array($query);  //linea 11 aqui esta el warning

$usuario=$getname["usuario"];
$firstname=$getname["firstname"];
$lastname=$getname["lastname"];
$gender=$getname["genero"];
 
?>


Y el function.php:

Código (php) [Seleccionar]
<?php




function getfname($usuario)
{
$query mysql_query("select * from prueba where usuario='$usuario' ");
$getnamemysql_fetch_array($query);
$firstname$getname["firstname"];
return $firstname;
}

function 
getlname($usuario)
{
$query =mysql_query("select * from prueba where usuario='$usuario' ");
$getnamemysql_fetch_array($query);
$lastname=$getname["lastname"];
return $lastname;
}


function 
getusuario($usuario)
{
$query=mysql_query("select * from prueba where usuario='$usuario' ");
$getname=mysql_fetch_array($query);
$usuario=$getname["usuario"];
return $usuario;
}

function 
getgender ($usuario)
{
$query=mysql_query("select * from prueba where usuario='$usuario' ");
$getname=mysql_fetch_array($query);
$gender=$getname["Genero"];
return $gender;
}




?>


Ahora el problema es que al hacer el debug en modificarperfil, siempre salta la linea del "No se ha seleccionado ningun usuario", o sea creo que no sigue las lineas siguientes. Traté de quitarle al getdata el include ('connect.php') pero despues no se podia conectar. Y en el getdata, en la linea 7 un notice de Undefined variable,
Código (php) [Seleccionar]
$query=mysql_query("select * from  prueba where usuario='$usuario'");.
Traté de definirlo mas arriba pero ni ahi.

Bueno gracias a todos.

Cita de: Castg! en  7 Marzo 2010, 15:38 PM
Cita de: WHK en  7 Marzo 2010, 05:07 AM
realmente faltaría hacer todo el script denuevo


+1  ;-)

Castg! es lo que hay,  :-(

Nakp

Cita de: den_22 en  7 Marzo 2010, 16:57 PM
Bueno Nakp, hice lo que dijiste. Te comento uso el ZendStudio, para hacer debug en el codigo.

En el getdata.php:

Código (php,7,10) [Seleccionar]
<?php
 
 
 
include("connect.php");


 
$query=mysql_query("select * from prueba where usuario='$usuario'");
$getname=mysql_fetch_array($query); //linea 11 aqui esta el warning

$usuario=$getname["usuario"];
$firstname=$getname["firstname"];
$lastname=$getname["lastname"];
$gender=$getname["genero"];
 
?>



te falta eso... estas usando usuario (primera linea resaltada) pero lo defines despues (segunda linea resaltada) el orden es importante :P
Ojo por ojo, y el mundo acabará ciego.

den_22

Nakp, igual dice undefined variable getname, lo puse de esta manera. Pero si ya está declarada en function. Voy a tirar la compu por la ventana
Código (php) [Seleccionar]
<?php
 
 
 
include("connect.php");


$usuario=$getname["usuario"];
$query=mysql_query("select * from prueba where usuario='$usuario'");
$getname=mysql_fetch_array($query);  


$firstname=$getname["firstname"];
$lastname=$getname["lastname"];
$gender=$getname["genero"];
 
?>

Nakp

estas llamando una funcion o un vector?

creo que es
Código (php) [Seleccionar]

$usuario = gefname('usuario');


o

Código (php) [Seleccionar]
$usuario = $_POST['username'];

no se de donde sacas $getname hehe
Ojo por ojo, y el mundo acabará ciego.

Castg!

Código (php) [Seleccionar]
$getname=mysql_fetch_array($query);

tenes un problema con la definicion de variables :S porq la usas y despues la definis. la primer variable $usuario la tenes que poner como yo te dije! y tambien nakp te lo dijo. una vez que hallas elegido el usuario, ahi consultas la base de datos y despues le das el valor a getname.