Jump to content


Photo

Foreach Com Banco De Dados


  • Faça o login para participar
4 replies to this topic

#1 halfar

halfar

    Turista

  • Usuários
  • 48 posts
  • Sexo:Masculino
  • Localidade:guarulhos - sp

Posted 18/09/2009, 14:18

tenho um script que peguei do autor de um livro, ele passa o seguinte exemplo...


inicialmente faz uma consulta ao banco de dados...

$_sql = "SELECT descricao, preco_atual,estoque,peso FROM produto WHERE cod_produto = '" . $item . "'";

$_res = mysql_query($_sql) or die ("erro" . mysql_error());


agora, cada linha de resultado é inserido na variavel $_row...

$_row = mysql_fetch_array($_res);

foreach($_row as $_k=>$_v) {
if($_k!="descricao"&&$_k!="estoque") {
$_v = number_format($_v,2,",",".");
}
$_cpo = $_docxml->createElement($_k);
$_des = $_docxml->createTextNode($_v);
$_cpo->appendChild($_des);
$_resp->appendChild($_cpo);
}


pelo o que entendi a variavel $_k contera o nome dos campos que nao sejam descricao e estoque, entao sao validos os campos preco_atual e peso (pois nao existem outros campos selecionados na instrucao sql acima)... e a variavel $_v contera o valor dos campos preco_atual e peso...

só que este foreach esta dando o seguinte erro...
Warning: Invalid argument supplied for foreach() in /home/negocios/public_html/ganhe/ajax/detalhes_produto_ajax.php5 on line 43

sera que alguem manja disto...
sera que alguem manja disto...

#2 Maykel Esser

Maykel Esser

    Super Veterano

  • Usuários
  • 1536 posts
  • Sexo:Masculino
  • Localidade:Curitiba - PR

Posted 18/09/2009, 14:28

tente separar a comparação do foreach...
dentro alí tem um comparador dentro de um comparador, acho que é isso q ta dando problema...

tenta assim

[codebox]$teste = $_k=>$_v
foreach($_row as $teste){[/codebox]

Se este post lhe ajudou, ajude o fórum também. Use a reputação de mensagens! add.png


#3 Dudu

Dudu

    Viva la vida

  • Usuários
  • 1437 posts
  • Sexo:Masculino
  • Localidade:Uberlândia - MG
  • Interesses:PHP

Posted 18/09/2009, 14:29

Antes de mais nada, verifique se a variável $_row está retornando realmente um array.

Só dar um:
print_r($_row);

Até mais ^_^

Fórum WMO - Equipe de Desenvolvimento / Banco de Dados - Moderador


Twitter: HostCheap


#4 _MELO_

_MELO_

    Normal

  • Usuários
  • 117 posts
  • Sexo:Masculino
  • Localidade:Porto Alegre - RS. Argentina.
  • Interesses:PHP, JavaScript, Ajax, pl/pgSQL e PostgreSQL.

Posted 18/09/2009, 14:42

Cara,

O "$_k" é o id do teu array, ex.: 0, 1, 2, 3 ...
Já o "$_v" irá conter os campos retornados pela query, ex: $_v['descricao'], $_v['preco_atual'].... etc.



tenho um script que peguei do autor de um livro, ele passa o seguinte exemplo...


inicialmente faz uma consulta ao banco de dados...

$_sql = "SELECT descricao, preco_atual,estoque,peso FROM produto WHERE cod_produto = '" . $item . "'";

$_res = mysql_query($_sql) or die ("erro" . mysql_error());


agora, cada linha de resultado é inserido na variavel $_row...

$_row = mysql_fetch_array($_res);

foreach($_row as $_k=>$_v) {
if($_k!="descricao"&&$_k!="estoque") {
$_v = number_format($_v,2,",",".");
}
$_cpo = $_docxml->createElement($_k);
$_des = $_docxml->createTextNode($_v);
$_cpo->appendChild($_des);
$_resp->appendChild($_cpo);
}


pelo o que entendi a variavel $_k contera o nome dos campos que nao sejam descricao e estoque, entao sao validos os campos preco_atual e peso (pois nao existem outros campos selecionados na instrucao sql acima)... e a variavel $_v contera o valor dos campos preco_atual e peso...

só que este foreach esta dando o seguinte erro...
Warning: Invalid argument supplied for foreach() in /home/negocios/public_html/ganhe/ajax/detalhes_produto_ajax.php5 on line 43

sera que alguem manja disto...
sera que alguem manja disto...



if(count($_row) > 0){    foreach($_row as $_k=>$_v) {       if($_k!="descricao"&&$_k!="estoque") {          $_v = number_format($_v,2,",",".");       }    $_cpo = $_docxml->createElement($_k);    $_des = $_docxml->createTextNode($_v);    $_cpo->appendChild($_des);    $_resp->appendChild($_cpo);}else{     echo 'O array não tem nada. Está vazio!';}

Edição feita por: Dudu, 18/09/2009, 15:34.

Alexandre Melo

#5 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 18/09/2009, 15:19

Bem, mysql_fetch_array() por padrão retorna tanto índices numéricos como associáveis. Ou você informa o parâmetro $result_type como MYSQL_ASSOC, ou você usa a função mysql_fetch_assoc().

Mas existe um problema: pelo aviso retornado, a função mysql_fetch_array() está retornando FALSE. O que pode significar nenhum registro encontrado. O que ainda pode ser explicado pela tua consulta:

$_sql = "SELECT descricao, preco_atual,estoque,peso FROM produto WHERE cod_produto = '" . $item . "'";
O campo cod_produto não deveria pesquisar por um inteiro? Me parece o motivo de não retornar nenhum registro.

Outra coisa: se $item vem da entrada do usuário, você deve tratar este valor com mysql_real_escape_string():

$_sql = sprintf('SELECT descricao, preco_atual, estoque, peso FROM produto WHERE cod_produto = %d', mysql_real_escape_string($item));

Eu recomendaria o uso de prepared statements da biblioteca PDO, mas aí já é outro assunto.

Outra observação: você pode formatar os campos preco_atual e peso diretamente na consulta do MySQL, com as funções do mesmo, deixando seu código PHP mais legível.

[]’sAté mais




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq