0

Buenas tardes tengo un problema ya que no me saca el arreglo estamos trabajando en un proyecto de un curso de udemy pero no logro da con la solucion les agradecería su ayuda por favor, ya que como resultado me debe aparecer esto.

introducir la descripción de la imagen aquí

y de lo contrario me queda o me aparece así:

introducir la descripción de la imagen aquí

también tengo problema que no me reconoce las ñ les agradecería que me compartieran de su conocimiento saludos anexo el código.

<?php

$db = mysqli_connect('localhost', 'root', '', 'appsalon');
$db->set_charset('utf8');

if(!$db){
    echo 'Error en la conexión';
}


<?php

function obtenerServicios() : array {
  try {
    
    // Importar una conexión
    require 'database.php';
    $db->set_charset('utf8');        

    // Escribir el código SQL

    $sql = 'SELECT * FROM servicios;';
    
    $consulta = mysqli_query($db, $sql);

    // Arreglo vacio

    $i = 0;

    $servicios = [];

    // Obtener los resultados

    while($row = mysqli_fetch_assoc($consulta)){
        $servicios[$i] ['id'] = $row['id'];
        $servicios[$i] ['nombre'] = $row['nombre'];
        $servicios[$i] ['precio'] = $row['precio'];

        $i++;
    }

    // echo "<pre>";
    // var_dump($servicios);
    // echo "</pre>";

    return $servicios;        

} catch (\Throwable $th) {
    //throw $th;
    var_dump($th);
}

}

<?php

require 'includes/funciones.php';
$servicios = obtenerServicios();
echo json_encode($servicios);
snakeshin
  • 21
  • 4
  • Tu primer duda no se entiende – BetaM Apr 22 '21 at 01:14
  • 1
    Para verlo con ese formato podes instalar la extensión [JSON Formatter](https://chrome.google.com/webstore/detail/json-formatter/bcjindcccaagfpapjjmafapmmgkkhgoa?hl=es) – Marcos Apr 22 '21 at 01:17
  • Los caracteres latinos los puedes mostrar utilizando funciones de `php` como `utf8_decode()` , `utf8_encode()` o con una combinación de ambas... `$servicios[$i] ['nombre'] = utf8_decode(utf8_encode($row['nombre']));` – DjCrazy Apr 22 '21 at 02:52
  • En el curso supuestamente hay que transformar la base de datos en un área y para que php lo pueda entender mi string que imprimo en pantalla que aparece en la foto 2 no se ve como en la foto 1 que se supone que así debe ser como en la foto 1 y mi segunda pregunta es que por qué cuando solicito información en mi bd las ñ no se vene aparece un signo – snakeshin Apr 22 '21 at 02:54

1 Answers1

0

En PHP la función json_encode puede recibir en parámetro varias constantes, entre ellas: JSON_PRETTY_PRINT que sirve para agregar espacios en blanco en los datos devueltos para formatearlos.

Esta constante está disponible a partir de PHP 5.4.0.

Para resolver un posible problema de codificación con respecto a la ñ, uno de los pasos importantes es indicar un charset adecuado a la conexión, cosa que ya haces aquí:

$db = mysqli_connect('localhost', 'root', '', 'appsalon');
$db->set_charset('utf8');

Por cierto, esto es redundante:

try {

    // Importar una conexión
    require 'database.php';

    // Esto ya se hizo en database.php, no hace falta repetirlo
    $db->set_charset('utf8');        

Para dar otro paso seguro con respecto a la codificación, conviene que pongas un header antes de imprimir (aquí supongo que la única salida es un JSON). Si no es así, será complicado obtener un JSON organizado sin tener que recurrir quizá a librerías de terceros.

Aplicando lo dicho, tu código podría quedar así:

require 'includes/funciones.php';
$servicios = obtenerServicios();
header("Content-type: application/json; charset=utf-8");
echo json_encode($servicios, JSON_PRETTY_PRINT);

Aquí poner un header significa que en el recorrido de tu código no hay ninguna salida por pantalla antes de llegar a este punto. Si no es así, debes asegurar la codificación de otro modo, indicando el charset en la definición de un eventual documento HTML por ejemplo (ver enlace del siguiente párrafo).

Si sigues teniendo problemas con la ñ u otros carácteres, puede que tengas que definir codificación en tu entorno PHP o revisar los datos directamente en la base de datos y/o la definición de tus tablas/columnas (para esto último considera hacer un backup primero si se trata de una BD en producción). Para más detalles sobre la codificación puedes revisar la pregunta: ¿Por que el Carácter inspector (�) aparece en algunos datos obtenidos de la Base de Datos?.

A. Cedano
  • 86,578
  • 19
  • 122
  • 221