Autor Tema: obtener datos de MYSQL mediante GET,problema con palabras.  (Leído 506 veces)

Desconectado IvoFacundo

  • PHPerit@
  • *
  • Mensajes: 1
  • Karma: 0
  • Nuev@ PHPer@
    • Ver Perfil
obtener datos de MYSQL mediante GET,problema con palabras.
« en: 04 de Agosto de 2015, 03:02:41 am »
Hola comunidad Buenas Noches.

Espero que alguien pueda ayudarme porque llevo hace mas de 2 semanas tratando de solucionar y no puedo

Les explico mi problema...
Tengo una web en un localhost, y yo lo que quisiera es que la direccion del usuario sea esta ../perfil/ivofacundo (en mi caso) y no ../perfil/1 (yo soy el usuario con el id 1)..

le paso los codigos que estoy usando en est emomento asi ven cual seria el problema o si no lo hay que colocarle

.HTACCESS
Código: [Seleccionar]
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /web2/
RewriteCond %{REQUEST_FILENAME} !-f
#RewriteRule ^([^\.]+)$ $1.php [NC,L]
RewriteRule ^perfil/([a-zA-Z0-9-]*)  perfil.php?id=$1
RewriteRule ^post/([a-zA-Z0-9-]*)  post.php?id=$1
</IfModule>

El .htaccess me funciona a la perfección por ahora.

Este link tengo en que es el que redirecciona al perfil para obtener los datos mediante url
Código: [Seleccionar]
<a href='perfil/".$respuser["id"]."'>". $respuser["usuario"]."</a>
eso seria igual a:
Código: [Seleccionar]
<a href='perfil.php?id=".$respuser["id"]."'>". $respuser["usuario"]."</a>
$respuser["id"] es el id del usuario.
$respuser["usuario"] es el nombre de usuario.


y este esl el php dentro de PERFIL.PHP

Código: [Seleccionar]
<?php  session_start();
if (isset (
$_SESSION['user']))
{
 include(
'includes/cabecera.php');
 include(
'config/config.php');
 include(
"config/functions.php");
$datos=mysql_fetch_array($website);
//
$id_perfil $_GET["id"];
echo 
"<div class='headerin'>";
include('includes/header.php');
//perfil de usuario por id
$perfilados =mysql_query("SELECT * FROM usuarios WHERE id=".$id_perfil);
if(
$perfilado = @mysql_fetch_array($perfilados)){
$sexo=$perfilado["sexo"];
$pais ucwords($perfilado["pais"]);
?>

<title><?php echo $perfilado["nombres"]. " (@".$perfilado["usuario"].")" ;?></title>
<?php
echo "</div>
<br><br>
<div class'container'>
<div class='row'>
<div class='col-xs-12 col-sm-3 columna'><div class='page-header'>
        <span id='estadistica-nav'><center>Informacíon</center></span>
      </div><h3 class='media-heading'><b>"
.$perfilado["nombres"]."</b> <small title='$sexo'>".icon_sex($sexo)."</small></h3>";    
echo
"<div class='info-perfil'>
<span class='glyphicon glyphicon-user' aria-hidden='true'></span> @"
.$perfilado["usuario"]."<br>";
if (
$perfilado["pais"] !== '') {
echo 
"<span class='glyphicon glyphicon-map-marker' aria-hidden='true'> </span> ".$pais."<br><br>";
}
       echo
"</div>";
       if (
$perfilado["firma"] !== '') {
         echo 
"<div class='page-header'>
        <span id='estadistica-nav'><center> Info Personal</center></span></div>"
.$perfilado["firma"];
       }   
echo"</div><div class='col-xs-12 col-sm-9 columna '>
<div class='media'>
  <div>
  <div class='cover'><a class='fancybox-effects-b' href='photos/covers-users/"
.$perfilado["cover"]."' title='".$perfilado["nombres"]."'><img src='photos/covers-users/".$perfilado["cover"]."' alt=''/></a>
  </div>"
;
if(
$_SESSION["id_user"] == $perfilado["id"]){ 
  echo
"<div class='nav-buttons cover-btn'><button type='button' class='btn btn-default btn-md'><a href='#Cover' class='hint--bottom fancybox' data-hint='Cambiar foto de portada'>
  <span class='glyphicon glyphicon-camera' aria-hidden='true'></span></a></button></div>"
;
    }
 echo 
" </div>
 <div class='media-body'>
 <br><br><br><br></div>
 </div>"
;
 if($_SESSION["id_user"] == $perfilado["id"])
 {
echo
"<div class='nav-buttons'><a href='#Profile' class='hint--bottom fancybox' data-hint='Cambiar Foto'><button type='button' class='btn btn-default btn-md'>
  <span class='glyphicon glyphicon-camera' aria-hidden='true'></span></button></a> "
;
echo 
"<a href='cuenta' class='hint--bottom' data-hint='Editar cuenta' ><button type='button' class='btn btn-default btn-md'>
<span class='glyphicon glyphicon-pencil' aria-hidden='true'></span></button></a></div>"
;}
echo
"<center><div class='profile-photo'><a class='fancybox-effects-b' href='photos/profiles-users/".$perfilado["photo"]."' title='".$perfilado["nombres"]."'><img src='photos/profiles-users/".$perfilado["photo"]."' width='190' height='165' alt='".$perfilado["nombres"]."'/></a></div></center>  
</div></div>"
;
}
else{echo "no se ah encontrado el perfil :c";}
  } 
