Ir para conteúdo

Arquivado

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

michalski

PHP Warning: Invalid argument supplied for foreach()

Recommended Posts

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

@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

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&section=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

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

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

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&section=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

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

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

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

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

×

Informação importante

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