Ajuda com input file

202 views
Skip to first unread message

willcom

unread,
Feb 20, 2010, 7:53:55 PM2/20/10
to LISTA PHP
Estou a dias tentando algo que para muitos do grupo pode ate parecer
engrado, mais para mim nao tem sido facil e o seguinte:

tenho um formulario que envia nome, img, etc.. Quando o campo do imput
file e preechido tudo funciona bem,
mais caso o campo imput file nao seja preechido sempre me aparece a
mensagem que e necessario enviar arquivo.

"Arquivo em formato inválido! A imagem deve ser jpg, jpeg, bmp, gif ou
png. Envie outro arquivo";

Gostaria que o codigo segui-se em frete mesmo quando o campo imput
file nao fosse preenchido.
No caso so seria enviado para o banco de dados o campo "nome" e
pronto.

Alguem pode me ajudar?

Veja o formulario e o script que recebe:

<form name "form1" action= "upload.php" method="post"
enctype="multipart/form-data" >
<input type="text" name="nome" size="30"><br>
Envie sua foto para o site! <br>
<input type="file" name="img"><BR>
<input type="submit" value="Enviar Foto!">
</form>

<?php
$img=$_POST['img'];
$nome=$_POST['nome'];

$arquivo = isset($_FILES["img"]) ? $_FILES["img"] : FALSE;// Prepara a
variável do arquivo
$erro = $config = array(); // primeiro array
$config["tamanho"] = 206883;// Tamanho máximo do arquivo (em bytes)
$config["largura"] = 1250;// Largura máxima (pixels)
$config["altura"] = 1250;// Altura máxima (pixels)
$config['img']=="";
// Formulário postado... executa as ações
if ($arquivo) {
if (!eregi("^image\/(pjpeg|jpeg|png|gif|bmp)$",
$arquivo["type"])) // Verifica se o mime-type do arquivo é de imagem
{ $erro[] = "Arquivo em formato inválido! A imagem deve ser jpg,
jpeg, bmp, gif ou png. Envie outro arquivo"; }
else{ if ($arquivo["size"] > $config["tamanho"])// Verifica
tamanho do arquivo
{ $erro[] = "Arquivo em tamanho muito grande! A imagem deve ser de no
máximo " . $config["tamanho"] . " bytes. Envie outro arquivo"; }
$tamanhos = getimagesize($arquivo["tmp_name"]); // Para verificar as
dimensões da imagem
if ($tamanhos[0] > $config["largura"]) // Verifica largura
{ $erro[] = "Largura da imagem não deve ultrapassar " .
$config["largura"] . " pixels"; }
if ($tamanhos[1] > $config["altura"]) { $erro[] = "Altura da
imagem não deve ultrapassar " . $config["altura"] . " pixels";} }//
Verifica altura

if (sizeof($erro)) {
foreach ($erro as $err) { echo " - " . $err . "<BR>"; } //
Imprime as mensagens de erro
echo "<a href=\"form_enviar.php\">Fazer Upload de Outra Imagem</
a>"; }
else { preg_match("/\.(gif|bmp|png|jpg|jpeg){1}$/i",
$arquivo["name"], $ext); // Pega extensão do arquivo
$imagem_nome = md5(uniqid(time())) . "." . $ext[1]; // Gera
um nome único para a imagem
$imagem_dir = "imagens/" . $imagem_nome; // Caminho de
onde a imagem ficará
move_uploaded_file($arquivo["tmp_name"], $imagem_dir); } //
Faz o upload da imagem

// echo "Sua foto foi enviada com sucesso!";
$img=$imagem_nome;
}
if($img!=""){
include "config.php";
$sql = "INSERT INTO dentista
(nome,img)VALUES('$nome','$img')";
mysql_query($sql) or die ("não foi possível inserir dados");

print "<script type = 'text/javascript'>location.href =
'form_enviar.php'</script>";
}
?>

Juliano Biscaia

unread,
Feb 20, 2010, 8:57:31 PM2/20/10
to list...@googlegroups.com
Cara, pela rápida leitura de seu código, vc vai ter que mudar sua validação:


$arquivo = isset($_FILES["img"]) ? $_FILES["img"] : FALSE;// Prepara a variável do arquivo
Na linha acima, se a pessoa enviou algum arquivo, a var. $arquivo recebe o arquivo, se não, recebe FALSE.

if ($arquivo) {
Nessa linha o PHP entende: Se $arquivo tem algum valor DIFERENTE de FALSE, o IF é executado... Se a pessoa não enviou, ele retorna o erro.

Pela sua dúvida eu faria o seguinte:
Trocaria o FALSE desta linha, ficando assim
$arquivo = isset($_FILES["img"]) ? $_FILES["img"] : '';

No IF, mudaria para isso:
if ($arquivo != '') 

Desta forma, se a pessoa não enviou o arquivo, a execução deve continuar. Mas após estas alterações reveja seus IFs abaixo....

Clebio Rocha

unread,
Feb 21, 2010, 1:14:12 PM2/21/10
to LISTA PHP
ola, acho q ficaria mais ou menos assim, não testei o codigo, confira
por favor, pode ver que so removi um "if".


// Formulário postado... executa as ações
if ($arquivo) {

if ($arquivo["size"] > $config["tamanho"])// Verifica

willcom

unread,
Feb 21, 2010, 7:46:00 PM2/21/10
to LISTA PHP
Retirando o if eu consegui passar, mais no db foi cadastrado o
resultado desta linha "$imagem_nome = md5(uniqid(time())) . "." .
$ext[1];"
o que foi resolvido ao mostra o resultado da query com esse if ai:
"if( (substr($images,-3)=="gif") || (substr($images,-3)=="jpg") ||
(substr($images,-3)=="JPG") || (substr($images,-3)=="GIF") )
{
comandos...
} "

Agradeço as pessoas que Cleber Rocha e ao juliano Biscaia. E ainda
tendo alguem uma outra soluçao favor postar..

Reply all
Reply to author
Forward
0 new messages