Jump to content


Photo

Deixar Campo $_Files Nao Obrigatorio


  • Faça o login para participar
4 replies to this topic

#1 cezarluiz

cezarluiz

    Novato no fórum

  • Usuários
  • 14 posts
  • Sexo:Masculino
  • Localidade:Curitiba

Posted 15/12/2009, 22:46

Pois bem, estou a 2 dias tentando deixar um formulario com um campo de upload de imagem nao obrigatorio. Eu nao gostaria da solução mastigada, meu intuito em postar isso aqui, é pra solucionar meu problema e ao mesmo tempo aprender, gostaria que vocês me dissessem aonde está o erro e se possivel explicando qual a melhor solução, e explicando essa solução, pois nao sou tao bom quanto vocês em PHP e começei a aprender a nao muito tempo. Pois bem, a script:

<? include "config_mysql.php"; 

if($_POST['enviar']){
$nome = $_POST['nome'];
$dep = $_POST['dep'];
$outro = $_POST['outro'];
$email = $_POST['email'];
$login = $_POST['login'];
$assunto = $_POST['assunto'];
$msg = $_POST['msg'];
$img = $_FILES['imagem']['name'];

if(empty($email)){
echo '<script> history.go(-1); alert("O campo email é obrigatório.");</script>'; }

elseif(strlen($email) < 10 || !strstr($email, '@') || !strstr($email, '.')){
echo '<script>alert("Utilize um e-mail válido.");history.go(-1)</script>'; }

elseif(empty($assunto)){
echo '<script> history.go(-1); alert("O campo assunto é obrigatório.");</script>';
}

elseif(empty($msg)){
echo '<script> history.go(-1); alert("O campo mensagem é obrigatório.");</script>';
} 	

elseif(empty($nome)){
echo '<script> history.go(-1); alert("O campo nome é obrigatório.");</script>';
}

// Prepara a variável do arquivo
//if(isset($_FILES["imagem"]) ? $_FILES["imagem"]: FALSE){ ;

if($img > 0)
{
	// Tamanho máximo do arquivo (em bytes)
	$config["tamanho"] = 204800;
	
	// Formulário postado... executa as ações
	if($arquivo)
	{  
		// Verifica se o mime-type do arquivo é de imagem
		if(!eregi("^image\/(pjpeg|jpeg|png|gif|bmp)$", $arquivo["type"]))
		{
			echo '<script> history.go(-1); alert("Por favor, somente arquivos nas extensões .jpg, .jpeg, .png, .gif e .bmp. Verifique se seu arquivo está numa dessas extensões.");</script>'; die();
		}
		else
		{
			// Verifica tamanho do arquivo
			if($arquivo["size"] > $config["tamanho"])
			{
				echo '<script> history.go(-1); alert("O ser arquivo tem que ser no máximo 200KB.");</script>'; die();
			}
			
	
			// Pega extensão do arquivo
			preg_match("/\.(gif|bmp|png|jpg|jpeg){1}$/i", $arquivo["name"], $ext);
			
			// Gera um nome único para a imagem
			$imagem_nome = $_FILES['imagem']['name'];
	
			// Caminho de onde a imagem ficará
			$imagem_dir = "img_contato/" . $imagem_nome;
	
			// Faz o upload da imagem
			move_uploaded_file($arquivo["tmp_name"], $imagem_dir);
	
		}
	}
} // $img > 0
if(empty($login)){
echo '<script> history.go(-1); alert("O campo login é obrigatório.");</script>';
} else {
$cadastra_comprovante = mysql_query("INSERT INTO contato (`id_contato`, `nome`, `departamento`, `outro`, `email`, `login`, `assunto`, `mensagem`, `imagem`) VALUES ('', '$nome', '$dep', '$outro', '$email', '$login', '$assunto', '$msg', '$img')");
echo '<script> alert("Sua mensagem foi enviada com sucesso, em breve estaremos respondendo.");</script>';
echo "<meta HTTP-EQUIV='Refresh' CONTENT='0;URL=index.php?stein=contato'>";
}}
?>


#2 MBA

MBA

    24 Horas

  • Usuários
  • 412 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte
  • Interesses:Desenvolvimento WEB

Posted 16/12/2009, 07:32

Amigo, bom dia.
Tudo bom?

O problema é que você está dando o insert na imagem sempre! Mas quando não tem nada, ele da um insert em vazio e pode ou não achar a variável ou não permitir NULL no banco.
Uma solução é escrever dois inserts diferentes....

Se não vier imagem:
$cadastra_comprovante = mysql_query("INSERT INTO contato (`id_contato`, `nome`, `departamento`, `outro`, `email`, `login`, `assunto`, `mensagem`) VALUES ('', '$nome', '$dep', '$outro', '$email', '$login', '$assunto', '$msg')");


E se vier:
$cadastra_comprovante = mysql_query("INSERT INTO contato (`id_contato`, `nome`, `departamento`, `outro`, `email`, `login`, `assunto`, `mensagem`, `imagem`) VALUES ('', '$nome', '$dep', '$outro', '$email', '$login', '$assunto', '$msg', '$img')");


