Ir para conteúdo

POWERED BY:

Arquivado

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

MBarros

Erro Invalid argument supplied for foreach()

Recommended Posts

Pessoal,

 

Estou com um problema com o foreach que não consigo resolver, podem me ajudar?

 

O que meu código faz? Envio de dados para o DB. Qual o erro?

 

Ao preencher todo o formulário e clicar em enviar, o seguinte erro aparece:

 

Warning: Invalid argument supplied for foreach() in D:\Sites\mbarros\admin\addprojeto.php on line 63

 

Eis a linha 63:

 

foreach ($_FILES["imagens"]["name"] as $i => $nome_foto)

Como posso corrigir isso? Não é possível, quando desenvolvia o mesmo projeto no MAMP (OS/X) tudo funcionou perfeitamente. Tive que mudar de plataforma (Windows :X) e o erro foreach insiste em aparecer... :(

 

<?php
  if (@$_POST['enviar'])
  {
    mysql_connect("xx", "xx", "xx") or die ("Não foi possível conectar ao Servidor.");
    mysql_select_db("lab") or die ("Não foi possível selecionar a Base de Dados");
  
    $titulo = $_POST['titulo']; 
    $resumo = $_POST['resumo']; 
    $producao = $_POST['producao']; 
    $detalhes = $_POST['detalhes']; 
	        
    $aExtensoes = array("jpg", "jpeg");
        
    $id_imagem = @mysql_query("SELECT * FROM `imagens` WHERE id_imagem=".$_GET['id_trabalho']);
        
    @$_FILES['imagens']['name'] = array_unique($_FILES['imagens']['name']);
        
    $resultado = mysql_query("SHOW TABLE STATUS LIKE 'trabalhos'");
    $array = mysql_fetch_array($resultado);
    $caminho = "../uploads/" . date('dmY').".00".$array['Auto_increment'];

    $stringerro = "";
    
    if(!$titulo)
      $stringerro = $stringerro . "Título<br />";

    if(!$resumo)
      $stringerro = $stringerro . "Resumo<br />";

    if(!$producao)
      $stringerro = $stringerro . "Produção<br />";
    
    if(!$detalhes)
      $stringerro = $stringerro . "Detalhes<br />";

    if($stringerro !== "")
      $erro = "<div class='erro'><table border='1' cellspacing='5' cellpadding='5'>\n
				   <tr>\n
				     <td><img src='../imagens/exclamacao.png' /></td>\n
				     <td>Por favor, preencha os seguintes campos:<br />$stringerro</td>\n
				     <td><img src='../imagens/fechar.png' class='fechar' /></td>\n
				   </tr>\n
				 </table></div>\n";
    else
    {
      foreach ($_FILES["imagens"]["name"] as $i => $nome_foto)
      {
        $nomeArquivo = substr(md5(uniqid(time())), 0, 10);
	$nomeTemporario = $_FILES["imagens"]["tmp_name"][$i]; 
	$extensao = end(explode('.', $nome_foto));
	$imagens[] = $nomeArquivo.'.'.$extensao;

	if(!file_exists($caminho . $nomeArquivo .'.'. $extensao))
	{
	  @mkdir($caminho, 0777);
	  move_uploaded_file($nomeTemporario, ($caminho .'/'. $nomeArquivo .'.'. $extensao));
	}
	$ok = "<div class='mensagem'><img src='../imagens/exclamacao.png' />Arquivos enviados com sucesso<img src='../imagens/fechar.png' class='fechar' /></div>";
      }
      @mysql_query("INSERT INTO `imagens`(id_imagem, foto1, foto2, foto3, foto4) VALUES('', '$caminho/$imagens[0]', '$caminho/$imagens[1]', '$caminho/$imagens[2]', '$caminho/$imagens[3]')");

      $query = "SELECT * FROM `imagens`";
      $resultado =    mysql_query($query);

      while ($linha = mysql_fetch_array($resultado))
      { 
        $id_imagem = $linha['id_imagem'];
      }

      @mysql_query("INSERT INTO `tb`(id_tb, id_imagem, titulo, resumo, producao, detalhes, data, hora) VALUES('', '$id_imagem', '$titulo', '$resumo', '$producao', '$detalhes', NOW(), NOW())");
  }
}
?>

<?php echo @$ok; ?> <?php echo @$erro; ?>
			
<form method="post" action="" enctype="multipart/formdata" class="add">
  <fieldset>
    <label>Imagens</label>
    <input type="file" name="imagens[]" tabindex="1" multiple="multiple" min="1" max="9999" />
					
    <label>Título</label>
    <input type="text" name="titulo" value="<?php echo @$titulo; ?>" tabindex="5" />
					
    <label>Resumo</label>
    <input type="text" name="resumo" value="<?php echo @$resumo; ?>" tabindex="6" />
					
    <label>Produção</label>
    <textarea name="producao" cols="57" rows="10" tabindex="7"><?php echo @$producao; ?></textarea>
					
    <br />
					
    <label>Detalhes</label>
    <textarea name="detalhes" cols="57" rows="10" tabindex="8"><?php echo @$detalhes; ?></textarea>
					
    <input type="submit" name="enviar" value="Enviar" class="enviar" tabindex="9" /> 
    <input type="submit" name="limpar" value="Limpar" class="limpar" tabindex="10" /> 
  </fieldset>
</form>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Warning: Invalid argument supplied for foreach() in D:\Sites\mbarros\admin\addprojeto.php on line 63

 

Você está tentando iterar uma não matriz ou um não Traversable;

 

Antes de assumir que uma variável qualquer (mesmo as super globais como $_FILES), você deve, sempre, verificar se o conteúdo delas é o que você está esperando.

 

Utilize a função is_array() para fazer essa verificação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz a verificação através do código abaixo mas se envio o formulário, nada acontece. A pasta referente não é criada, apenas o caminho é incluído no DB.

 

O que devo fazer para que o foreach seja aplicado?

 

:(

 

if (is_array($_FILES["imagens"]["name"]))
{
foreach ($_FILES["imagens"]["name"] as $i => $nome_foto)
      {
        $nomeArquivo = substr(md5(uniqid(time())), 0, 10);
        $nomeTemporario = $_FILES["imagens"]["tmp_name"][$i]; 
        $extensao = end(explode('.', $nome_foto));
        $imagens[] = $nomeArquivo.'.'.$extensao;

        if(!file_exists($caminho . $nomeArquivo .'.'. $extensao))
        {
          @mkdir($caminho, 0777);
          move_uploaded_file($nomeTemporario, ($caminho .'/'. $nomeArquivo .'.'. $extensao));
        }
        $ok = "<div class='mensagem'><img src='../imagens/exclamacao.png' />Arquivos enviados com sucesso<img src='../imagens/fechar.png' class='fechar' /></div>";
      }
      @mysql_query("INSERT INTO `imagens`(id_imagem, foto1, foto2, foto3, foto4) VALUES('', '$caminho/$imagens[0]', '$caminho/$imagens[1]', '$caminho/$imagens[2]', '$caminho/$imagens[3]')");

      $query = "SELECT * FROM `imagens`";
      $resultado =    mysql_query($query);

      while ($linha = mysql_fetch_array($resultado))
      { 
        $id_imagem = $linha['id_imagem'];
      }

      @mysql_query("INSERT INTO `tb`(id_tb, id_imagem, titulo, resumo, producao, detalhes, data, hora) VALUES('', '$id_imagem', '$titulo', '$resumo', '$producao', '$detalhes', NOW(), NOW())");

]

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.