Ir ao conteúdo

Como mostrar todas as linhas da coluna 'publicacoes' em MySQLi?


Ir à solução Resolvido por DiF,

Posts recomendados

Postado

Eu já havia tentado assim e não deu certo:
 

$buscarlinhas = conexaotabelapublicacoes -> prepare(SELECT publicacao FROM publicacoes);$buscarlinhas -> execute();$buscarlinhas -> fetch_all();

também tentei assim:
 

$buscarpublicacoes = "SELECT publicacao FROM publicacoes";$resultado = mysqli_query($conexaotabelapublicacoes, $buscarpublicacoes);if($resultado){while ($result = mysqli_fetch_row($buscarpublicacoes,MYSQLI_ASSOC))                                {                                   echo "<option value='".$result['usuario']."'>".$result['publicacao']."</option>";                                                               }                                                              mysql_free_result($buscarpublicacoes);                      } else {                      msqli_error($conexaotabelapublicacoes);                      }

como printa os resultados em MySQLi?

  • Moderador
Postado

@cesar3m

 

Qual o erro que dá?

 

Na verdade é bem mais simples do que imagina... eu faria da seguinte forma:

conexao.php

<?php   $conexao = mysqli_connect("localhost", "usuario","senha","nomeDoBancoDeDados");  

listar.php

<?php include 'conexao.php';$resultado = mysqli_query($conexao, "SELECT usuario, publicacao FROM publicacoes");if($resultado):   while ($result = mysqli_fetch_object($resultado)):          echo '<option value="$result->usuario"> $result->publicacao </option>';                       endwhile;endif;

Uma coisa que você não mencionou... se a tabela que quer trazer os dados.. está relacionada com outra. Por exemplo no seu value do option você insere o nome do usuário ou seu ID.. se for o ID( chave estrangeira) você precisa usar um INNER JOIN na tabela de usuários.. para associar o ID dos usuários à tabela de publicações( o mais certo de se fazer). 

Bem isso é só uma observação...  o ponto que eu queria chegar é que usar o mysqli não tem mistério se for feito bem otimizado.. mais limpo e etc.. ( o jeito que eu escrevo as cadeias de IF-else.. while.. é a sintaxe alternativa..  que elimina o uso das chaves delimitadores de blocos..eu acho mais limpo assim.

Postado

@dif

o erro que dava era esse aqui..

Warning: mysqli_fetch_row() expects exactly 1 parameter, 2 given in /home/y67ipajo/public_html/_arquivos/php/paginadousuario/publicacoes/publicacoes.php on line 79

Warning: mysql_free_result() expects parameter 1 to be resource, string given in /home/y67ipajo/public_html/_arquivos/php/paginadousuario/publicacoes/publicacoes.php on line 87

Agora vou testar o que me sugeriu....

 


@dif

Inseri o seu código na página e o resultado foi esse:

$result->publicacao
$result->publicacao
$result->publicacao
$result->publicacao
$result->publicacao
$result->publicacao

Sendo que 6 é o número de publicações gravadas na tabela, 4 do usuário logado, e 2 de outros usuários...
Agora eu preciso associar o resultado a mostrar como sendo somente publicações do usuário logado, e mostrar as publicações corretamente.

 

  • Moderador
  • Solução
Postado

@cesar3m

 

O código em si funciona como podes ver.. apareceu 6 registros... mas ainda assim você precisa adaptar no seu projeto.. apenas copiar e colar não iria funcionar mesmo.

 

Para fazer o que você quer antes, precisamos voltar um pouco mais na história... na parte da criação do banco de dados.

Para que você associe as publicações de cada usuário.. que mostre apenas as suas próprias publicações.. é necessário fazer os relacionamentos devidamente corretos.

 

Basicamente as tabelas serão compostas desta maneira:

 

Tabela usuarios(ID, nome, login, senha)

Tabela publicacoes(ID, ID_usuario, publicacao)

 

Em publicacoes, o campo ID_usuario torna-se a chave estrangeira de ID em usuarios. para justamente associar as publicações dele.

Em suma, a consulta que será feita para mostrar as publicações do usuário é baseada no valor ID do relacionamento 1:N entre usuarios e publicacoes.

 

Com o banco de dados formado, o próximo passo é pensar na lógica do login.. onde você  precisará armazenar o VALOR do id do usuário logado.

Para isso é usado as SESSIONS. vamos ao um exemplo simples:

<?php  session_start();  $login = $_POST['login'];  $senha = $_POST['senha'];  include 'conexao.php';  $logar = mysqli_query($conexao, "SELECT * FROM usuarios WHERE login ='$login' AND senha = '$senha' "); $dados = mysqli_fetch_object($logar);    $id = $dados->ID;    $_SESSION["login"] = $login;    $_SESSION["id_usuario"] = $id;    header ("Location: pagina_restrita.php");

Com isso  inserimos nas sessões o valor do login( no caso o mais usado é o próprio e-mail.. é mais fácil de não esquecer), e o código ID desse usuário logado.

Agora na sua página restrita( aquela que é mostrada, depois de logado), você precisa dizer que está logado.. testando o usuário da seguinte forma:

<?phpsession_start();setcookie("ck_authorized", "true", 0, "/");if(!isset($_SESSION["login"])):    header("location: index.php");else:    $login = $_SESSION["login"];    $id =  $_SESSION["id_usuario"];endif;?>

isso testa se está logado, se sim,  deixa logado, se não redireciona para o formulário de login. ( isso pode ficar acima de qualquer tag HTML que estiver.

 

Com isso o sistema de login está OK..   significa que agora você pode implementar a consulta para trazer as publicações apenas daquele usuário logado.

 

Para isso.. a consulta será feita da seguinte maneira:

<?php  include 'conexao.php';  $consulta = mysqli_query($conexao, "SELECT publicacao FROM publicacoes  WHERE ID_usuario = $id");  while($publicaoes = mysqli_fetch_object($consulta)):      echo "$publicacoes->publicacao";  endwhile;

Note na clausula where da consulta, foi usado a variável ID que foi armazenada na sessão.. isso tras todas as publicações somente daquele logado no momento.

 

Caso queira mostrar o nome de quem publicou, é preciso alterar a consulta deste jeito:

SELECT usuario.nome, publicacoes.publicacao FROM publicacoes INNER JOIN usuarios ON usuarios.ID = publicacoes.ID_usuario WHERE ID_usuario = $id

A clausula INNER JOIN foi adicionada.. para dizer a instrução SQL que você está fazendo uma consulta baseada em chave primária e estrangeira entre duas tabelas.

 

Bem é por aí...  tenha em mente que tudo mostrado aqui é só o caminho... ou seja, não adianta copiar e colar ele.. tente entender todo o processo.. e implemente no seu projeto.

Boa sorte.

Postado

@dif

Muitíssimo obrigado pela ajuda que me deu até agora! O Código abaixo funcionou, agora, se pudesse, gostaria que me desse uma dica de como formatar as publicações mostradas na tela, por exemplo:
 

include "../../bancodedadosconfig/tabelapublicacoes.php";       $conexaotabelapublicacoes = new mysqli($host, $username, $password, $database);if (mysqli_connect_errno()) trigger_error(mysqli_connect_error());$resultado = mysqli_query($conexaotabelapublicacoes, "SELECT publicacao FROM publicacoes WHERE usuario = '$_SESSION[nick]'");if($resultado):  while ($result = mysqli_fetch_object($resultado)):        echo "$result->publicacao";  endwhile;endif;

O resultado ficou serial, assim:

baw

sendo 'b' uma publicação, 'a' outra e' w 'outra;

gostaria que ficasse assim:

b  [dentro de uma caixa estilizada, como no facebook, só que darei um estilo diferente é claro]

a

w

 

  • Moderador
Postado

@cesar3m

 

Para formatar é só colocar sua estrutura dentro do while.

exemplo:

if($resultado):  while ($result = mysqli_fetch_object($resultado)):        echo "             <div class='caixaTexto'>                   $result->publicacao              </div> ";   endwhile;endif;

Veja que foi adicionado a tag HTML dentro do echo.. você pode estilizar via CSS.. ou adicionar uma tag <br/> se quiser fazer uma quebra de linha.

  • Curtir 1
Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...