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
<?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) >0 ) {
echo 'El email ya está en uso.'; }
else {
$nw__tok = mysql_query ("SELECT reg_token__ from usuarios WHERE reg_token__ = '$token'");
if (mysql_num_rows($nw__tok) >0 ) {
echo 'El token ya está 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ñ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
<?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);
?>
[/
Busca mod_rewrite
http://www.sitepoint.com/guide-url-rewriting/
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:
Amigo la solución que te dieron es la correcta, eso se hace con mod_rewrite en el archivo .htaccess
Ejemplo:
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.
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'...
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:
UPDATE usuarios SET name = 'Pepe' WHERE id = '3'
Saludos.
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.
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:
$id = (int) $_GET['id']; //Numero de usuario
Para sacar la informacion:
$sql = "SELECT * FROM tabladeusuarios WHERE id = $id";
Gracias por la idea, le echaré un vistazo a ver si funciona como quiero, muchas gracias, responderé cuando acabe, saludos!