MBarros 0 Denunciar post Postado Agosto 8, 2010 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
João Batista Neto 448 Denunciar post Postado Agosto 8, 2010 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
MBarros 0 Denunciar post Postado Agosto 10, 2010 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
Evandro Oliveira 331 Denunciar post Postado Agosto 10, 2010 troque $_FILES['imagens']['name'] por apenas $_FILES['imagens'] Compartilhar este post Link para o post Compartilhar em outros sites