¿Como mostrar todo el contenido de una tabla de Mysql en PHP?

publicado por: Anonymous

Quiero lograr que las personas con el rol de lector, solo vean los contenido de sus filas, pero que el administrador los vea todo, estoy usando este código pero no entiendo por que no funciona. No veo donde esta el fallo aquí en la lógica, ya que cuando quiero mostrar todas las tablas uso $consulta2 que selecciona todo de usuario

_x000D_

_x000D_

<?php_x000D_
session_start();_x000D_
include 'conexion.php';_x000D_
_x000D_
_x000D_
	$id_sesion = $_SESSION['id'];_x000D_
	$consulta = mysqli_query ($conn, "SELECT * FROM Usuario WHERE id = '". $id_sesion . "'" );_x000D_
	$consulta2 = mysqli_query ($conn, "SELECT * FROM Usuario" );_x000D_
	_x000D_
_x000D_
	_x000D_
_x000D_
	// error mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in ----->  _x000D_
	// se arreglo viendo el error asi 'if (!$consulta){ echo mysqli_error ($conn);}' resulta que escribi mal la tabla, usarlo para ver mas errores_x000D_
_x000D_
_x000D_
	// https://www.w3schools.com/php/func_mysqli_query.asp_x000D_
	// mysqli_query(connection,query,resultmode);_x000D_
	// https://www.w3schools.com/sql/ _x000D_
_x000D_
	if ((mysqli_num_rows ($consulta)> 0) || $_SESSION['cargo'] = "lector")_x000D_
		//  mysqli_num_rows ($consulta) va a ser igual  al numero de columnas, de la misma manera que  "Mysqli_query ($conn, "SELECT * FROM Usuarios")"  sera igual al valor que lleva dentro del parentesis. Por lo que si es mayor a 0, osea si hay columnas en la consulta, viendo asi que fue satisfactoria, se hace lo siguiente._x000D_
_x000D_
//array es fila (<-- -->), no columna _x000D_
	{_x000D_
_x000D_
		echo "<p> <br>"; // <------ sin esto no se muestra nada de los echos de abajo_x000D_
_x000D_
_x000D_
		// mysqli_fetch_array(result,resulttype);_x000D_
		// [result ]= Mysqli_query(), mysqli_store_result() or mysqli_use_result()_x000D_
		// [resulttype ] = MYSQLI_ASSOC, MYSQLI_NUM, MYSQLI_BOTH_x000D_
		while ($row = mysqli_fetch_array($consulta, MYSQLI_ASSOC)  )_x000D_
			// otro error: Use of undefined constant MYSQL_ASSOC - assumed 'MYSQL_ASSOC'_x000D_
			// use esto "if (!$row){ echo mysqli_error ($MYSQLI_ASSOC);}" resulta que coloque MYSQL_ASOC, cuando tuvo que ser MYSQLI_ASSOC_x000D_
			// https://www.phpclasses.org/discuss/package/9199/thread/4/_x000D_
_x000D_
			{_x000D_
_x000D_
			//https://stackoverflow.com/questions/2970936/how-to-echo-out-table-rows-from-the-db-php#_x000D_
			echo "<tr>";_x000D_
_x000D_
			echo "_x000D_
			<table>_x000D_
				<thead>_x000D_
					<tr>_x000D_
						<th>Nombre </th>_x000D_
						<th>Fecha creacion </th>_x000D_
						<th>Nick </th>_x000D_
						<th>Telefono </th>_x000D_
						_x000D_
_x000D_
				</thead>_x000D_
			";_x000D_
_x000D_
			echo " <td>".$row['nombre']."</td>";_x000D_
			echo " <td>".$row['fecha_creacion']."</td>";_x000D_
			echo " <td>".$row['nick']."</td>";_x000D_
			echo " <td>".$row['telefono']."</td>";_x000D_
			echo "</tr></table>";_x000D_
_x000D_
_x000D_
_x000D_
		}_x000D_
_x000D_
_x000D_
_x000D_
	}_x000D_
