entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Datos de usuario registrado PHP

Hola amigos Desarrolladores.

En este intento por aprender me he topado con varios problemas a los que gracias a ustedes he encontrado solucion, espero algun dia ya con conocimientos poder ayudar a alguien más aquí o en cualquier otro lado.

Bueno resulta lo siguiente, necesito mostrar los datos del usuario registrado en su cuenta, luego de iniciar session, todo el proceso de identificar al usuario , la contraseña e ingresar me funciona perfectamente

Utilizo esta formas para guardar el login en una variable

$_SESSION['usuario'] = $usuario; 

Muestro el nombre de el usuario en la pagina de esta manera:

Bienvenido <?php echo $_SESSION['usuario']; ?>

hasta ahi todo perfecto

La base de datos me responde bien, me muestra los resultados, pero de todos los usuarios de esta manera:

$servidor = "xxxxxxxxxxx"; //Nombre del servidor 
$usuario = "xxxxxxxxxxxx"; //Nombre de usuario en tu servidor 
$password = "xxxxxxxxxxxx"; //Contraseña del usuario 
$base = "xxxxxxxxxxxxxx"; //Nombre de la BD 
$username = "$usuario"; // Variable para reconocimiento de datos de usuario
$conexion = mysqli_connect($servidor, $usuario, $password) or die("Error al conectarse al servidor"); 
mysqli_select_db($conexion, $base) or die("Error al conectarse a la base de datos"); 

$buscar = mysqli_query($conexion, "SELECT * FROM compras"); 
if (mysqli_num_rows($buscar) > 0) { 
?> 
<table width = "650px" border = "1" cellpadding="0" cellspacing="0"> 
<tr> 
<th><center># Cliente </center></th>
<th><center>Usuario </center></th> 
<th><center>Fecha Activacion </center></th> 
<th><center>Tipo </center></th>
<th><center>Duracion </center></th>
<th><center>Renovacion Automatica </center></th> 
<th><center>Solicitar Soporte </center></th> 
</tr> 
<?php 
while ($datos = mysqli_fetch_array($buscar)){ 
?> 
<tr> 
<td> <center><?=$datos["id"]?> </center> </td>
<td> <center><?=$datos["nombre_administrador"]?>  </center></td> 
<td> <center><?=$datos["fecha"]?>  </center></td> 
<td> <center><?=$datos["tipo"]?>  </center></td> 
<td> <center><?=$datos["duracion"]?>  </center></td>
<td> <center><?=$datos["renovacion"]?>  </center></td>
<td> <center><a href="#">Enviar Mensaje</a> </center></td>
</tr> 
<?php 
} 
mysqli_free_result($buscar); 
?> 
</table> 
<?php 
} else { 
echo "No se encontraron datos en la base de datos"; 
} 
?> 

Se que para que me muestre los datos del usuario en específico que inicio session debo incluir WHERE indicando que me de un resultado solo si esa condición se cumple, la cual al colocar de esta manera, me genera error y ya no me muestra ningun resultado.

<?php 
//Conexión a la base de datos 
$servidor = "xxxxxxxxxxx"; //Nombre del servidor 
$usuario = "xxxxxxxxxxxx"; //Nombre de usuario en tu servidor 
$password = "xxxxxxxxxxxxxx"; //Contraseña del usuario 
$base = "xxxxxxxxxxxxxx"; //Nombre de la BD 
$username = "$usuario"; // Variable para reconocimiento de datos de usuario
$conexion = mysqli_connect($servidor, $usuario, $password) or die("Error al conectarse al servidor"); 
mysqli_select_db($conexion, $base) or die("Error al conectarse a la base de datos"); 