Vale lembrar que o código pode estar errado. É só a ideia!
E vale lembrar que para isso, o campo imagem deve permitir NULL no MySQL.

Se não der certo, volte ai.
Abraços

Mateus
Mateus Antunes
MBASistemas

#3 cezarluiz

cezarluiz

    Novato no fórum

  • Usuários
  • 14 posts
  • Sexo:Masculino
  • Localidade:Curitiba

Posted 16/12/2009, 09:32

Opa, tudo bem sim :)

Entendi.. é esse método nao ajudou... mas consegui ja arrumar :) o erro estava aqui...

Retirar isso
if($img > 0)
{

e colocar
if(isset($_FILES["imagem"]) ? $_FILES["imagem"]: FALSE){ ;

e depois deixar isso
if($arquivo)
{

assim:
if($arquivo['tmp_name'] != "")
{

Com isso ele verficaria se o arquivo estivesse diferente de "NADA", ou seja, se tivesse nullo o campo ele nao fará nada. Foi uma cosia que passou despercebida...

Valeu pela resposta, caso os moderadores queiram fechar o tópico, solução resolvida :)

#4 '' sem.Ponto

'' sem.Ponto

    Super Veterano

  • Ex-Admins
  • 2098 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte

Posted 16/12/2009, 11:48

Não não, você tem que verificar o código do erro com $_FILES['arquivo']['error'].

Explicação dos valores:

Valor: 0; não houve erro, o upload foi bem sucedido.
Valor: 1; O arquivo no upload é maior do que o limite definido em upload_max_filesize no php.ini.
Valor: 2; O arquivo ultrapassa o limite de tamanho em MAX_FILE_SIZE que foi especificado no formulário HTML.
Valor: 3; o upload do arquivo foi feito parcialmente.
Valor: 4; Não foi feito o upload do arquivo.

if ($_FILES['arquivo']['error'] == 0) {
     echo 'upload com sucesso';
}
else {
     echo 'Ocorreu um erro. Código: '.$_FILES['arquivo']['error'];
}

(ok2)
att,
Muller Dias
ex-administrador Fórum WMO

#5 Sh1n0

Sh1n0

    Turista

  • Usuários
  • 58 posts
  • Sexo:Masculino
  • Localidade:Castanheiras, Rondonia

Posted 16/12/2009, 20:34

Ola! meu script é esse!
<?php

include "config.php";

		if($_GET['acao']=="cadastra")
		{

$nome = trim($_POST['nome']);
$sobrenome  = trim($_POST['sobrenome']);
$email = trim($_POST['email']);
$usuario = trim($_POST['usuario']);
$info = trim($_POST['info']);
$foto = trim($_FILES['arquivo']['name']);

/* Vamos checar algum erro nos campos */

if(empty($nome)){
echo '<script> history.go(-1); alert("O campo Nome é obrigatório.");</script>'; }

elseif(empty($sobrenome)){
echo '<script> history.go(-1); alert("O campo Sobrenome é obrigatório.");</script>';
}

elseif(empty($email)){
echo '<script> history.go(-1); alert("O campo E-mail é obrigatório.");</script>';
}       

elseif(strlen($email) < 10 || !strstr($email, '@') || !strstr($email, '.')){
echo '<script>alert("Utilize um e-mail válido.");history.go(-1)</script>'; }

elseif(empty($info)){
echo '<script> history.go(-1); alert("O campo Info é obrigatório.");</script>';
}

if(isset($_FILES["imagem"]) ? $_FILES["imagem"]: FALSE){ ;

        // Tamanho máximo do arquivo (em bytes)
        $config["tamanho"] = 204800;
        
        // Formulário postado... executa as ações
		if($arquivo['tmp_name'] != "")
		{  
                // Verifica se o mime-type do arquivo é de imagem
                if(!eregi("^image\/(pjpeg|jpeg|png|gif|bmp)$", $arquivo["type"]))
                {
                        echo '<script> history.go(-1); alert("Por favor, somente arquivos nas extensões .jpg, .jpeg, .png, .gif e .bmp. Verifique se seu arquivo está numa dessas extensões.");</script>'; die();
                }
                else
                {
                        // Verifica tamanho do arquivo
                        if($arquivo["size"] > $config["tamanho"])
                        {
                                echo '<script> history.go(-1); alert("O ser arquivo tem que ser no máximo 200KB.");</script>'; die();
                        }
                        
        
                        // Pega extensão do arquivo
                        preg_match("/\.(gif|bmp|png|jpg|jpeg){1}$/i", $arquivo["name"], $ext);
                        
                        // Gera um nome único para a imagem
                        $imagem_nome = $_FILES['arquivo']['name'];
        
                        // Caminho de onde a imagem ficará
                        $imagem_dir = "foto/" . $imagem_nome;
        
                        // Faz o upload da imagem
                        move_uploaded_file($arquivo["tmp_name"], $imagem_dir);
        
                }
        }
} // $foto > 0
if(empty($usuario)){
echo '<script> history.go(-1); alert("O campo Usuario é obrigatório.");</script>';
} else {
 
    /* Vamos checar se o nome de Usuário escolhido e/ou Email já existem no banco de dados */
 
    $sql_email_check = mysql_query(
 
        "SELECT COUNT(usuario_id) FROM usuarios WHERE email='{$email}'"
 
        );
 
    $sql_usuario_check = mysql_query(
 
        "SELECT COUNT(usuario_id) FROM usuarios WHERE usuario='{$usuario}'"
 
        );
 
    $eReg = mysql_fetch_array($sql_email_check);
    $uReg = mysql_fetch_array($sql_usuario_check);
 
    $email_check = $eReg[0];
    $usuario_check = $uReg[0];
 
    if (($email_check > 0) || ($usuario_check > 0)){
 
		echo "<strong>ERRO </strong>- Por favor corrija os seguintes erros abaixo: <br /> <br />";

		if($email_check > 0){

		echo "Este email ( <strong>".$email."</strong> ) j&aacute; est&aacute; sendo utilizado.<br />Por favor utilize outra conta de email! <br />";

		unset($email);

		}

		if($usuario_check > 0){

			echo "Este nome de usu&aacute;rio ( <strong>".$usuario."</strong> ) j&aacute; est&aacute; sendo utilizado.<br />Por favor utilize outro nome de usu&aacute;rio!<br />";

			unset($usuario);

		}
 
        include "formulario_cadastro.php";
 
    }else{
 
        /* Se passarmos por esta verificação ilesos é hora de
        finalmente cadastrar os dados. Vamos utilizar uma função para gerar a senha de 
        forma randômica*/
 
        function makeRandomPassword(){
 
            $salt = "abchefghjkmnpqrstuvwxyz0123456789";
            srand((double)microtime()*1000000); 
            $i = 0;
 
            while ($i <= 7){
 
                $num = rand() % 33;
                $tmp = substr($salt, $num, 1);
                $pass = $pass . $tmp;
                $i++;
 
            }
 
            return $pass;
 
        }
 
        $senha_randomica   =  makeRandomPassword();
        $senha = md5($senha_randomica);
 
        // Inserindo os dados no banco de dados
 
		$info = htmlspecialchars($info);

		$sql = mysql_query("INSERT INTO usuarios (nome, sobrenome, email, usuario, foto, senha, info, data_cadastro) 
							VALUES('{$nome}', '{$sobrenome}', '{$email}', '{$usuario}', '{$foto}', '{$senha}', '{$info}', now())") 
							or die( mysql_error());
 
        if (!$sql){
 
            echo "Ocorreu um erro ao criar sua conta, entre em contato.";
 
        }else{
 
            $usuario_id = mysql_insert_id();
 
            // Enviar um email ao usuário para confirmação e ativar o cadastro!
 
            $headers = "MIME-Version: 1.0\n";
            $headers .= "Content-type: text/html; charset=iso-8859-1\n";
            $headers .= "From: Paulo Ricardo - Webmaster<eu@pauloricardo.org>";
 
            $subject = "Confirmação de cadastro - PauloRicardo.org";
            $mensagem  = "Prezado  {$nome} {$sobrenome},<br /> 
            Obrigado pelo seu cadastro em nosso site, <a href='http://pauloricardo.org/'>
            http://www.teusite.com.br</a>!<br /> <br /> 
 
            Para confirmar seu cadastro e ativar sua conta em nosso site, podendo acessar à 
            áreas exclusivas, por favor clique no link abaixo ou copie e cole na barra de 
            endereço do seu navegador.<br /> <br /> 
 
            <a href='http://pauloricardo.org/user/ativar.php?id={$usuario_id}&code={$senha}'>
            http://pauloricardo.org/user/ativar.php?id={$usuario_id}&code={$senha}
            </a>
 
            <br /> <br /> 
            Após a ativação de sua conta, você poderá ter acesso ao conteúdo exclusivo
            efetuado o login com os seguintes dados abaixo:<br > <br /> 
 
            <strong>Usuario</strong>: {$usuario}<br /> 
            <strong>Senha</strong>: {$senha_randomica}<br /> <br /> 
   
            Obrigado!<br /> <br /> 
 
            Webmaster<br /> <br /> <br /> 
            Esta é uma mensagem automática, por favor não responda!";
 
            mail($email, $subject, $mensagem, $headers);
 
            echo "Foi enviado para seu email - ( ".$email." ) um pedido de 
            confirmação de cadastro, por favor verifique e sigas as 
            instruçõs!";
			}
			
        }
 
    }
 
}
 
?>
por quê ele não esta fazendo o upload?
mas cadastrar no BD.
Paulo Ricardo
Skype: sh1n0.styl3
Castanheiras, RO




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq