Ir para conteúdo

POWERED BY:

Arquivado

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

Carcleo

[Resolvido] fetch_array só retorna um resultado

Recommended Posts

Pessoal.

 

Estou fazendo uma query e guardar o resultado dela dentro de um array assim:

$produto_afins_string = "select id_produto_afim from produtos_afins where id_produto=".$_GET["id_produtos"];
$produto_afins=$conexao->query($produto_afins_string);
$produto_afins_array = $produto_afins->fetch_array();

Porem, o fetch array esta retornando apenas um resultado e imprimi a consulta e joguei direto no banco(front) e deram 3 resuçtados.

 

Preciso aqui ter esse vetor para usar uma pesquisa com in_array dentro de um while.

 

O que esta errado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

fetch_row também só trás uma linha por vez.

Ao invés de fetch_array, recomendo usar fetch_assoc.

fetch_array é fetch_row + fetch_assoc, vai retornar um array numérico e um array associativo. Não me lembro se isso é feito usando referências, se não, só duplica os dados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Num ta dando certo

error_reporting(E_ALL);
$produto_afins_string = "select id_produto_afim from produtos_afins where id_produto=".$_GET["id_produtos"];
$produto_afins=$conexao->query($produto_afins_string);
$produto_afins_array = $produto_afins->fetch_all();

print "<pre>";
print_r($produto_afins_array);				 

echo "<select style='width:300px;height:150px;' id='produtos_afins_alt_produtos'  name='produtos_afins_alt_produtos[]' multiple='multiple'>";
while(list($id_produtos, $nome_produtos)=$produto->fetch_row())
{
  if (in_array($id_produtos,$produto_afins_array))
  {$selecionado= "selected='selected'";}
  else {$selecionado= "";}

  echo "<option value='$id_produtos' $selecionado />$nome_produtos</option>";
}
echo "</select>";

Compartilhar este post


Link para o post
Compartilhar em outros sites

ta usando errado o while..

faz assim

while($row == $produto_afins->fetch_all()) $r[] = $row;

var_dump($r);

 

mas ae num lembro se é "==" ou "="

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema agora é outro.

 

O fetch_all retorna isso:

Array
(
   [0] => Array
       (
           [0] => 5
       )

   [1] => Array
       (
           [0] => 1
       )

   [2] => Array
       (
           [0] => 2
       )

)

Meu while esta sendo feito assim:

if (in_array($id_produtos,$produto_afins_array))
{$selecionado= "selected='selected'";}
else {$selecionado= "";}

o in_arry não esta achando o valor por ser uma array multipla.

Compartilhar este post


Link para o post
Compartilhar em outros sites
me lembro se isso é feito usando referências, se não, só duplica os dados.

Só duplica mesmo. Um foreach na row e lá se vai seu "sistema" de associação automática de dados/colunas.

 

o in_arry não esta achando o valor por ser uma array multipla.

Tente usar array_search()

Compartilhar este post


Link para o post
Compartilhar em outros sites
mas ae num lembro se é "==" ou "="

é "=", referente a atribuição.

 

Passe o código final, pois acho que há um erro no código.

Compartilhar este post


Link para o post
Compartilhar em outros sites


error_reporting(E_ALL);
$produto_afins_string = "select id_produto_afim from produtos_afins where id_produto=".$_GET["id_produtos"];
$produto_afins=$conexao->query($produto_afins_string);
$produto_afins_array = $produto_afins->fetch_all();

print "<pre>";
print_r($produto_afins_array);				 

echo "<select style='width:300px;height:150px;' id='produtos_afins_alt_produtos'  name='produtos_afins_alt_produtos[]' multiple='multiple'>";
while(list($id_produtos, $nome_produtos)=$produto->fetch_row())
{
if (in_array($id_produtos,$produto_afins_array))
{$selecionado= "selected='selected'";}
else {$selecionado= "";}

echo "<option value='$id_produtos' $selecionado />$nome_produtos</option>";
}
echo "</select>";

Nem in_array nm array_search acham

Compartilhar este post


Link para o post
Compartilhar em outros sites

De onde vem a variável $produto?

 

Você pode resolver facilmente o problema do nível da matriz, realizando uma iteração sobre ele e criando um novo vetor;


foreach($produto_afins_array AS $row) {
  $produtosSelecionados[] = $row[0];
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

$produtos vem do while acima dele que traz as ids de todos sos produtos que há na tabela produtos.

 

mas a ideia é selecionar, na select option apenas as options cujo value é igual a um dos ids guardados no vetor $produto_afins_array

 

Tentei assim:

foreach($produto_afins_array as $produto_afim)
{
if ($produto_afim[0]==$id_produtos)
{
 $selecionado= "selected='selected'";
}
else {$selecionado= "";}					
}

Tambem não deu certo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Assim deu certo:


                $produto_afins_string = "select id_produto_afim from produtos_afins where id_produto=".$_GET["id_produtos"];
                $produto_afins=$conexao->query($produto_afins_string);
                $produto_afins_array = $produto_afins->fetch_all();

			 $array_filtro = array();
			 foreach($produto_afins_array as $produto_afim=>$value3)
			 {
				array_push($array_filtro,$value3[0]);
			 }

                echo "<select style='width:300px;height:150px;' id='produtos_afins_alt_produtos'  name='produtos_afins_alt_produtos[]' multiple='multiple'>";
                while(list($id_produtos, $nome_produtos)=$produto->fetch_row())
                {
                   if (in_array($id_produtos,$array_filtro))
                   {$selecionado= "selected='selected'";}
                   else {$selecionado= "";}

                   echo "<option value='$id_produtos' $selecionado />$nome_produtos</option>";
                }
                echo "</select>";

Eu criei uma nova array apenas com os indices que me interessava. Dai o array_in funcionou.

 

VALEU

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.