Publicidade

michalski

PHP Warning: Invalid argument supplied for foreach()

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,

0

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

0

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>
0

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

0

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)
0

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

0

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

0

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

0

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

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Apareceu a mesma coisa.

0

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.

}

 

}

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!


Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.


Entrar Agora

  • Próximos Eventos