Vinny Posted October 14, 2012 at 04:35 PM Report #479110 Posted October 14, 2012 at 04:35 PM (edited) É o seguinte, preciso que meu formulário salve as informações que insero nele no banco de dados, junto a este formulário, preciso fazer upload de três imagens, um dela deve ser obrigatória. As imagens, além do upload para o diretorio desejado, preciso que seja registrado o nome da imagem para exibição. Segue o meu formulário: <?php // Visitante não pode acessar esta página if($dados == '') { header ("Location:$login_user"); } ?> <h3>Incluir Novo Marcador</h3> <form id="novomarcador" enctype="multipart/form-data" method="post" action="<?php echo $save_marcador; ?>"> <fieldset> <?php $id = ucfirst(strtolower($dados['id_usuario'])); $nome = ucfirst(strtolower($dados['nome'])); $login = ucfirst(strtolower($dados['login'])); ?> <input type="hidden" name="id_usuario" id="id_usuario" value="<?php echo $id; ?>" /> <input type="hidden" name="login" id="login" value="<?php echo $login; ?>" /> <input type="hidden" name="nome" id="nome" value="<?php echo $nome; ?>" /> <dl> <dt><label for="marcador">Marcador:</label><br /><span>Nome para seu Marcador</span></dt> <dd><input type="text" required="required" name="marcador" id="marcador" size="25" class="inputbox" /></dd> </dl> <hr /> <dl> <dt><label for="fabricante">Fabricante:</label><br /><span>Nome para do Fabricante</span></dt> <dd><input type="text" required="required" tabindex="1" name="fabricante" id="fabricante" size="25" class="inputbox" /></dd> </dl> <hr /> <dl> <dt><label for="modelo">Modelo:</label><br /><span>Modelo do Marcador</span></dt> <dd><input type="text" required="required" tabindex="1" name="modelo" id="modelo" size="25" class="inputbox" /></dd> </dl> <hr /> <script type="text/javascript"> // <![CDATA[ function habilitacamposNS(par) { div = document.getElementById('nserie'); if(par == 'sim') { div.style.display = 'block'; } else { div.style.display = 'none'; } } // ]]> </script> <dl> <dt><label for="nserie">Numero de série:</label><br /><span>Numero de série do seu Marcador. Se selecionar SIM, indique o número de serie no campo.</span></dt> <dd><input type="radio" name="respnserie" value="s" onclick="habilitacamposNS('nao');" />Não <input type="radio" name="respnserie" value="s" onclick="habilitacamposNS('sim');" />Sim <div id="nserie" style="display: none;"> <input type="file" tabindex="1" name="imagem3" id="imagem3" size="25" class="inputbox" /> </div> </dd> </dl><br /><br /> <hr /> <dl> <dt><label for="nfiscal">Nota Fiscal:</label><br /><span>Nota Fiscal do seu Marcador</span></dt> <dd><input type="text" tabindex="1" name="nfiscal" id="nfiscal" size="25" class="inputbox" /></dd> </dl> <hr /> <script type="text/javascript"> // <![CDATA[ function habilitaCampos(par) { div = document.getElementById('crexercito'); if(par == 'sim') { div.style.display = 'block'; } else { div.style.display = 'none'; } } // ]]> </script> <dl> <dt><label for="crexercito">Você possui CR no exército?</label><br /><span>Possui CR no exército? Se selecionar como SIM, então deve inserir o número e validade.</span></dt> <dd><input type="radio" name="respcrexercito" value="s" onclick="habilitaCampos('nao');" />Não <input type="radio" name="respcrexercito" value="s" onclick="habilitaCampos('sim');" />Sim <div id="crexercito" style="display: none;"> <input type="text" tabindex="1" name="crexercito" id="crexercito" size="25" class="inputbox" /> </div> </dd> </dl><br /> <hr /> <script type="text/javascript"> // <![CDATA[ function habilitacamposRE(par) { div = document.getElementById('rexercito'); if(par == 'sim') { div.style.display = 'block'; } else { div.style.display = 'none'; } } // ]]> </script> <dl> <dt><label for="rexercito">Registro no exército:</label><br /><span>Seu marcador é registrado no exército? Se marcou sim, deve indicar o número do CRAF.</span></dt> <dd><input type="radio" name="resprexercito" value="s" onclick="habilitacamposRE('nao');" />Não <input type="radio" name="resprexercito" value="s" onclick="habilitacamposRE('sim');" />Sim <div id="rexercito" style="display: none;"> <input type="text" tabindex="1" name="rexercito" id="rexercito" size="25" class="inputbox" /> </div> </dd> </dl><br /> <hr /> <dl> <dt><label for="imagem">Fotos do seu marcador:</label><br /><span>Envie fotos do seu marcador. Antes de enviar suas fotos, tenha certeza de dar um nome único a ela, inserindo seu nome e alguma numeração que o nome de arquivo seja único em nosso banco. </span></dt> <dd><input type="file" tabindex="1" name="imagem" id="imagem" size="25" class="inputbox" /> <br /> <input type="file" tabindex="1" name="imagem2" id="imagem2" size="25" class="inputbox" /> </dd> </dl><br /><br /> <hr /> </fieldset> <fieldset class="submit" style="text-align: center;"> <input type="submit" class="enviar" name="cadastrar" value="Salvar" style="cursor:pointer;" /> </fieldset> </form> Os campos das imagens são Numero de série (campo opcionale), Fotos (são dois campos, o primeiro obrigatorio e o segundo opcional). O código que salva tudo é o seguinte: <?php // Visitante não pode acessar esta página if($dados == '') { header ("Location:$login_user"); } // Aqui você faz a conexão com o banco de dados include "config.php"; // Se o usuário clicou no botão cadastrar efetua as ações if ($_POST['cadastrar']) { // Recupera os dados dos campos $nome = $_POST['nome']; $id = $_POST['id_usuario']; $login = $_POST['login']; $marcador = $_POST['marcador']; $fabricante = $_POST['fabricante']; $modelo = $_POST['modelo']; $nfiscal = $_POST['nfiscal']; $crexercito = $_POST['crexercito']; $rexercito = $_POST['rexercito']; $foto[1] = $_FILES["imagem"]; $foto[2] = $_FILES["imagem2"]; $foto[3] = $_FILES['imagem3']; // Verificando se os campos obrigatórios foram preenchidos if(($_POST['marcador'] == '') || ($_POST['fabricante'] == '') || ($_FILES["imagem"] == '')){ echo '<strong style="color: #BC2A4D;">Você deve preencher os campos obrigatórios.</strong>'; include "formulario_marcador.php"; } // Se a foto estiver sido selecionada if (!empty($foto[1]["name"]) && !empty($foto[2]["name"]) && !empty($foto[3]["name"])) { // Largura máxima em pixels $largura = 15000; // Altura máxima em pixels $altura = 18000; // Tamanho máximo do arquivo em bytes $tamanho = 200000; // Verifica se o arquivo é uma imagem if(!preg_match("/^image\/(pjpeg|jpeg|png|gif|bmp)$/", $foto[1]["type"])){ $error[4] = "O arquivo enviado não é uma imagem."; } if(!preg_match("/^image\/(pjpeg|jpeg|png|gif|bmp)$/", $foto[2]["type"])){ $error[4] = "O arquivo enviado não é uma imagem."; } if(!preg_match("/^image\/(pjpeg|jpeg|png|gif|bmp)$/", $foto[3]["type"])){ $error[4] = "O arquivo enviado não é uma imagem."; } // Pega as dimensões da imagem $dimensoes = getimagesize($foto[1]["tmp_name"]); $dimensoes = getimagesize($foto[2]["tmp_name"]); $dimensoes = getimagesize($foto[3]["tmp_name"]); // Verifica se a largura da imagem é maior que a largura permitida if($dimensoes[0] > $largura) { $error[5] = "A largura da imagem não deve ultrapassar ".$largura." pixels."; } // Verifica se a altura da imagem é maior que a altura permitida if($dimensoes[1] > $altura) { $error[6] = "Altura da imagem não deve ultrapassar ".$altura." pixels."; } // Verifica se o tamanho da imagem é maior que o tamanho permitido if(!empty($arquivo["size"]) > $tamanho) { $error[7] = "A imagem deve ter no máximo ".$tamanho." bytes."; } // Se não houver nenhum erro if (!empty($error) == 0) { // Pega extensão da imagem $allowed_image = array ('image/gif', 'image/jpeg', 'image/jpg', 'image/pjpeg','image/png'); $filetype = $_FILES['picture']['type']; //preg_match("/\.(gif|bmp|png|jpg|jpeg){1}$/i", $foto[1]["name"], $ext); //preg_match("/\.(gif|bmp|png|jpg|jpeg){1}$/i", $foto[2]["name"], $ext); //preg_match("/\.(gif|bmp|png|jpg|jpeg){1}$/i", $foto[3]["name"], $ext); // Gera um nome único para a imagem $nome_imagem = md5(uniqid(time())) . "." . $filetypes; $nome_imagem2 = md5(uniqid(time())) . "." . $filetypes; $nome_imagem3 = md5(uniqid(time())) . "." . $filetypes; // Caminho de onde ficará a imagem $caminho_imagem = "fotos/" . $nome_imagem; $caminho_imagem = "fotos/" . $nome_imagem2; $caminho_imagem = "fotos/" . $nome_imagem3; // Faz o upload da imagem para seu respectivo caminho move_uploaded_file($foto[1]["tmp_name"], $caminho_imagem); move_uploaded_file($foto[2]["tmp_name"], $caminho_imagem); move_uploaded_file($foto[3]["tmp_name"], $caminho_imagem); // Insere os dados no banco $sql = mysql_query("INSERT INTO marcadores (nome, id_usuario, login, marcador, fabricante, modelo, nserie, nfiscal, crexercito, rexercito, foto, foto2) VALUES ('".$nome."', '".$id."', '".$login."', '".$marcador."', '".$fabricante."', '".$modelo."', '".$nome_imagem3."', '".$nfiscal."', '".$crexercito."', '".$rexercito."', '".$nome_imagem."', '".$nome_imagem2."')") or die( mysql_error() ); // Se os dados forem inseridos com sucesso if ($sql){ echo "<strong style='color: #BC2A4D;'>O seu marcador foi cadastrado com sucesso. <br /> Você pode editar seus marcadores clicando no link <strong>Meus Marcadores</strong>. <br /> Caso queira excluir quaisquer de seus marcadores cadastros, você deve solicitar ao administrador do site, justificando o motivo da exclusão.<br /> <br /> Você será redirecionado automaticamente para à página inicial do site.</strong>"; header("refresh:3;url=$home_url" ); } } else { echo "<strong style='color: #BC2A4D;'>Erro. Corrija o(s) erro(s) descrito(s) abaixo e tente novamente. </strong><br />"; } // Se houver mensagens de erro, exibe-as if (!empty($error) != 0) { foreach ($error as $erro) { echo '<strong style="color: #BC2A4D;"> '.$erro .' </strong><br />'; include "formulario_marcador.php"; } } } } ?> O problema é que não consigo fazer mais de um upload de imagem, só consigo fazer o upload da primeira foto. Mesmo assim, só salva o registro se eu envio com foto, se não enviar foto, não é salva nada na tabela. Preciso muito de ajuda para fazer isso funcionar, e espero contar com a ajuda de vocês. PS: não sou programador expert, esse meu codigo deve estar muito bagunçado pois mechi muito nele para tentar fazer funcionar. Edited October 14, 2012 at 09:22 PM by brunoais geshi. A formatação vem a seguir qd alguém se der ao trabalho de o fazer.
yoda Posted October 15, 2012 at 03:49 PM Report #479232 Posted October 15, 2012 at 03:49 PM Uma dica : $dimensoes = getimagesize($foto[1]["tmp_name"]); $dimensoes = getimagesize($foto[2]["tmp_name"]); A variável, neste caso, vai ficar com o último valor que lhe foi atribuido, em vez de teres o valor das 3 imagens. Assim como este há vários erros do mesmo género no código. Procura no google por "multiple image upload with php". before you post, what have you tried? - http://filipematias.info sense, purpose, direction
Vinny Posted October 26, 2012 at 04:32 AM Author Report #480507 Posted October 26, 2012 at 04:32 AM yoda, esse minha página já tem alguns meses que tento montar e já fiz diversas pesquisas no Google. O fato é que preciso além do upload de imagem, que seja salve as informações que insiro no formulário, como por exemplo Nome, Datas de Nasc, email, website, etc... Muitos codigos que encontrei são apenas para uploads para um diretorio, no meu caso além do upload é necessário registrar o nome da imagem no banco de dados. Fora isso, não três imagem sendo uma obrigatória. Com relação ao codigo que postei, eu mechi tanto nele que deve estar uma bagunça. PS: eu marquei para ser notificado assim que esse topico tivesse algum resposta, mas não recebi e-mail algum.
HappyHippyHippo Posted October 26, 2012 at 04:35 AM Report #480508 Posted October 26, 2012 at 04:35 AM a maneira correcta de guardar informação é usando uma base de dados. caso esta solução não for viável, podes sempre usar XML ou simples ficheiros de dados IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Vinny Posted October 26, 2012 at 02:44 PM Author Report #480560 Posted October 26, 2012 at 02:44 PM HappyHippyHippo, esse codigo que postei funciona se for upload apenas de uma imagem. Esse codigo acima está muito modificado do original que encontrei, e quero dar preferencia a ele pois tem funções que gostaria de implementar como por exemplo ao que dá um nome unico e exclusivo as imagens.
HappyHippyHippo Posted October 26, 2012 at 02:48 PM Report #480562 Posted October 26, 2012 at 02:48 PM HappyHippyHippo, esse codigo que postei funciona se for upload apenas de uma imagem. Esse codigo acima está muito modificado do original que encontrei, e quero dar preferencia a ele pois tem funções que gostaria de implementar como por exemplo ao que dá um nome unico e exclusivo as imagens. eu não falei das imagens ou o que fazes com elas, mas sim da informaçaão relacionada com estas: O fato é que preciso além do upload de imagem, que seja salve as informações que insiro no formulário, como por exemplo Nome, Datas de Nasc, email, website, etc... IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Vinny Posted October 26, 2012 at 03:13 PM Author Report #480572 Posted October 26, 2012 at 03:13 PM As informações são salvas também apenas se faço upload da $foto[1]. Como eu disse, o script chega a funciona neste caso se apenas a $foto[1] for enviada. Os dados são para exibição e administração(editar ou excluir).
HappyHippyHippo Posted October 26, 2012 at 03:16 PM Report #480574 Posted October 26, 2012 at 03:16 PM então qual é a dúvida ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Vinny Posted October 26, 2012 at 03:34 PM Author Report #480578 Posted October 26, 2012 at 03:34 PM O problema é que não consigo fazer mais de um upload de imagem, só consigo fazer o upload da primeira foto. Mesmo assim, só salva o registro se eu envio com foto, se não enviar foto, não é salva nada na tabela
HappyHippyHippo Posted October 26, 2012 at 03:39 PM Report #480579 Posted October 26, 2012 at 03:39 PM porque dizes que só consegues fazer upload de 1 imagens ?? tens alguma mensagem de erro ?? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Vinny Posted October 26, 2012 at 03:47 PM Author Report #480581 Posted October 26, 2012 at 03:47 PM Só o upload da imagem1 funciona. Não aparece nenhuma mensagem de erro. O unico problema é quando as imagens 2 e 3 são uploaded, no diretorio elas ficam como 7e0dd69d48afc40b932b515be7690bfa.Array ao inves da extensão da imagem.
HappyHippyHippo Posted October 26, 2012 at 04:00 PM Report #480582 Posted October 26, 2012 at 04:00 PM olha bem para o que tens: $nome_imagem = md5(uniqid(time())) . "." . $filetypes; $nome_imagem2 = md5(uniqid(time())) . "." . $filetypes; $nome_imagem3 = md5(uniqid(time())) . "." . $filetypes; que variável é $filetypes e onde está definida ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Vinny Posted October 26, 2012 at 04:18 PM Author Report #480586 Posted October 26, 2012 at 04:18 PM (edited) $filetype = $_FILES['picture']['type']; Notei que é $filetypes e não $filetype. Vou verificar aqui. #edit Não funcinou. Constatei que só está fazendo upload da ultima imagem, a de número #3 Edited October 26, 2012 at 04:36 PM by Vinny
yoda Posted October 26, 2012 at 09:46 PM Report #480627 Posted October 26, 2012 at 09:46 PM Bem, já te foram dadas dicas para melhorares e resolveres os problemas com o código que usas (sem que tenhamos de ser nós a escrever a série de coisas que está mal, e que se resumem de certa forma). Uma última : Se estás a trabalhar com várias imagens, é uma perca de tempo (e torna-se mais difícil de manter) estar a fazer algo como isto : if(!preg_match("/^image\/(pjpeg|jpeg|png|gif|bmp)$/", $foto[1]["type"])){ $error[4] = "O arquivo enviado não é uma imagem."; } if(!preg_match("/^image\/(pjpeg|jpeg|png|gif|bmp)$/", $foto[2]["type"])){ $error[4] = "O arquivo enviado não é uma imagem."; } if(!preg_match("/^image\/(pjpeg|jpeg|png|gif|bmp)$/", $foto[3]["type"])){ $error[4] = "O arquivo enviado não é uma imagem."; } Quando podias ter : foreach ($foto as $f) { if(!preg_match("/^image\/(pjpeg|jpeg|png|gif|bmp)$/", $f["type"])){ $error[4] = "O arquivo enviado não é uma imagem."; } } O código fica melhor organizado, lê-se bem melhor e consequentemente os possíveis erros tornam-se mais claros. before you post, what have you tried? - http://filipematias.info sense, purpose, direction
HappyHippyHippo Posted October 26, 2012 at 09:54 PM Report #480628 Posted October 26, 2012 at 09:54 PM faz este output e diz qual o resultado : echo "Nome da imagem 1 : {$nome_imagem}<br />\n"; echo "Nome da imagem 2 : {$nome_imagem2}<br />\n"; echo "Nome da imagem 3 : {$nome_imagem3}<br />\n"; IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Vinny Posted October 26, 2012 at 11:54 PM Author Report #480639 Posted October 26, 2012 at 11:54 PM yoda, de fato ficou muito melhor e muito organizado. Só relembranco, não sou programar, estou fazendo isso as "avessas" já que PHP não meu forte. HappyHippyHippo, resultado: Nome da imagem 1 : 75390f284a80756ec7213bc3fe4853a4.3Nome da imagem 2 : 29106dfcaba86b5a0f8e05f4337f3bc1.3 Nome da imagem 3 : 870149da0e7c6288e3db41cb799a026d.3 Este output eu faço numa lista de exibição, não esta pegando a extensão da imagem. :'(
HappyHippyHippo Posted October 27, 2012 at 02:38 AM Report #480648 Posted October 27, 2012 at 02:38 AM mas afinal que código tens agora ??? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Vinny Posted October 29, 2012 at 11:51 PM Author Report #480943 Posted October 29, 2012 at 11:51 PM O mesmo do primeiro post, editado apenas com a sugestão do yoda.
-IceBurn- Posted October 30, 2012 at 07:24 PM Report #481037 Posted October 30, 2012 at 07:24 PM (edited) Boas. Tens aí alguns erros e práticas desnecessárias, mas vou focar-me na resolução do problema com as imagens, problema esse que reside essencialmente em variáveis iguais que apenas te vão retornar o último valor (como inclusivamente já foi referido). Aqui está um exemplo: // Caminho de onde ficará a imagem $caminho_imagem = "fotos/" . $nome_imagem; $caminho_imagem = "fotos/" . $nome_imagem2; $caminho_imagem = "fotos/" . $nome_imagem3; Depois, há variáveis / arrays que, parto do princípio que nem sequer estão definidos, como por exemplo: $filetype = $_FILES['picture']['type']; De onde é que vem 'picture'? Não é do formulário, certamente. Começa por resolver esses problemas e depois certamente que chegarás a algum lado 🙂 Edited October 31, 2012 at 04:13 PM by brunoais geshi
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now