michalski 0 Denunciar post Postado Março 29, 2010 Fala pessoal! Estou terminando um site em joomla e após instalar um componente (DOCman) este erro te aparecido: PHP Warning: Invalid argument supplied for foreach() in E:\home\augustuspe\bodytraining\Web\site\administrator\modules\mod_docman_logs\mod_docman_logs.php on line 43 Tentei no forum do Joomla mas nada de resposta. Então achei que vocês pudessem me ajudar. O erro apresentado nesta linha 43 é: foreach ($rows as $row) Caso precisem de mais informação sobre o código deste arquivo me falem que respondo o mais rápido possível. Desde já agradeço a ajuda. Abs, Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Março 29, 2010 @michalski, evite duplicar seus tópicos pelo fórum. Sugiro que leia o tópico de orientações para uma boa participação. Seu tópico no fórum de Joomla foi excluído. Sobre a sua dúvida, o PHP está dizendo que a $rows não é um array. Verifique de onde esta variável vem e faça um debug em seu conteúdo. echo '<pre>'; print_r($rows) echo '</pre>'; Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
michalski 0 Denunciar post Postado Março 29, 2010 Não estou achando... segue o código do log, quem sabe ajuda: <?php defined('_JEXEC') or die('Restricted access'); global $_DOCMAN; $_DOCMAN->setType(_DM_TYPE_MODULE); $_DOCMAN->loadLanguage('modules'); require_once($_DOCMAN->getPath('classes', 'utils')); /* $query = "SELECT l.log_docid, l.log_ip, l.log_datetime, l.log_user, d.dmname, u.name" ."\n FROM #__docman_log l, #__docman d, #__users u" ."\n WHERE l.log_docid = d.id" ."\n AND (l.log_user = u.id OR l.log_user=0)" ."\n ORDER BY l.log_datetime DESC"; */ $query = "SELECT l.log_docid, l.log_ip, l.log_datetime, l.log_user, d.dmname, u.name" ."\n FROM (jos_docman_log AS l LEFT JOIN jos_docman AS d ON l.log_docid = d.id)" ."\n LEFT JOIN jos_users AS u ON l.log_user = u.id" ."\n ORDER BY l.log_datetime DESC"; $database = JFactory::getDBO(); $database->setQuery($query, 0, $params->get('limit', 10)); $rows = $database->loadObjectList(); ?> <table class="adminlist cpanelmodule"> <tr> <th><?php echo _DML_MOD_LOGS_TITLE;?></th> <th><?php echo _DML_MOD_LOGS_USER;?></th> <th><?php echo _DML_MOD_LOGS_IP;?></th> <th><?php echo _DML_MOD_LOGS_DATE;?></th> </tr><?php if (!$_DOCMAN->getCfg('log')) echo '<tr><td colspan="4">' . _DML_MOD_LOGS_DISABLED . '</td></tr>'; foreach ($rows as $row) { if(0==$row->log_user) { $row->name =_DML_MOD_GUEST;} ?> <tr> <td> <a href="index.php?option=com_docman§ion=documents&task=edit&cid[]=<?php echo $row->log_docid;?>"> <?php echo $row->dmname;?> </a> </td> <td align="right"><?php echo $row->name;?></td> <td align="right"><a href="http://ws.arin.net/cgi-bin/whois.pl?queryinput=<?php echo $row->log_ip;?>" target="_blank"><?php echo $row->log_ip;?></a></td> <td align="right"><?php echo $row->log_datetime;?></td> </tr><?php }?> </table> Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Março 29, 2010 A linha está aqui. $rows = $database->loadObjectList(); Ela está acessando o método loadObjectList(), que é, provavelmente, o método que resgata os valores do banco de dados. O que provavelmente está acontecendo é que não está retornando estes dados. Faça o que eu falei, adicionando o código antes de disparar o erro. Deve imprimir o array $rows. Além disto, habilite todas as mensagens de erro, para ver se aparece mais alguma coisa. Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
michalski 0 Denunciar post Postado Março 29, 2010 Deixa ver se entendi... devo colocar este código: echo '<pre>'; print_r($rows) echo '</pre>'; Antes deste? foreach ($rows as $row) Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Março 29, 2010 Isto Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
michalski 0 Denunciar post Postado Março 30, 2010 Isto Carlos Eduardo Ola Carlos, O código ficou assim: <?php defined('_JEXEC') or die('Restricted access'); global $_DOCMAN; $_DOCMAN->setType(_DM_TYPE_MODULE); $_DOCMAN->loadLanguage('modules'); require_once($_DOCMAN->getPath('classes', 'utils')); /* $query = "SELECT l.log_docid, l.log_ip, l.log_datetime, l.log_user, d.dmname, u.name" ."\n FROM #__docman_log l, #__docman d, #__users u" ."\n WHERE l.log_docid = d.id" ."\n AND (l.log_user = u.id OR l.log_user=0)" ."\n ORDER BY l.log_datetime DESC"; */ $query = "SELECT l.log_docid, l.log_ip, l.log_datetime, l.log_user, d.dmname, u.name" ."\n FROM (jos_docman_log AS l LEFT JOIN jos_docman AS d ON l.log_docid = d.id)" ."\n LEFT JOIN jos_users AS u ON l.log_user = u.id" ."\n ORDER BY l.log_datetime DESC"; $database = JFactory::getDBO(); $database->setQuery($query, 0, $params->get('limit', 10)); $rows = $database->loadObjectList(); ?> <table class="adminlist cpanelmodule"> <tr> <th><?php echo _DML_MOD_LOGS_TITLE;?></th> <th><?php echo _DML_MOD_LOGS_USER;?></th> <th><?php echo _DML_MOD_LOGS_IP;?></th> <th><?php echo _DML_MOD_LOGS_DATE;?></th> </tr><?php if (!$_DOCMAN->getCfg('log')) echo '<tr><td colspan="4">' . _DML_MOD_LOGS_DISABLED . '</td></tr>'; echo '<pre>'; print_r($rows) echo '</pre>'; foreach ($rows as $row) { if(0==$row->log_user) { $row->name =_DML_MOD_GUEST;} ?> <tr> <td> <a href="index.php?option=com_docman§ion=documents&task=edit&cid[]=<?php echo $row->log_docid;?>"> <?php echo $row->dmname;?> </a> </td> <td align="right"><?php echo $row->name;?></td> <td align="right"><a href="http://ws.arin.net/cgi-bin/whois.pl?queryinput=<?php echo $row->log_ip;?>" target="_blank"><?php echo $row->log_ip;?></a></td> <td align="right"><?php echo $row->log_datetime;?></td> </tr><?php }?> </table> Agora apareceu isso: PHP Parse error: syntax error, unexpected T_ECHO in E:\home\augustuspe\bodytraining\Web\site\administrator\modules\mod_docman_logs\mod_docman_logs.php on line 45 Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Março 30, 2010 você esqueceu o ponto-e-vírgula no fim de print_r($rows) Compartilhar este post Link para o post Compartilhar em outros sites
michalski 0 Denunciar post Postado Março 30, 2010 Nossa cara que coisa lôca... está dando o mesmo erro de antes: PHP Warning: Invalid argument supplied for foreach() in E:\home\augustuspe\bodytraining\Web\site\administrator\modules\mod_docman_logs\mod_docman_logs.php on line 46 Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Março 30, 2010 Isto não vai arrumar o problema. Apenas vai imprimir na tela o conteúdo de $rows. Só isto. Aí, com isto, podemos ver se $rows é realmente um array, como deveria ser. Mas já te adianto. O problema provavelmente está nos dados de conexão com o banco de dados. Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Março 30, 2010 troque esta linha $rows = $database->loadObjectList(); por var_dump($database->loadObjectList()); (isso não vai resolver o problema [2]) O nome disso é debug. Poste a saída Compartilhar este post Link para o post Compartilhar em outros sites
michalski 0 Denunciar post Postado Março 30, 2010 Apareceu a mesma coisa. Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Março 30, 2010 então o problema está na maneira como a classe está tratando os erros sql Compartilhar este post Link para o post Compartilhar em outros sites
Cyntia 0 Denunciar post Postado Agosto 17, 2010 Oi pessoal.Estou tendo a mesma mensagem que o colega inicial.Acontece que no meu caso, o problema está relacionado à checkbox. Estou validando um formulário com ckeckbox, onde são separados por grupos de produtos. A lógica é que a pessoa pode marcar qtos produtos quiser, de todos os grupos ou de apenas 1, mas pelo menos 1 é necessário. Isso é para solicitar orçamento. Acontece que se deixo de marcar algum grupo, aparece esta mensagem - Invalid argument supplied for foreach(), juntamente que a variável está indefinida.A mensagem é enviada, mas dá esse erro.. Abaixo, o codigo: $acessorios = ""; $transfm = ""; $transvhf = ""; $transuhf = ""; $link = ""; if( (isset($_POST['ac'])) || (isset($_POST['fm'])) || (isset($_POST['vhf'])) || (isset($_POST['uhf'])) || (isset($_POST['link'])) )//Aqui ele verifica se tem algum valor preenchido no grupo { $ac = $_POST['ac'];//a variavel ac recebe os campos com name = ac foreach($ac as $print)//$print recebe os dados do vetor ac, como se fosse $print[1] = $ac[1] { $acessorios = $acessorios. $print . "\n" ; //esta variavel está juntando todos os dados marcados. } $fm = $_POST['fm'];//a variavel protudo recebe os campos com name = produto foreach($fm as $print)//$print recebe os dados do vetor produto, como se fosse $print[1] = $produto[1] { $transfm = $transfm. $print . "\n" ; //esta variavel está juntando todos os dados marcados. } $vhf = $_POST['vhf'];//a variavel protudo recebe os campos com name = produto foreach($vhf as $print)//$print recebe os dados do vetor produto, como se fosse $print[1] = $produto[1] { $transvhf = $transvhf. $print . "\n" ; //esta variavel está juntando todos os dados marcados. } $uhf = $_POST['uhf'];//a variavel protudo recebe os campos com name = produto foreach($uhf as $print)//$print recebe os dados do vetor produto, como se fosse $print[1] = $produto[1] { $transuhf = $transuhf. $print . "\n" ; //esta variavel está juntando todos os dados marcados. } // $link = $_POST['link'];//a variavel protudo recebe os campos com name = produto echo '<pre>'; print_r($link); echo '</pre>'; foreach($link as $print)//$print recebe os dados do vetor produto, como se fosse $print[1] = $produto[1] { $translinks = $translinks. $print . "\n" ; //esta variavel está juntando todos os dados marcados. } } Compartilhar este post Link para o post Compartilhar em outros sites