Ir para conteúdo

POWERED BY:

Arquivado

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

Nukes

Não consigo localizar o erro!

Recommended Posts

Galera, estou fazendo um esquema de envio de mensagem + upload interno aqui da empresa... Mas ainda não mando muito bem no PHP.

 

O que acontece é o seguinte, o upload está funcionando e tudo mais... Mas quando testo um arquivo maior do que o permitido, ele está apresentando a mensagem de erro errada. (Você deve preencher todos os campos obrigatórios! (Mensagem/Nome/Email) )

 

Já verifiquei tudo aqui e não consigo achar onde está o erro, será que alguém me da uma luz?

 

Ps.: Aceito críticas/sugestões para o código. :)

 

Código index.php

 

		 <?php 
		$acao = $_GET['acao'];

			if ($acao == 'enviar') {
				$mensagem = $_POST['contact'];
				$email = $_POST['email'];
				$nome = $_POST['nome'];
				$arquivo = $_FILES['arquivo']['name'];
				$data = date("d/m/Y");
				$erro = "";

			# Verifica se todos os campos foram preenchidos
			if ($mensagem == "" or $email == "" or $nome == "") {
			$erro = 1;	
			}

			# Se algum campo não foi preenchido, retorna msg de erro e para o script.
			if ($erro == 1) {
				echo '<div id="erro_msg">Você deve preencher todos os campos obrigatórios! (Mensagem/Nome/Email)</div>';
			}

			# Se todos os campos foram preenchidos e o não tem arquivo para upload, insere os dados no banco.
			if ($erro == "" and $arquivo == "") { mysql_query("INSERT INTO ljvirtual_sugestoes (nome, sugestao, email, data, arquivo) VALUES ('$nome', '$mensagem', '$email', '$data', '$arquivo');") or die ($sql_erro = 1); 
			# Se os dados foram inseridos corretamente no banco, apresenta mensagem de sucesso
			if ($sql_erro == "") { echo "<div_msg>Sua mensagem foi enviada com sucesso!<br /> Obrigado por colaborar conosco!<br />TiTeam";
			}
			}


			# Se todos os campos foram preenchidos e tem arquivo para upload, carrega o upload.php e insere os dados no banco.
			if ($erro == "" and $arquivo != "") {
				include "upload.php";
				mysql_query("INSERT INTO ljvirtual_sugestoes (nome, sugestao, email, data, arquivo) VALUES ('$nome', '$mensagem', '$email', '$data', '$arquivo');") or die ("Não foi possível enviar sua mensagem!");
				}

			}
			?>

 

Código upload.php:

 

<?php

// Pasta onde o arquivo vai ser salvo
$_UP['pasta'] = 'uploads/';

// Tamanho máximo do arquivo (em Bytes)
$_UP['tamanho'] = 1024 * 1024 * 1; // 20Mb

// Array com as extensões permitidas
$_UP['extensoes'] = array('jpg', 'png', 'gif', 'doc', 'docx', 'xls', 'xlsx', 'exe');

// Renomeia o arquivo? (Se true, o arquivo será salvo como .jpg e um nome único)
$_UP['renomeia'] = true;

// Array com os tipos de erros de upload do PHP
$_UP['erros'][0] = '<div id="msg_erro">Não houve erro</div>';
$_UP['erros'][1] = '<div id="msg_erro">O arquivo no upload é maior do que o limite do PHP</div>';
$_UP['erros'][2] = '<div id="msg_erro">O arquivo ultrapassa o limite de tamanho especifiado no HTML</div>';
$_UP['erros'][3] = '<div id="msg_erro">O upload do arquivo foi feito parcialmente</div>';
$_UP['erros'][4] = '<div id="msg_erro">Não foi feito o upload do arquivo</div>';

// Verifica se houve algum erro com o upload. Se sim, exibe a mensagem do erro
if ($_FILES['arquivo']['error'] != 0) {
die ($_UP['erros'][$_FILES['arquivo']['error']]);
exit; // Para a execução do script
}

// Caso script chegue a esse ponto, não houve erro com o upload e o PHP pode continuar

// Faz a verificação da extensão do arquivo
$extensao = strtolower(end(explode('.', $_FILES['arquivo']['name'])));
if (array_search($extensao, $_UP['extensoes']) === false) {
echo '<div id="msg_erro">Por favor, envie arquivos com as seguintes extensões:<br /> jpg, png, gif, doc, docx, xls, xlsx</div>';
}

// Faz a verificação do tamanho do arquivo
else if ($_UP['tamanho'] < $_FILES['arquivo']['size']) {
echo '<div id="msg_erro">O arquivo excede o tamanho limite! (20mb)</div>';
}