_x000D_
else if ((mysqli_num_rows ($consulta2)> 0) || $_SESSION['cargo'] = 'admin')_x000D_
_x000D_
{_x000D_
	echo "<p> <br>";_x000D_
_x000D_
		while ($row = mysqli_fetch_array($consulta2, MYSQLI_ASSOC)  )_x000D_
			{_x000D_
			echo "<tr>";_x000D_
_x000D_
			echo "_x000D_
			<table>_x000D_
				<thead>_x000D_
					<tr>_x000D_
						<th>Nombre </th>_x000D_
						<th>Fecha creacion </th>_x000D_
						<th>Nick </th>_x000D_
						<th>Telefono </th>_x000D_
						_x000D_
_x000D_
				</thead>_x000D_
			";_x000D_
_x000D_
			echo " <td>".$row['nombre']."</td>";_x000D_
			echo " <td>".$row['fecha_creacion']."</td>";_x000D_
			echo " <td>".$row['nick']."</td>";_x000D_
			echo " <td>".$row['telefono']."</td>";_x000D_
			echo "</tr></table>";_x000D_
_x000D_
_x000D_
_x000D_
		}_x000D_
}_x000D_
_x000D_
_x000D_
_x000D_
//Se te está pasando regresar $respuesta en formato JSON y su encabezado_x000D_
header('Content-Type: application/json');_x000D_
?>

_x000D_

_x000D_

_x000D_

Anexo unas imágenes mostrando como sin importar su cargo, siguen mostrando lo mismo.

introducir la descripción de la imagen aquí
introducir la descripción de la imagen aquí
introducir la descripción de la imagen aquí

EDIT PARA ANEXOS imagen de como luce ahora al sustituir el “else if” por “if” y del backend encargado de crear $_SESSION[‘cargo’] por que parece que allí esta el problema, no parece reconocerlo, no se si cometí un error allí.

introducir la descripción de la imagen aquí

_x000D_

_x000D_

<?php_x000D_
session_start();_x000D_
include_once 'conexion.php';_x000D_
//Declaramos un arreglo que será nuestro retorno_x000D_
$respuesta = array();_x000D_
_x000D_
//Primero hay que validar que las variables existan_x000D_
//La superglobal $_REQUEST responde a los verbos GET y POST_x000D_
if( empty( $_REQUEST['pwd'] ) || empty( $_REQUEST['nick'] ) ){_x000D_
  $respuesta['mensaje'] = 'Usuario y/o password vacío';_x000D_
}_x000D_
_x000D_
_x000D_
else{_x000D_
  //Guardamos y limpiamos las variables_x000D_
  $pwd= mysqli_real_escape_string($conn, $_REQUEST ['pwd']);_x000D_
  $nick= mysqli_real_escape_string($conn, $_REQUEST ['nick']);_x000D_
_x000D_
  //Creamos el SQL, no siempre funciona agregando así las variables, yo recomiendo concatenar_x000D_
  $sql = "SELECT * FROM Usuario WHERE nick = '". $nick. "' AND password = '".$pwd ."'"; _x000D_
_x000D_
  //Validamos que la consulta esté bien hecha_x000D_
_x000D_
  $result = mysqli_query ($conn, $sql);_x000D_
_x000D_
  if (mysqli_num_rows ($result)> 0)_x000D_
    //  mysqli_num_rows ($result) va a ser igual  al numero de columnas, de la misma manera que  "Mysqli_query ($conn, "SELECT * FROM Usuarios")"  sera igual al valor que lleva dentro del parentesis. Por lo que si es mayor a 0, osea si hay columnas en la consulta, viendo asi que fue satisfactoria, se hace lo siguiente._x000D_
{_x000D_
          //Aquí asignamos nuestro arreglo, assoc o array te sirven_x000D_
      $row = mysqli_fetch_array( $result );_x000D_
_x000D_
      //creas tus variables de sesión_x000D_
      $_SESSION['id'] = $row['id'];_x000D_
      $_SESSION['nick'] = $row['nick'];_x000D_
      $_SESSION['cargo'] = $row['cargo'];_x000D_
      $respuesta['mensaje'] = 'Se crearon las variables de sesión, conexión exitosa';_x000D_
_x000D_
      //Recuerda que por limpieza del servidor, borramos la información de la query y cerramos conexión_x000D_
      mysqli_free_result($result);_x000D_
      mysqli_close( $conn );_x000D_
_x000D_
}_x000D_
_x000D_
  else{_x000D_
      $respuesta['mensaje'] = 'Nombre de usuario y/o contraseña incorrecta';_x000D_
_x000D_
  }_x000D_
_x000D_
}_x000D_
_x000D_
//Ahora si, retornamos nuestra respuesta con formato y encabezado JSON_x000D_
header('Content-Type: application/json');_x000D_
echo json_encode($respuesta);_x000D_
?>

