Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Código expresso, enviar vários arquivos para o servidor (hmm; "upload").
<!doctype html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<title>Upload</title>
</head>
<body>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.5.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
var i = 0;
$('#add').live('click', function (){
if (i < 4)
$('form').append('<input type="file" name="files[]" id="files[]" /><br />');
i ++;
});
});
</script>
<div>
<form method="POST" enctype="multipart/form-data">
<h1>Upload</h1>
<input type="file" name="files[]" id="files[]" />
<input type="button" id="add" value="+">
<input type="submit" value="Enviar" />
</form>
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$files = $_FILES['files'];
$directory = 'uploads/';
for($i = 0, $c = count($files); $i <= $c; ++ $i) {
$upload = move_uploaded_file(
$files['tmp_name'][$i],
$directory . $files['name'][$i]
);
}
}
?>
</div>
</body>
</html>
Hugs!
Muito bom, porém como ficaria para adicionar apenas imagens e salvar na BD?
Muito bom, porém como ficaria para adicionar apenas imagens e salvar na BD?
Você nesse caso precisa validar a extensão do arquivo, a própria variável global $_FILES possui o nome do arquivo e o time MIME dele, eu faço da seguinte forma:
<?php
/ Array com extensões permitidas /
$arr_extensoes = array('jpg', 'png', 'gif', 'bmp', 'svg');
$var_file = $_FILES['img']['name'];
/ O array pop remove o ultimo elemento e o retorna /
$extensao = array_pop(explode('.', $var_file));
$nome = implode('.', $var_file);
/ Validando a extensão /
if(!array_search($extensao, $arr_extensoes){
echo "Extensão inválida!";
}
?>
Peço desculpas se não poderia tirar a dúvida dele aqui, mais qualquer coisa é só mudar de local
Legal o post do Andrey Knupp Vital; as considerações do fernandotholl também foram show de bola.
Se me permitem, gostaria também de dar uma contribuição... opinando sobre como gravar no BD, como nosso amigo CrazyLOL perguntou.
>
CrazyLOL, on 09 Jan 2013 - 21:20, said:/applications/core/interface/imageproxy/imageproxy.php?img=http://forum.imasters.com.br/public/style_images/imasters/snapback.png&key=6a3defb3ddfa4707bd3caf2215b9b0453897f0a9e12e14703b4613034cf50000" alt="snapback.png" />
Muito bom, porém como ficaria para adicionar apenas imagens e salvar na BD?
Sugiro que se você gravar as imagens no banco, faça-o armazenando-as numa pasta, e gravando os nomes dos arquivos no banco; na aplicação, onde elas forem exibidas, o PHP busca o caminho/resultado_da_query no banco.
Não aconselharia gravação das imagens inseridas dentro do Banco. A não ser que o conteúdo destas seja de alguma maneira restrito. Para ilustrar: aqui na empresa onde trabalho tenho uma intranet rodando; esta intranet possui acesso individual para cada colaborador, que por sua vez, tem acesso restrito única e exclusivamente aos seus holerites de pagamento. Como os holerites estão armazenados no banco, e o PHP que faz as pesquisas e consultas para puxar os arquivos da base e montá-los na hora, não existe risco de alguém procurar, tentar e acabar abrindo o holerite de outro colega. Se armazenasse um a um numa pasta, aí sim, teria este risco. Então é importante avaliar como será a gravação destes arquivos no banco; se não houver necessidade, gravar o nome do arquivo ao invés da imagem ou do arquivo propriamente dito, para evitar que com o tempo, com o volume de informações crescente, o banco torne-se lento ao ser acessado pelas aplicações.
Abraços.
Eu gostei muito dessa solução do Andrey Knupp Vital andei googlando pela net áfora por algumas vezes e nunca encontrei o que queria que era:
Fazer upload de imagens com php em 1 input só, onde a pessoa escolhe as imagens e simplesmente clica em 'postar' ou 'enviar' de acordo com o caso...
O meu problema era na hora de fazer o upload no php, que mandava 1 arquivo só, coisa que tentaram resolver na net áfora, mais colocando vários input file e escolhendo arquivo por arquivo.
eu peguei o código do andrey Knupp Vital:
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$files = $_FILES['files'];
$directory = 'uploads/';
for($i = 0, $c = count($files); $i <= $c; ++ $i) {
$upload = move_uploaded_file(
$files['tmp_name'][$i],
$directory . $files['name'][$i]
);
}
}
?>
E fiz algumas alterações básicas pra enviar os arquivos sem o uso do jquery:
<meta charset="UTF-8">
<form method="POST" enctype="multipart/form-data">
<h1>Upload</h1>
<label style="font-weight:bold;"> Fotos: </label>
<input type="file" name="files[]" id="files" multiple="multiple" />
<input type="submit" id="enviar" value="Enviar" />
</form>
<?php
echo '<p style="font-size:22px;">
';
$dir = 'ups/';
$fotos = $_FILES["files"];
$foto = count($fotos)-1;
for($i = 0; $i <= $foto; $i++) {
if(@move_uploaded_file($fotos['tmp_name'][$i], $dir . $fotos['name'][$i])) {
echo 'Foto: ' . $fotos["name"][$i] . ' - Tamanho: ' . $fotos["size"][$i] . ' kb - <b style="color:#CD0;">OK</b><BR /> ';
}
}
echo '</p>';
?>
Com isso, eu consigo fazer o upload usando apenas o php, coisa que alguns meses atrás eu vi em alguns sites dizendo que era impossível fazer, que tinha que usar FlashPlayer e(ou) Javascript(Jquery) ou outros métódos.
Obs: Eu deixei só o básico no código pra que todo mundo possa usá-lo e incrementar da forma que quizer.
Tanks andrey Knupp Vital pela dica de ouro...
perfeito