$buscar = mysqli_query($conexion, "SELECT * FROM compras WHERE $username = "$usuario""); 
if (mysqli_num_rows($buscar) > 0) { 
?> 

el error arrojado es el siguiente:

Parse error: syntax error, unexpected T_VARIABLE in /home/u363250006/public_html/soporte/index.php on line 52

1 Respuesta

3votos

white Puntos75880

hola @indiglosv

tienes 2 comillas dobles de más y no estas concatenando correctamente en esta linea:

mysqli_query($conexion, "SELECT * FROM compras WHERE $username = "$usuario"");

debería ser:

mysqli_query($conexion, "SELECT * FROM compras WHERE $username = '$usuario'");

recuerda que en comillas dobles una variable se puede mostrar dentro de estas, en comillas simples necesitas concatenar.

$sufijo = 'def';
$a = 'abc $sufijo'; // esto es: abc $sufijo
$b = 'abc ' . $sufijo; // esto es: abc def
$c = "abc $sufijo"; // esto es: abc def

cubierto ese asunto veamos otro posible problema, en mysql cuando evaluas una cadena debería estar en comillas. si la columna es usuario y la variable es $username entonces la consulta queda:

"SELECT * FROM usuarios WHERE usuario = '$username'"

existe realmente la columna con el nombre de usuario?

tu realizas esto:

$username = $usuario

doy por hecho de que $username contiene un nombre de una columna en tu tabla compras, reviza que sea así.

puedes depurar:

var_dump("SELECT * FROM compras WHERE $username = '$usuario'"); y ver que te imprime.

0voto

indiglosv comentado

Hola.

En efecto viendo bien el codigo me doy cuenta de las comillas extras, después de varias horas en el ordenador creo que lo recomendable es descansar porque no me di por enterado y lo repase mas de 15 veces para ver a donde estaba el error , pero efectivamente al realizar la corrección el error ya no se presenta.

ahora con la parte del codigo

$username = $usuario

fue error al escribir el post la correcta es la siguiente:

nombre_administrador = '$usuario'

el cual nombre_administrador es el nombre de mi columna en la tabla que contiene el nombre del usuario.

y en efecto el script funciona, me brinda el mensaje "Sin resultados en la base de datos" mensaje que debería de mostrar cuando no tiene datos , pero lo que no entiendo es porque no me muestra los resultados que debería de mostrar como lo son los campos que aunque no tenga compras debería mostrar, es decir estos:

<td> <center><?=$datos["id"]?> </center> </td>
<td> <center><?=$datos["nombre_administrador"]?>  </center></td> 
<td> <center><?=$datos["fecha"]?>  </center></td> 
<td> <center><?=$datos["tipo"]?>  </center></td> 
<td> <center><?=$datos["duracion"]?>  </center></td>
<td> <center><?=$datos["renovacion"]?>  </center></td>
<td> <center><a href="#">Enviar Mensaje</a> </center></td>

me quedo de esta manera:

$conexion = mysqli_connect($servidor, $usuario, $password) or die("Error al conectarse al servidor"); 
mysqli_select_db($conexion, $base) or die("Error al conectarse a la base de datos"); 

$buscar = mysqli_query($conexion, "SELECT * FROM compras WHERE nombre_administrador = '$usuario'");
if (mysqli_num_rows($buscar) > 0) { 
?> 
<table width = "650px" border = "1" cellpadding="0" cellspacing="0"> 
<tr> 
<th><center># Cliente </center></th>
<th><center>Usuario </center></th> 
<th><center>Fecha Activacion </center></th> 
<th><center>Tipo </center></th>
<th><center>Duracion </center></th>
<th><center>Renovacion Automatica </center></th> 
<th><center>Solicitar Soporte </center></th> 
</tr> 
<?php 
while ($datos = mysqli_fetch_array($buscar)){ 
?> 
<tr> 
<td> <center><?=$datos["id"]?> </center> </td>
<td> <center><?=$datos["nombre_administrador"]?>  </center></td> 
<td> <center><?=$datos["fecha"]?>  </center></td> 
<td> <center><?=$datos["tipo"]?>  </center></td> 
<td> <center><?=$datos["duracion"]?>  </center></td>
<td> <center><?=$datos["renovacion"]?>  </center></td>
<td> <center><a href="#">Enviar Mensaje</a> </center></td>
</tr> 
<?php 
} 
mysqli_free_result($buscar); 
?> 
</table> 
<?php 
} else { 
echo "No se encontraron datos en la base de datos"; 
} 
?> 

y adjunto un extracto de el código de login, que es el cual de donde recojo el nombre de usuario:

 session_start();  
  //Almaceno el nombre de usuario en una variable de sesión usuario
  $_SESSION['usuario'] = $usuario;  
  header("Location: index.php");  
 }

y cabe destacar que el usuario con el cual estoy probando , si posee compras DEMO pero no aparecen dichas compras, posiblemente sea que no estoy tomando bien el nombre del usuario ?

0voto

white comentado

podrías agregar la linea donde defines $usuario?

aca haces un WHERE WHERE nombre_administrador = '$usuario'

pero te cercioraste de que $usuario contenga un nombre de usuario?

intenta colocar:

echo 'valor de $usuario: ';
var_dump($usuario)

antes de:

$buscar = mysqli_query($conexion, "SELECT * FROM compras WHERE nombre_administrador = '$usuario'");

y dinos que te imprime

PD: no me queda muy claro aca:

$_SESSION['usuario'] = $usuario;

$usuario que valor contiene?

1voto

indiglosv comentado

Listo amigo lo solvente, el problema era que tenia 2 variables repetidas con el mismo nombre, la de la conexión a la DB y la de usuario, al corregirlo todo me funciono de maravilla

adicionalmente a ello , darle valor a la variable la cual me quedo de esta manera.

Le di valor a la variable en la misma pagina, ya que unicamente se lo habia dado en la pagina de validacion.

$usuario = "$_SESSION[usuario]";

para que me lo tome como me indicaste.

mysqli_query($conexion, "SELECT * FROM compras WHERE nombre_administrador = '$usuario'");

Me funciono perfecto, he probado con varios usuarios y funciono perfecto.

muchas gracias

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta