Duda sobre reconocimiento de URL de un usuario en concreto!

Iniciado por jen_, 3 Abril 2015, 00:31 AM

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

jen_

Hola a todos, mirad, si os soy sincero estoy algo desesperado ya que llevo como 3 horas intentando averiguar cómo hacerlo pero ni a patadas consigo, veréis, hace una temporada que empecé con PHP y estoy en el desarrollo de una web dinámica y mi intención es un proyecto de instituto que es basado en un login, registro, mensajes privados y todo ese rollo, (esa parte ya la tengo hecha) pero al tema que os traigo es que, aún no me entra en la cabeza de qué forma puedo hacer para que cuando un usuario se registre le aparezca tipo /user?id=2938 y luego pueda personalizarlo a un simple /nombredeusuario, no sé si me entendéis, he probado muchas cosas pero no puedo, habréis notado que el usuario es nuevo, me acabo de registrar, no sabía a quién acudir, os dejo parte de mi código del login y del registro a ver qué se os ocurre, un saludo y gracias.

r.php
Código (php) [Seleccionar]
<?php
    
    
# configuración principal de registro

    
session_start();
    include_once (
'config/connection_hex.php');

    function 
check__mail ($user__check_val__) {
        if (!
ereg('^([a-zA-Z0-9._]+)@([a-zA-Z0-9.-]+).([a-zA-Z]{2,4})$'$user__check_val__)) {
            return 
FALSE; }

            else { return 
TRUE; }
    }


    
# configuración primaria
    # recolocación de valores en variables

    
$name $_POST['firstname'];
    
$emai $_POST['reg_email__'];
    
$token $_POST['reg_token__'];
    
$reg_date__ date('Y-m-d');


    
# comprobación de si el usuario existe
    
    
$nw__usr mysql_query ("SELECT reg_email__ from usuarios WHERE reg_email__ = '$emai'");
        if (
mysql_num_rows($nw__usr) >) {
            echo 
'El email ya est&aacute; en uso.'; }

    else {

    
$nw__tok mysql_query ("SELECT reg_token__ from usuarios WHERE reg_token__ = '$token'");
        if (
mysql_num_rows($nw__tok) >) {
            echo 
'El token ya est&aacute; asignado.'; }

    else {

       if(isset(
$_POST['register'])) # al pulsar el valor del 'submit' declarado como 'register' que haga:
    
{
        if(
$_POST['wp_stamp__'] == '2'){ echo 'No puedes hacer esto.'; } else {

        if(
$_POST['firstname'] == '') { echo 'Nombre?'; } else {

        if(
$_POST['lastname'] == '') { echo 'Apellidos?'; } else {

        
# si los campos siguientes están vacíos mandar 'echo'
        
if($_POST['reg_email__'] == '' or $_POST['reg_email_confirmation__'] == '' or $_POST['reg_passwd__'] == '') { echo 'Email, repite email y contrase&ntilde;a'; } else {

        if(
$_POST['sex'] == '0'){ echo 'Debes definir un sexo.'; } else {

        
$sql_selector__ 'SELECT * FROM usuarios';
        
$r__load_data mysql_query($sql_selector__);
        
$check__user___ 0
        
        
while($result mysql_fetch_object($r__load_data)) {

            if (
$result ->usuario == $_POST['reg_email__']) {
                
$check__user___ 1; }
        }


        if (
$check__user___ == 0)
        {

            if (
$_POST['reg_email__'] == $_POST['reg_email_confirmation__']) {

                
$firstname utf8_decode($_POST['firstname']);
                
$lastname utf8_decode($_POST['lastname']);
                
$usuario utf8_decode($_POST['reg_email__']);
                
$reg_passwd__ d5(sha1($_POST['reg_passwd__']));
                
$reg_date__ utf8_decode($_POST['reg_date__']);

                
$birthday_day $_POST['birthday_day'];
                
$birthday_month utf8_decode($_POST['birthday_month']);
                
$birthday_year $_POST['birthday_year'];

                
$sex utf8_decode($_POST['sex']);

                
$term $_POST['terms'];

                
$reg_token__ $_POST['reg_token__'];
                
$locale $_POST['locale'];
                
$wp_stamp__ $_POST['wp_stamp__'];

                
$timezone $_POST['timezone'];

                
$sql_selector__ "INSERT INTO usuarios (firstname, lastname, reg_email__, reg_passwd__, reg_date__, birthday_day, birthday_month, birthday_year, sex, reg_token__, locale, terms, wp_stamp__, timezone) VALUES ('$firstne', '$lastname', '$usuario', '$reg_passwd__', '$reg_date__', '$birthday_day', '$birthday_month', '$birthday_year', '$sex', '$reg_token__', '$locale', '$terms', '$wp_stamp__', '$timezone')";
                
mysql_query ($sql_selector__);
                echo 
'Te has registrado correctamente.'; }


            else {
                echo 
'Las contraseñas no coinciden.'; }
        }


        else {
            echo 
'Este usuario no está disponible.'; }
        }
    }
}}}}}}


Login.php
Código (php) [Seleccionar]
<?php
session_start
(); # iniciamos la sesión
require_one('connection.php');

class 
rester
{
public function index() # esta función se encarga de comprobar si existe el usuario en la base de datos
{
# recoger las variables POST del formulario
$email mysql_real_escape_string$_POST['reg_email__']);
$passwd md5(sha1(mysql_real_escape_string($_POST['reg_passwd__'])));

                
# realización de la consulta SQL 
# colocación de mysql_real_scapestring para evitar inyecciones
    $query "SELECT * FROM usuarios WHERE reg_email__='".$email."' AND reg_passwd__='".$passwd."';";
            
# ejecutar la consulta y guardar el resultado en la variable $result_cons
$result_cons mysql_query($quer,Connect::conn());

if($reg=mysql_fetch_array($result_cns))
{
$_SESSION['firstnam'] = $reg['firstname'];
header("Location:home.php");
}else{
header("Location:index.php?login_attempt=1);




?>

[/


jen_

No me ayuda teo, ya me informé sobre eso pero no me ayuda, no estoy pidiendo que me den el código ya hecho, sólo un por donde puedo empezar, y darme algunas ideas de la estructuración en la que me puedo basar para hacerlo.  :huh:

Alex_bro

#3
Amigo la solución que te dieron es la correcta, eso se hace con mod_rewrite en el archivo .htaccess

Ejemplo:
Código (php) [Seleccionar]
RewriteRule ^user/([a-zA-Z0-9]+)/$ user.php?id=$1 [L,NC]

Así, conviertes las direcciones como user/3/ en user.php?id=3

Espero que te ayude.

Saludos!

Edito:
Se me olvidó comentarte que significa lo de [L,NC]. Se les denominan Flags (por si quieres buscar más sobre el tema).
L (Last Rule) deja de leer las demás reglas al cumplirse esta.
NC es para que le de igual si son mayúsculas o minúsculas.

jen_

Gracias por intentar echarme una mano, pero me gustaría saber cómo hago para que se cree ese id?=numerodeusuario, y separar un perfil de otro, lo he intentado de una forma, pero al guardar los cambios de algún usuario, por ejemplo, de la localización o los apellidos, todos los tblApellidos se cambiaban, todos los de la tabla 'usuarios'...

Alex_bro

#5
Crea en la base de datos una columna en la tabla de los usuarios que se llame "id" y marca auto_increment, de esa forma, cada vez que hagas un INSERT... se creará ese id incrementando en uno cada vez.

Al usar UPDATE tienes que especificar ese id en el WHERE para que no se modifiquen todos los registros de la tabla como comentas.

Ejemplo:
Código (sql) [Seleccionar]
UPDATE usuarios SET name = 'Pepe' WHERE id = '3'

Saludos.

jen_

Sí, ya tenía creada la columna 'id', pero mi pregunta sería: ¿cómo hago para que al poner por ejemplo user.php?id=xx salga el número del usuario y me aparezcan sus datos, añado que los datos los saco con el $_SESSION.
Un saludo.

MinusFour

Cita de: jen_ en  3 Abril 2015, 21:12 PM
Sí, ya tenía creada la columna 'id', pero mi pregunta sería: ¿cómo hago para que al poner por ejemplo user.php?id=xx salga el número del usuario y me aparezcan sus datos, añado que los datos los saco con el $_SESSION.
Un saludo.

Si id = numero de usuario puedes sacar la informacion directamente de ahi:

Código (php) [Seleccionar]

$id = (int) $_GET['id']; //Numero de usuario


Para sacar la informacion:

Código (php) [Seleccionar]

$sql = "SELECT * FROM tabladeusuarios WHERE id = $id";

jen_

Gracias por la idea, le echaré un vistazo a ver si funciona como quiero, muchas gracias, responderé cuando acabe, saludos!