else {
 include(
'includes/cabecera.php') ;
echo "<legend>Hola usuario anonimo, por favor inicia sesión si es que tienes una cuenta.<br>
Si no tienes podes registrarte <a href='form.php'>Registrate</a> :D</legend>"
;}
 ?>


Espero puedan ayudarme y guiarme ya que soy nuevo en esto

Comunidad PHPeros

obtener datos de MYSQL mediante GET,problema con palabras.
« en: 04 de Agosto de 2015, 03:02:41 am »

Desconectado iStocker

  • PHPer@ Fijo
  • ***
  • Mensajes: 104
  • Karma: 6
  • ~ єssєитιαʟ ~
    • Ver Perfil
Re:obtener datos de MYSQL mediante GET,problema con palabras.
« Respuesta #1 en: 05 de Agosto de 2015, 09:27:44 am »
No tiene mucha complicación, lo que tienes ahí son reglas para la consulta por URL. La URL camuflajeada es procesada mediante un código regedix (en este caso es ([a-zA-Z0-9]*) para luego la información ser enviada a el archivo que va a procesarlo todo ¿Qué significa ésto? Que todos los caracteres que estén entre el alfabeto sean minúsculas o mayúsculas o tengan un número, sin importar la longitud será una consulta válida y se enviarán al archivo... Entendiendo esto sabemos que cualquier consulta que sea recibida así será camuflada como tal y en realidad la información se enviará a otro archivo, en este caso perfil.php?id=$1 (el $1 es una variable donde se almacena el dato consultado en la URL mediante la regla regedix).

Una vez entendido todo esto podemos intuir que el funcionamiento que deseas hasta el momento es correcto, entonces ¿Qué pasa? Lo que sucede es que al momento de que el archivo lee la información enviada puede procesarla erróneamente o no como se desea, si lo vemos de tal manera entonces suponemos que el algoritmo falla en algo, pero ¿Dónde trabajamos la información? En primera instancia en la consulta que se hace a la base de datos, vamos a revisarla y... ¡Eureka (vaga traducción de 'Lo he descubierto' del griego)! Nuestra consulta no trabaja la información como nosotros deseamos, así que la editamos para que lo haga...

Código: [Seleccionar]
$perfilados =mysql_query("SELECT * FROM usuarios WHERE id=".$id_perfil);
Si analizamos la consulta nos dice que seleccione toda la información de la tabla usuarios donde la columna id sea igual a la variable recibida por el método GET, pero nosotros queremos que también busque por nombre de usuario (he intuido que el nombre de usuario se almacena en la columna usuario, no sé si esté en lo correcto), así que le decimos a la consulta que también busque por el nombre de usuario con el operador lógico OR/||...

Código: [Seleccionar]
$perfilados =mysql_query("SELECT * FROM usuarios WHERE id= ".$id_perfil." OR usuario = '".$id_perfil."');
Observaciones:
- El motor MySQL está oficialmente considerado obsoleto, por lo tanto te recomendaría empezar a utilizar el nuevo motor MySQLi.
- Tu sistema en las consultas es vulnerable, te recomiendo consultas sobre inyecciones SQL y cómo evitarlas en PHP.
- Intenta tener un mejor manejo en la estructura de acuerdo al MVC.

Consulta 'protegida' contra inyecciones sql
Código: [Seleccionar]
$perfilados =mysql_query("SELECT * FROM usuarios WHERE id= ".mysql_real_escape_string($id_perfil)." OR usuario = '".mysql_real_escape_string($id_perfil)."');
Espero haberte ayudado o solucionado tu duda.
Saludos y suerte.
« Última modificación: 05 de Agosto de 2015, 09:29:48 am por iStocker »
¡FUUU!


Cita de: Mary Shaw
Menos del 10% del código tienen que ver directamente con el propósito del sistema; el resto tiene que ver con la entrada y salida, validación de datos, mantenimiento de estructuras de datos y otras labores domésticas



[/cent