// O arquivo passou em todas as verificações, hora de tentar movê-lo para a pasta
else {
// Primeiro verifica se deve trocar o nome do arquivo
if ($_UP['renomeia'] == true) {
// Cria um nome baseado no UNIX TIMESTAMP atual e com extensão .jpg
$nome_final = time().".".$extensao;
} else {
// Mantém o nome original do arquivo
$nome_final = $_FILES['arquivo']['name'];
}

// Depois verifica se é possível mover o arquivo para a pasta escolhida
if (move_uploaded_file($_FILES['arquivo']['tmp_name'], $_UP['pasta'] . $nome_final)) {
// Upload efetuado com sucesso, exibe uma mensagem e um link para o arquivo
	echo '<div id="msg_erro">Sua sugestão foi enviada com sucesso!<br /> Obrigado por colaborar conosco!<br /><font color="white"></b>TiTeam</b></font></div>';
} else {
// Não foi possível fazer o upload, provavelmente a pasta está incorreta
echo '<div id="msg_erro">Não foi possível enviar sua mensagem, tente novamente.</div>';
}

}

?>

 

Obrigado desde já! Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

meio que pela identação ali, não tá faltando um } depois das variáveis receberem o valor?

 

Tipo:

 

<?php 
                       $acao = $_GET['acao'];

                               if ($acao == 'enviar') {
                                       $mensagem = $_POST['contact'];
                                       $email = $_POST['email'];
                                       $nome = $_POST['nome'];
                                       $arquivo = $_FILES['arquivo']['name'];
                                       $data = date("d/m/Y");
                                       $erro = "";
                               }

                               # Verifica se todos os campos foram preenchidos
                               if ($mensagem == "" or $email == "" or $nome == "") {
                               $erro = 1;      
                               }

                               # Se algum campo não foi preenchido, retorna msg de erro e para o script.
                               if ($erro == 1) {
                                       echo '<div id="erro_msg">Você deve preencher todos os campos obrigatórios! (Mensagem/Nome/Email)</div>';
                               }

                               # Se todos os campos foram preenchidos e o não tem arquivo para upload, insere os dados no banco.
                               if ($erro == "" and $arquivo == "") { mysql_query("INSERT INTO ljvirtual_sugestoes (nome, sugestao, email, data, arquivo) VALUES ('$nome', '$mensagem', '$email', '$data', '$arquivo');") or die ($sql_erro = 1); 
                               # Se os dados foram inseridos corretamente no banco, apresenta mensagem de sucesso
                               if ($sql_erro == "") { echo "<div_msg>Sua mensagem foi enviada com sucesso!<br /> Obrigado por colaborar conosco!<br />TiTeam";
                               }
                               }


                               # Se todos os campos foram preenchidos e tem arquivo para upload, carrega o upload.php e insere os dados no banco.
                               if ($erro == "" and $arquivo != "") {
                                       include "upload.php";
                                       mysql_query("INSERT INTO ljvirtual_sugestoes (nome, sugestao, email, data, arquivo) VALUES ('$nome', '$mensagem', '$email', '$data', '$arquivo');") or die ("Não foi possível enviar sua mensagem!");
                                       }

                               }
                               ?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

 # Verifica se todos os campos foram preenchidos
                               if ($mensagem == "" or $email == "" or $nome == "") {
                               $erro = 1;      
                               }

                               # Se algum campo não foi preenchido, retorna msg de erro e para o script.
                               if ($erro == 1) {
                                       echo '<div id="erro_msg">Você deve preencher todos os campos obrigatórios! (Mensagem/Nome/Email)</div>';
                               }

 

Crie outra regra. Acredito que quando passa ele manda a mensagem zerada por isso cai nessa condição. O mais fácil é mudar a mensagem de erro para uma mais genérica (Verifique o tamanho do arquivo e se todos estão preenchidos) / mudar a regra de condição e criar mais uma para o outro caso

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera mas assim, quando não tem arquivo de upload, as mensagens funcionam normalmente... "Mensagem enviada com sucesso..." "Deve preencher os campos" etc...

 

Até mesmo quando tem arquivo de upload elas aparecem normalmente como deveriam.

 

O problema só ocorre quando eu tento fazer upload de um arquivo maior que o permitido... Aí apresenta essa mensagem:

 

"Você deve preencher todos os campos...."

 

Quando deveria aparecer...

 

"O arquivo excede o tamanho limite! (20mb)"

 

>_<

 

Parece que quando o arquivo é maior do que o permitido, o formulário não é submetido e aparece a mensagem de erro como se o usuário não tivesse escrito nada... :S

 

Alguma idéia?

 

Se quiserem verificar como tá:

http://amorc.org.br/Desenvolvimento/titeam/

 

