Why, only part of the data, appear in php?

Asked

Viewed 58 times

-3

I am doing a select, in a table of my database, to get all messages from all users. However, only 1 user messages appear, others do not!

php:

<?php
ini_set('display_errors', true);
error_reporting(E_ALL);

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type,X-Prototype-Version,X-Requested-With');

include_once("conPDO.php");

$pdo = conectar();

$data = file_get_contents("php://input");
$data = json_decode($data);

$idUsuario = $data->idUsuario;
$idCep = $data->idCep;

//Busca nome do usuário
$pegaUsuario=$pdo->prepare("SELECT nome FROM usuarios WHEREidUsuario=:idUsuario");
$pegaUsuario->bindValue("idUsuario", $idUsuario);
$pegaUsuario->execute();

while ($linhaUsuario=$pegaUsuario->fetch(PDO::FETCH_ASSOC)) {
        $nome   = utf8_encode($linhaUsuario['nome']);
}

//Busca dados do cep
$pegaCidade=$pdo->prepare("SELECT * FROM cep WHERE idCep=:idCep");
$pegaCidade->bindValue("idCep", $idCep);
$pegaCidade->execute();

while ($linhaCidade=$pegaCidade->fetch(PDO::FETCH_ASSOC)) {
        $estado = utf8_encode($linhaCidade['uf']);
}

//Busca mensagens com estado, cidade, bairro e logradouro do usuário
$pegaMsgsEstado=$pdo->prepare("SELECT * FROM avisosUF WHERE estado=:estado");
$pegaMsgsEstado->bindValue("estado", $estado);
$pegaMsgsEstado->execute();

$mensagens = array();

while ($linhaMsg=$pegaMsgsEstado->fetch(PDO::FETCH_ASSOC)) {
    $idAviso = $linhaMsg['idAvisoUf'];
    $idUsuario = $linhaMsg['idUsuario'];
    $msg = $linhaMsg['msg'];
    $foto = utf8_encode($linhaMsg['foto']);
    $hora = $linhaMsg['hora'];

    $horaP = explode(':', $hora);
    $hora = $horaP[0].':'.$horaP[1];

    //Busca nome do usuário que envio a mensagem
    $pegaUsuarioRemetente=$pdo->prepare("SELECT nome FROM usuarios WHERE idUsuario=:idUsuario");
    $pegaUsuarioRemetente->bindValue("idUsuario", $idUsuario);
    $pegaUsuarioRemetente->execute();

    while ($linhaUsuarioRemetente=$pegaUsuarioRemetente->fetch(PDO::FETCH_ASSOC)) {
            $nomeRemetente  = utf8_encode($linhaUsuarioRemetente['nome']);


    $return = array(
            'idUsuario' => $idUsuario,
            'nome' => $nomeRemetente,
            'msg' => $msg,
            'foto' => $foto,
            'hora' => $hora
        );

    $mensagens[] = $return;

    }
}

print_r($mensagens);
//echo json_encode($mensagens);

?>

Here is a photo of the table in the bank: inserir a descrição da imagem aqui

1 answer

1

Try to write all data to a variable with $pegaUsuarioRemetente->fetchAll(PDO::FETCH_OBJ).

Woe only you perform one foreach() in this variable, this method is simpler and more reliable.

Remember, with FETCH_OBJ you will create objects and not arrays. Example: Besides being $variavel['nome']; utilize $variavel->nome. Much more practical.

  • Thanks @Romario Pires, but I already figured out what the problem was. Thanks so much for your attention.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.