Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

allex_carvalho

Listar dados do banco em array.

Recommended Posts

Boa noite pessoal.

 

Estou tentando listar dados do banco em um array. Só que só me aparece id: undefined. Vejam se podem me ajudar:

 

<?php

require_once 'mysql_connect.php';

$q = strtolower($_GET["q"]);
if (!$q)
   return;
$sql = "SELECT arquivos.id, arquivos.titulo, arquivos.arquivo, tags.tag FROM arquivos INNER JOIN tags ON arquivos.id = tags.id_arquivo WHERE arquivos.titulo LIKE '%" . $q . "%' OR tags.tag LIKE '%" . $q . "%'";
$qr = mysql_query($sql) or die(mysql_error());
echo $qr;
while ($rss = mysql_fetch_array($qr)) {
   $items = array(
       $rss['id'] => $rss['titulo'],
   );

   foreach ($items as $key => $value) {
       if (strpos(strtolower($key), $q) !== false) {
           echo "$key|$value\n";
       }
   }
}
?>

 

Se eu pegar esse bloco $rss['id'] => $rss['titulo'], e inserir os dados manualmente ele lista certinho.

 

Obrigado pela atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu meio que me perdi no seu código por incrível que pareça se você tirar tudo isso e deixar só o while e colocar

 

echo "$rss['id']|$rss['titulo']\n";

 

vai chegar exatamente a mesma coisa.

 

você usa o while pra percorrer todos beleza ai você percorre e cria um array já tem o primeiro erro que não vai pegar tudo só o ultimo registro ai depois de criar o array você da um foreach para percorre esse array que ainda esta dentro do while ou seja você cria um array e percorre esse array com todos esses dados já.

 

se pudesse explicar o seu objetivo com isso ficaria mais fácil.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite Vinicius...

 

Este código é para um plugin jquery de auto complete em formulários (tipo o do google).

 

Fiz várias alterações no código. Veja como ficou:

 

<?php

require_once 'mysql_connect.php';

$q = strtolower($_GET["q"]);
if (!$q)
   return;
$sql = "SELECT arquivos.id, arquivos.titulo, arquivos.arquivo, tags.tag FROM arquivos INNER JOIN tags ON arquivos.id = tags.id_arquivo WHERE arquivos.titulo LIKE '%" . $q . "%' OR tags.tag LIKE '%" . $q . "%'";
$qr = mysql_query($sql) or die(mysql_error());
$items = array();
while ($rs = mysql_fetch_assoc($qr)) {
    $items[$rs['id']][] = $rs;
}
foreach ($items as $id => $value) {
   if (strpos(strtolower($id), $q) !== false) {
       echo "{$id}|{$value['titulo']}\n";
   }
}
echo "<pre>"; print_r($items); die();

?>

 

O resultado do último echo é o seguinte:

[titulo] => aqui vem o titulo (id: undefined)

 

Obrigado pela atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa agora sim ficou melhor.

 

e sem a condição

 

  if (strpos(strtolower($id), $q) !== false)

 

ele funciona retorna certo?

 

e aqui deixe

 

$items[$rs['id']] = $rs;

 

do jeito que você fez ele ficou criando item[iD][0], item[iD][1]..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Realmente, :)

 

Só não consegui mudar a forma que está listando o resultado. Ele imprimi primeiro o id, depois o titulo:

 

titulo aqui (id: titulo aqui)

 

Como fazer ele mostrar só o titulo?

 

Obrigado pela atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha a disposição dos seus dados

 

 echo "{$id}|{$value['titulo']}\n";

 

essas são as referencias, se quiser alterar a ordem basta jogar o id para o outro lado e adicionar o ()

 

assim

 

 echo "{$value['titulo']} (ID:{$id}|)\n";

Compartilhar este post


Link para o post
Compartilhar em outros sites

Minha questão não é alterar a ordem, e sim, imprimir só o titulo, não imprimir id.

Como disse anteriormente, ele está imprimindo assim:

 

titulo aqui (id: titulo aqui)

 

E eu queria assim:

 

titulo aqui

 

Obrigado pela atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se eu tirar o id do echo, ele aparece assim:

 

titulo do que foi encontrado (id: undefined)

 

Obrigado pela atenção.

poste o seu código novamente eu me perdi inteiro, estou fazendo na base do primeiro code.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ai está:

 

<?php

require_once 'mysql_connect.php';

$q = strtolower($_GET["q"]);
if (!$q)
   return;
$sql = "SELECT arquivos.id, arquivos.titulo, arquivos.arquivo, tags.tag FROM arquivos INNER JOIN tags ON arquivos.id = tags.id_arquivo WHERE arquivos.titulo LIKE '%" . $q . "%' OR tags.tag LIKE '%" . $q . "%'";
$qr = mysql_query($sql) or die(mysql_error());
$items = array();
while ($rs = mysql_fetch_assoc($qr)) {
    $items[$rs['id']] = $rs;
}
foreach ($items as $id => $value) {
   echo "{$value['titulo']} ({$id}|)\n";
}

?>

 

Obrigado pela atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

vamos lá

 

o array que você criou esta assim

 

$items['ID'] = array(
'titulo' => 'qualquer titulo',
'outra coisa' => 'outra coisa'
);

 

ainda não faz sentido seu código, você cria o array e define que o valor do array é o mesmo que recupera para montar ele.

 

e depois no foreach value é um array e esta puxado corretamente e id é a chave do seu array e o valor dessa chave é o propio id que traz da DB

 

 

desse jeito:

echo "{$value['titulo']}\n";

 

ele vai mostrar só o titulo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja só:

 

Se eu trocar o echo para a forma citada acima, retorna assim:

 

Titulo do arquivo (5 (id: ))

 

Se eu fizer isso:

 

$items = array();
while ($rs = mysql_fetch_assoc($qr)) {
    $items[$rs['titulo']] = $rs;
}
foreach ($items as $id => $value) {
   echo "{$value['titulo']} ({$id}|)\n";
}

 

Me retorna isso:

 

Titulo do arquivo (Titulo do arquivo (id: ))

 

Não estou entendendo o porque está duplicando os dados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

por que você definiu que a chave do seu array é o titulo.

 

  $items[$rs['titulo']] = $rs;

 

$items é a variavel que indica o array.

 

[] são as chaves

 

olha o que esta dentro da chave

 

e ainda é necessário se você fizer

 

$items = array();
while ($rs = mysql_fetch_assoc($qr)) {
   echo "{$value['titulo']}\n";
}

é a mesma coisa com foreach

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hum... Entendi. :)

 

Como não tenho experiencia com array fui vendo isso como um bicho de 7 cabeças. Onde estava dando o id undefined era do plugin, que tentava imprimir o id.

 

Mais vi que estava boiando mesmo na montagem do código.

 

Obrigado pela atenção Vinicius

 

=)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.