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>";
}
?>
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....
// Formulário postado... executa as ações
if ($arquivo) {
if ($arquivo["size"] > $config["tamanho"])// Verifica
Agradeço as pessoas que Cleber Rocha e ao juliano Biscaia. E ainda
tendo alguem uma outra soluçao favor postar..