Estaleiro 0 Denunciar post Postado Fevereiro 18, 2010 E aí pessoal blza, to aqui com uma baita dúvida! Fiz um site para um cliente com galeria de imagens, até aí beleza, só que ele não tem como ficar cadastrando foto por foto no sistema, ele me pediu pra enviar tudo de uma vez, tipo em lote, só que eu não tenho nem idéia de como fazer isso aí :( Alguém tem uma luz pra me dar? de como fazer esse tareco de enviar tudo de uma vez pro servidor! Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Fevereiro 18, 2010 Você pode pedir para ele compactar as fotos num pacote zip/rar e enviar para o servidor. Com PHP, você descompacta e salva as imagens Compartilhar este post Link para o post Compartilhar em outros sites
Estaleiro 0 Denunciar post Postado Fevereiro 18, 2010 Pow brother não tinha pensado nessa hipotese, mais ele cadastra tudo no BD depois de descompactado? Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Fevereiro 18, 2010 Você descompacta os arquivos e faz o que quiser com eles. É a mesma coisa que enviar um por um. As classes nativas ZipArchive a RarArchive apenas descompactam. Depois você faz o trabalho normalmente http://www.php.net/ziparchive http://www.php.net/rararchive Compartilhar este post Link para o post Compartilhar em outros sites
Estaleiro 0 Denunciar post Postado Fevereiro 18, 2010 Valeu pela ajuda Beraldo, vou trabalhar em cima disso ae, e depois posto se consegui ou não. Compartilhar este post Link para o post Compartilhar em outros sites
Estaleiro 0 Denunciar post Postado Fevereiro 19, 2010 Você descompacta os arquivos e faz o que quiser com eles. É a mesma coisa que enviar um por um. As classes nativas ZipArchive a RarArchive apenas descompactam. Depois você faz o trabalho normalmente http://www.php.net/ziparchive http://www.php.net/rararchive Seguinte dei umas pesquisadas sobre descompactação de arquivos zipados com php, consegui o seguinte código: $zip = new ZipArchive; if ($zip->open("night-car1.zip") === TRUE) { $zip->extractTo("./upload"); $zip->close(); echo "ok"; } else { echo "failed"; } $za = new ZipArchive(); $za->open('night-car1.zip'); print_r($za); var_dump($za); echo "numFiles: " . $za->numFiles . "\n"; echo "status: " . $za->status . "\n"; echo "statusSys: " . $za->statusSys . "\n"; echo "filename: " . $za->filename . "\n"; echo "comment: " . $za->comment . "\n"; for ($i=0; $i<$za->numFiles;$i++) { echo "index: $i\n"; print_r($za->statIndex($i)); $db = mysql_connect("localhost", "root", ""); $dados = mysql_select_db("exemplos", $db); $sql = "INSERT INTO fotos(tbImagem) VALUES ('$za->statIndex($i)')"; if($qr = @mysql_query($sql)){ $erro = "Cadastrado com sucesso!!!"; }else{ $erro = "Erro ao efetuar Cadastro! :".mysql_error(); } } echo $erro; echo "numFile:" . $za->numFiles . "\n"; Até aí blza, ele ta descompactando e descrevendo os arquivos (fotos) zipados, só que meu problema agora tá em cadastrar essas fotos no BD, sendo que ele me retorna um array com todos os dados, como faço pra pegar só o nome das fotos? Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Fevereiro 20, 2010 É só acessar o índice "name" do array Note que você está abrindo e fechando a conexão a cada iteração. Abra a conexão antes do loop e a feche depois dele. Você pode executar diversos INSERTs, um a cada iteração, mas o ideal é montar a SQL dentro do loop e executá-la fora dele, para que só haja um comando INSERT para todas as linhas. Você deve montar uma consulta assim: INSERT INTO tabela (campo1, campo2) VALUES (valor1, valor2), (valo3, valor4)...; Como montar a consulta assim fica para você pensar. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Fevereiro 20, 2010 Existem também os 'uploads multiplos'... uso esse plugin e o considero bem interessante: http://swfupload.org/ Um cliente meu, consegue enviar 150~350 fotos por lote, de qndo abre a janelinha para selecionar.. Compartilhar este post Link para o post Compartilhar em outros sites
Estaleiro 0 Denunciar post Postado Fevereiro 20, 2010 e aí William resolvi seguir teu conselho, baixei e implementei o swfupload no site, só que agora parei noutro problema :D Além das fotos, tenho que passar e cadastrar no BD mais dois campos que teriam que ser cadastrados junto com as fotos, to utilizando o código abaixo agora do plugin: <script type="text/javascript" src="funcoes/swfupload/core/swfupload.js"></script> <script type="text/javascript" src="funcoes/swfupload/js/swfupload.queue.js"></script> <script type="text/javascript" src="funcoes/swfupload/js/fileprogress.js"></script> <script type="text/javascript" src="funcoes/swfupload/js/handlers.js"></script> <script type="text/javascript"> var swfu; // ao carregar a página, chama o swfupload window.onload = function() { var settings = { flash_url : "funcoes/swfupload/core/Flash/swfupload.swf", // caminho do flash usado pelo sistema upload_url: "funcoes/uploadFoto.php", // url do php para upload post_params: {"PHPSESSID" : "<?php echo session_id(); ?>"}, // parâmetros extras. file_size_limit : "100 MB", // limite de envio de arquivo em megas file_types : "*.*", // tipos de arquivos permitidos> *.jpg; *.png; *.gif; file_types_description : "Todos os arquivos", // Descrição da caixinha de arquivos permitidos file_upload_limit : 100, // quantidade limite de upload de arquivos file_queue_limit : 0, // limite de marcação de arquivos para upload file_post_name: "uplfile", // Nome da variável que envia o conteudo do arquivo custom_settings : { progressTarget : "fsUploadProgress", // configurações do botão cancelar cancelButtonId : "btnCancel" }, debug: false, // debug do sistema, marque true para debugar o envio e corrigir erros // Button settings button_image_url: "funcoes/swfupload/images/TestImageNoText_65x29.png",// imagem do botão procurar button_width: "65", // largura do botão procurar button_height: "29", // altura do botão procurar button_placeholder_id: "spanButtonPlaceHolder", // id do elemento que conterá o botão procurar button_text: '<span class="theFont">Buscar</span>', // Html de dentro do botão procurar button_text_style: ".theFont { font-size: 16; }", // style do botão button_text_left_padding: 12, // espaçamento esquerdo do botão button_text_top_padding: 3, // espaçamento direito do botão // Estes eventos são definidos em handlers.js file_queued_handler : fileQueued, // ao selecionar arquivos file_queue_error_handler : fileQueueError, // erro ao adicionar erros file_dialog_complete_handler : fileDialogComplete, // seleção do arquivo completo ( somente um ) upload_start_handler : uploadStart, // início do upload upload_progress_handler : uploadProgress, // progresso do upload upload_error_handler : uploadError, // erro do upload upload_success_handler : uploadSuccess, // sucesso do upload upload_complete_handler : uploadComplete, // upload completo ( todos ) queue_complete_handler : queueComplete // seleção de todos os arquivos completo }; swfu = new SWFUpload(settings); // envia as configurações para a classe }; </script> <form id="form1" action="?pagina=fotos" method="post" enctype="multipart/form-data"> <table width="95%" border="0" align="center"> <tr> <td width="11%" align="left" valign="middle" scope="col">Categoria:</td> <th width="89%" align="left" valign="middle" scope="col"> <select name="categoria" size="1" id="categoria"> <option value="0">Escolha</option> <?php include_once("classe/ComboBox.php"); $combo = new ComboBox(); $combo->geraCategoria($id); ?> </select> </th> </tr> <tr> <td align="left" valign="middle">Cliente:</td> <td align="left" valign="middle"> <select name="cliente" size="1" id="cliente"> <option value="0">Escolha</option> <?php include_once("classe/ComboBox.php"); $combo = new ComboBox(); $combo->geraClientes($id); ?> </select> </td> </tr> <tr> <td colspan="2" align="left" valign="middle"> <div class="fieldset flash" id="fsUploadProgress"> <span class="legend">Selecionar Arquivos</span> </div> <div id="divStatus">0 Arquivos Enviados </div> <div> <span id="spanButtonPlaceHolder"></span> <input id="btnCancel" type="button" value="Cancelar Todos os uploads" onClick="swfu.cancelQueue();" disabled="disabled" style="margin-left: 2px; font-size: 8pt; height: 29px;" /> </div> </td> </tr> </table> </form> Além desse arquivo estou utilizando outra classe para upload: include_once("mySqlConn.php"); class Upload { public $nomeArquivo; public $conteudoArquivo; public $galeriaArquivo; public $caminhoArquivo; public $arquivoTemporario; public function __construct (){ $this->nomeArquivo = ''; $this->conteudoArquivo = ''; $this->caminhoArquivo = './'; $this->arquivoTemporario = ''; } /** * Método que grava o conteudo no arquivo via fopen */ public function enviarArquivo () { # cria o caminho do arquivo $arquivo = $this->caminhoArquivo.$this->nomeArquivo; # recuperamos o conteudo do arquivo enviado $this->conteudoArquivo = file_get_contents($this->arquivoTemporario); # escreve no arquivo, com o conteúdo desejado, usando este método de escrita $ponteiro = fopen($arquivo, 'wa'); fwrite($ponteiro, $this->conteudoArquivo); $qr = "INSERT INTO fotos (tbCategoria, tbCliente, tbImagem) VALUES ('?','?','$this->nomeArquivo')"; $exe = mysql_query($qr) or die("Erro ao Inserir as Fotos no BD: ".mysql_error()); fclose($ponteiro); } } Não sei o que to fazendo de errado, já fucei a documentação do plugin mais não me achei! Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Fevereiro 20, 2010 A única pergunta é: 'De onde virão' essas outras 2 informações ? Se você precisar que o usuário digite elas no momento de envio da foto, vou te confessar, que também ainda não achei uma forma boa de fazer. Mas se você já souber oque precisa cadastrar, previamente, sem intervenção do usuário, a não ser a seleção das fotos, basta você enviar 'por aqui': post_params: {"PHPSESSID" : "<?php echo session_id(); ?>, 'id': '14', 'nome': 'William'"}, // parâmetros extras. Vai chegar um $_POST dessas informações no teu 'controlador' que faz o upload. Compartilhar este post Link para o post Compartilhar em outros sites
Estaleiro 0 Denunciar post Postado Fevereiro 20, 2010 A única pergunta é: 'De onde virão' essas outras 2 informações ? Se você precisar que o usuário digite elas no momento de envio da foto, vou te confessar, que também ainda não achei uma forma boa de fazer. Mas se você já souber oque precisa cadastrar, previamente, sem intervenção do usuário, a não ser a seleção das fotos, basta você enviar 'por aqui': post_params: {"PHPSESSID" : "<?php echo session_id(); ?>, 'id': '14', 'nome': 'William'"}, // parâmetros extras. Vai chegar um $_POST dessas informações no teu 'controlador' que faz o upload. Pois então, é bem isso mesmo, o usuário teria que passar as informações através de dois select onde os dados são puxados do mysql, na verdade é uma galeria, onde cada galeria tem um cliente e uma categoria, os selects são para informar ao sistema em qual galeria e em qual cliente as fotos irão aparecer! Tava pensando em mudar a estrutura dela, cadastrar primeiro os dados e passar via GET e depois cadastrar as fotos puxando da url os dados que eu não consigo passar pelo plugin. Não sei o que vcs acham? Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Fevereiro 20, 2010 Acho interessante.. mas a modelagem é que ficou bem estranha... você vai ter várias linhas da tabela com as mesmas informações !! veja sobre 'normalização de dados'. Cadastrar um 'idGaleria', 'nomeArquivo'.. é bem melhor doque cadastrar 'nomeCliente', 'categoriaGaleria', 'nomeArquivo'... Compartilhar este post Link para o post Compartilhar em outros sites
Estaleiro 0 Denunciar post Postado Fevereiro 23, 2010 Acho interessante.. mas a modelagem é que ficou bem estranha... você vai ter várias linhas da tabela com as mesmas informações !! veja sobre 'normalização de dados'. Cadastrar um 'idGaleria', 'nomeArquivo'.. é bem melhor doque cadastrar 'nomeCliente', 'categoriaGaleria', 'nomeArquivo'... Dae William dei uma olhada sobre normalização de dados, e realmente meu código tava bem estranho (rsrs) dei uma reformulada nele e tirei alguns dados desnecessarios. Consegui fazer o upload das fotos passando somente o id da galeria, fiz o seguinte, para cadastrar as fotos numa determinada galeria, eu criei uma página só com as galerias cadastradas no sistema e para cadastrar as fotos o usuário clica na galeria desejada e esse link da galeria envia o id via método get, dae eu só passo ela pelo paramero do swfupload. Gostaria de agradecer a ajuda e a sugestão de todos! não é a toa que esse é o melhor forum da net! Missão cumprida! http://forum.imasters.com.br/public/style_emoticons/default/clap.gif http://forum.imasters.com.br/public/style_emoticons/default/joia.gif http://forum.imasters.com.br/public/style_emoticons/default/joia.gif Abrçs Compartilhar este post Link para o post Compartilhar em outros sites