(Não olhem pro layout, ta tosko! haha)

 

Obrigado desde já :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

troca a mensagem de erro (bem vindo a gambiarra)

 

"É obrigatório o uso de arquivos menores que 20 mb e preencher os campos tal tal tal" =)

Compartilhar este post


Link para o post
Compartilhar em outros sites

troca a mensagem de erro (bem vindo a gambiarra)

 

"É obrigatório o uso de arquivos menores que 20 mb e preencher os campos tal tal tal" =)

 

Puts, mas aí fika muita gambiarra...

 

Se não tiver outro jeito, vai ser assim mesmo, mas não queria fazer emenda no código >_<

Compartilhar este post


Link para o post
Compartilhar em outros sites

você recebe um valor $_GET e outro $_POST, isso ta certo?

 

$acao = $_GET['acao'];

    if ($acao == 'enviar') {
        $mensagem = $_POST['contact'];
        $email = $_POST['email'];
        $nome = $_POST['nome'];
        $arquivo = $_FILES['arquivo']['name'];
        $data = date("d/m/Y");
        $erro = "";

Compartilhar este post


Link para o post
Compartilhar em outros sites

O $_GET é quando o kra clica no botão, o formulário submete pra própria página e envia o valor "?acao=enviar".

 

Os outros dados são passados via $_POST ...

 

Isso é errado? :huh: (noob) ashhusa

 

Dados do form:

 

 <form action="?acao=enviar" method="post" enctype="multipart/form-data" name="form1" id="form1">

 

 

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara provavelmente o que acontece é que quando excede os 20MB ele zera tudo por isso cai na condição de tudo vazio....

o problema é como achar o erro antes dele zerar pra poder jogar a condição.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara provavelmente o que acontece é que quando excede os 20MB ele zera tudo por isso cai na condição de tudo vazio....

o problema é como achar o erro antes dele zerar pra poder jogar a condição.

 

É foi isso que eu pensei >_< ... Mas pq ele zera? Em que parte do código faz isso? Essa é a questão >_<

 

:S

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma maneira de menos gambiarra é - Validar os campos nome, mensagem e email no client Side com Javascript, e ai no php muda a msg para "Arquivo excede os 20MB" mas n muda a condição (já q está caindo nela nos momentos certos). Validando no lado do cliente ele nunk vai chegar ao php com problema de campos em branco por tanto será apenas quando o arquivor exceder os 20mb que cai na condição.

 

Como toda gambiarra tem problema essa tmb tem.

Problema = Se o cara desativar o javascript ele vai poder enviar sem preencher e vai exibir que o peso excede mas na verdade vai ter campo em branco, normalmente o cara só desativa o javascript pra encher o saco, e se ele sabe desativar o javascript ele vai entender o bug. Jah no seu banco de dados não haverá problema algum.

 

eu n manjo nda dessa parte de upload de arquivos =), por isso n posso ajudar muito com a parte de programação pra encontra o erro, o q eu sei são essas gambiarras lógicas =)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma maneira de menos gambiarra é - Validar os campos nome, mensagem e email no client Side com Javascript, e ai no php muda a msg para "Arquivo excede os 20MB" mas n muda a condição (já q está caindo nela nos momentos certos). Validando no lado do cliente ele nunk vai chegar ao php com problema de campos em branco por tanto será apenas quando o arquivor exceder os 20mb que cai na condição.

 

Como toda gambiarra tem problema essa tmb tem.

Problema = Se o cara desativar o javascript ele vai poder enviar sem preencher e vai exibir que o peso excede mas na verdade vai ter campo em branco, normalmente o cara só desativa o javascript pra encher o saco, e se ele sabe desativar o javascript ele vai entender o bug. Jah no seu banco de dados não haverá problema algum.

 

eu n manjo nda dessa parte de upload de arquivos =), por isso n posso ajudar muito com a parte de programação pra encontra o erro, o q eu sei são essas gambiarras lógicas =)

 

Não Rodrigo, o problema é que a mensagem aparece quando não deve aparecer >_<... Todas as mensagens estão aparecendo corretamente, a única que está aparecendo na hora errada (e também na hora certa) é a do preenchimento dos formulários...

 

=/ ..

Tá tenso aki...

 

Já tentei tudo aki e nda ;S

 

to vendo que o jeito vai ser fazer gambia mesmo >_<

Compartilhar este post


Link para o post
Compartilhar em outros sites

3:30 AM.

 

Estou eu, pensando em como resolver esse código, com minha namorada roncando do lado.

 

Tive 2 insights.

 

Nenhum deles funcionou.

 

Alguém tem mais alguma idéia? É sério, preciso dormir um dia. ahuahua

 

abraços

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.