_x000D_

_x000D_

_x000D_

Tema solucionado.
introducir la descripción de la imagen aquí

solución

leyendo el codigo hay dos probelmas principales:

  1. De logica en el cual primero debes preguntar que tipo de cargo
    tiene, para que no ejecutes las 2 sentencias siempre, solo debes
    ejecutar la que necesitas y si la condicion se cumple.
  2. A cada vuelta de ciclo creabas la misma tabla con la mismca cabecera, por ende siempre te iba a imprimir la ultima fila.

dicho lo anterior, tu codigo deberia quedar asi:

<?php
session_start();
include 'conexion.php';

//creas una variable con el contenido base de la tabla

$tabla = "
      <table>
        <thead>
          <tr>
            <th>Nombre </th>
            <th>Fecha creacion </th>
            <th>Nick </th>
            <th>Telefono </th>
    </thead>
      ";

//pregunta primero que tipo de usuario es 
if ($_SESSION['cargo'] == "lector") {
  //como es un lector necesitaras el id
  $id_sesion = $_SESSION['id'];
  //ejecutas la sentencia sql
  $consulta = mysqli_query ($conn, "SELECT * FROM Usuario WHERE id = '". $id_sesion . "'" );
  //preguntas si trajo resultados
  if ( $consulta->num_rows > 0)
  {


    //rescorres los resultados que haya traido
    while ($row = mysqli_fetch_assoc($consulta) )
    {
      //como ya tenemos la base de la tabla aqui le sumamos las filas
      $tabla.= "</tr>";
      $tabla.= " <td>".$row['nombre']."</td>";
      $tabla.= " <td>".$row['fecha_creacion']."</td>";
      $tabla.= " <td>".$row['nick']."</td>";
      $tabla.= " <td>".$row['telefono']."</td>";
      $tabla.= "</tr>";
    }
  }

}
else if ($_SESSION['cargo'] == 'admin'){
  //como es un aministrador no necesitamos id
  $consulta2 = mysqli_query ($conn, "SELECT * FROM Usuario" );
  //preguntamos si trae registros
  if($consulta2->num_rows > 0){

      while ($row = mysqli_fetch_assoc($consulta2))
      {
        //sumamos las filas que trae
        $tabla.= "</tr>";
        $tabla.= " <td>".$row['nombre']."</td>";
        $tabla.= " <td>".$row['fecha_creacion']."</td>";
        $tabla.= " <td>".$row['nick']."</td>";
        $tabla.= " <td>".$row['telefono']."</td>";
        $tabla.= "</tr>";
      }
  }
}

//aqui cierras la tabla
$tabla.= "</table>";
//la imprimes
echo $tabla;

header('Content-Type: application/json');
?>

EDICION. habia un parentesis de mas y faltabala el echo

espero te sirva, me cuentas…

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *