Nukes 0 Denunciar post Postado Junho 21, 2011 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
leoQueiroga 0 Denunciar post Postado Junho 21, 2011 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
KMRodrigo 1 Denunciar post Postado Junho 21, 2011 # 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
Nukes 0 Denunciar post Postado Junho 21, 2011 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
KMRodrigo 1 Denunciar post Postado Junho 21, 2011 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
Nukes 0 Denunciar post Postado Junho 21, 2011 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
- KbeçãO - 0 Denunciar post Postado Junho 21, 2011 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
Nukes 0 Denunciar post Postado Junho 21, 2011 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
KMRodrigo 1 Denunciar post Postado Junho 21, 2011 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
Nukes 0 Denunciar post Postado Junho 21, 2011 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
KMRodrigo 1 Denunciar post Postado Junho 21, 2011 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
Nukes 0 Denunciar post Postado Junho 21, 2011 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
Nukes 0 Denunciar post Postado Junho 22, 2011 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