Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde, estou com um problema e gostaria se possível da ajuda de vocês.
Estou fazendo um upload de fotos. Estou utilizando um método que utiliza o dropdown do html5 com jquery.
Esse é o código do dropdown que recebe as fotos. Nessa mesma página, pelo GET eu recebo o ID do álbum ao qual eu gostaria de inserir as fotos.
<section>
<div id="dropbox">
<span class="message">Arraste suas imagens aqui para upload. <br /><i>(Elas ficarão visíveis somente para você)</i></span>
</div>
</section>
O dropdown através do filedrop.js e script.js aciona o arquivo upload.php que tem o seguinte código.
<?php
$diretorio = "../uploads/";
$arq_perm = array('jpg','jpeg','png','gif');
if(strtolower($_SERVER['REQUEST_METHOD']) != 'post'){
exit_status('Erro! Método HTTP errado!');
}
if(array_key_exists('pic',$_FILES) && $_FILES['pic']['error'] == 0 ){
$imagem = $_FILES['pic'];
if(!in_array(get_extension($imagem['name']),$arq_perm)){
exit_status('Apenas arquivos dos tipos '.implode(',',$arq_perm).' são permitidos!');
}
if(move_uploaded_file($imagem['tmp_name'], $diretorio.$imagem['name'])){
exit_status('Upload concluído com sucesso!');
}
}
exit_status('Aconteceu algum problema com o upload!');
function exit_status($str){
echo json_encode(array('status'=>$str));
exit;
}
function get_extension($file_name){
$ext = explode('.', $file_name);
$ext = array_pop($ext);
return strtolower($ext);
}
?>
O que eu quero, é passar o ID que tenho por GET na página do dropdown, para o arquivo upload.php, eu só não sei como fazer isso. Ou alguma outra maneira de passar esse ID, para que eu possa inserir no banco as imagens, e salvar em um diretório específico com o nome do ID.
Obrigado.
mangakah... eu ainda estou no começo, desculpa a ignorancia... esse código eu vou chamar no arquivo onde está sendo arrastado os arquivos ? se sim, de que forma o arquivo upload.php recebe essa variavel ?
em "data: { id:" eu tenho que dar um <?php echo ?> ou basta passar a $variavel ?
você pode especificar o metodo do ajax com
type: "POST",
e no PHP você pegaria assim:
$id = $_POST['id'];
>
mangakah... eu ainda estou no começo, desculpa a ignorancia... esse código eu vou chamar no arquivo onde está sendo arrastado os arquivos ? se sim, de que forma o arquivo upload.php recebe essa variavel ?
em "data: { id:" eu tenho que dar um <?php echo ?> ou basta passar a $variavel ?
Primeiro, você tem que localizar no seu script .js onde está a chamada para o arquivo upload.php, e nessa função você deve adicionar o parâmetro data com os dados que você quer passar.
E sim, você tem que usar o echo. Lembre-se que PHP é processado no servidor, enquanto JavaScript é processado no navegador, as duas linguagens não interagem entre si.
mangakah... to passando a entender..rsrs.. como eu disse ainda estou iniciando, e preciso entender mais a questão do backend, frontend....
Abaixo estou passando o código js do meu script, se possível gostaria que desse uma olhada, logo no começo estou declarando da forma como você mencionou, se possível, vejá se está declarao corretamente, e no lugar certo.
Como vou obter o resultado de $idAlb no arquivo upload.php. ?
Obrigado e desculpe a falta de conhecimento, rsrs.
$(function(){
var dropbox = $('#dropbox'),
message = $('.message', dropbox)
$.ajax({
url: "upload.php",
data: { id: <?php echo $idAlb; ?>},
success: function(data){
$('#resultado').append(data);
}
});
dropbox.filedrop({
paramname:'pic',
maxfilesize: 2,
url: 'upload.php',
dragOver:function(){
$('#dropbox').addClass('over');
},
uploadFinished:function(i,file,response){
$.data(file).addClass('done');
},
error: function(err, file) {
switch(err) {
case 'BrowserNotSupported':
showMessage('Seu browser não suporta o upload via HTML5! Baixe outro navegador, como o Google Chrome por exemplo.');
break;
case 'TooManyFiles':
alert('Muitos arquivos! Por favor, selecione no máximo 5 imagens!');
break;
case 'FileTooLarge':
alert(file.name+' é muito grande! Por favor, selecione arquivos de até 2mb.');
break;
default:
break;
}
},
beforeEach: function(file){
if(!file.type.match(/^image\//)){
alert('Apenas imagens são permitidas');
return false;
}
},
uploadStarted:function(i, file, len){
createImage(file);
},
progressUpdated: function(i, file, progress) {
$.data(file).find('.progress').width(progress);
}
});
var template = '<div class="preview">'+
'<span class="imageHolder">'+
'<img />'+
'<span class="uploaded"></span>'+
'</span>'+
'<div class="progressHolder">'+
'<div class="progress"></div>'+
'</div>'+
'</div>';
function createImage(file){
var preview = $(template),
image = $('img', preview);
var reader = new FileReader();
image.width = 100;
image.height = 100;
reader.onload = function(e){
image.attr('src',e.target.result);
};
reader.readAsDataURL(file);
message.hide();
preview.appendTo(dropbox);
$.data(file,preview);
}
function showMessage(msg){
message.html(msg);
}
});Se esse ID não for um número, você deve passá-lo entre aspas ou o navegador -- que interpreta o JavaScript -- irá confundi-lo com o nome de uma variável e vai retornar erro:
data: { id: "<?php echo $idAlb; ?>"},
Se tudo estiver certo, quando o ajax for executado e requisitar o arquivo upload.php o valor do id estará em $_GET['id'].mangakah... eu resolvi o problema setando um cookie e recuperando ele na outra página... agradeço sua atenção... abraço!
RafiWskY, posta aí como tu resolveu, estou com o mesmo problema.
Na página onde faço o envio das fotos eu seto um cookie.
setcookie('iddoalbum', $_GET['alb']);
E na página onde eu faço o upload, recupero esse cookie.
$idAlbum = $_COOKIE['iddoalbum'];
Basicamente é isso.
Você está chamando o arquivo upload.php via Ajax, certo? Então é só passar o ID pelo parâmetro 'data':
$.ajax({
url: "upload.php",
// ...
Se você estiver usando $.post ao invés de $ajax, o parâmetro é o mesmo.