Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Montei uma página com formulário NÃO ajax, mas com um sistema de envio de múltiplas imagens COM Ajax (Jquery).
Funciona mel na chupeta quando o registro já existe, ele pega o id do banco de dados e salva as imagens corretamente (movendo para a pasta de destino e inserindo no mysql), mas quando os dados ainda não foram salvos que é o problema.
Para entender melhor:
Eu abro o formulário para inserir um novo registro (de veículos), adiciono o modelo, a cor, o ano, a marca... enfim tudo... e ai em baixo tem o script para enviar as imagens (ele envia as imagens para o PHP, que trata e salva na pasta e no banco de dados via ajax/jquery)
A grande questão é (e vocês já devem imaginar):
Como eu vou salvar os registro no mysql quando eles ainda não existem, como devo fazer para manter as imagens temporariamente no servidor, até a página ser salva e se não for (se sair da página, fechar a janela do navegador, cair a internet...), as imagens devem ser removidas correto?
Como Fazer para o PHP manter estas imagens temporariamente no servidor até o formulário ser enviado e ai sim, salvar no mysql e mante-las definitivamente lá (ou alguém remover o registro...)
Isso é possível, ou terei que escrever uma rotina via cron, para checar se a imagem deve ser mantida?
Opa Evandro,
Sei que já faz um tempo, mas me lembrei que tinha postado aqui e vim para informar como resolvi minha questão, a resposta do Evandro Oliveira me ajudou a raciocinar então:
01 - Para armazenar algo em seção precisamos que seja texto, então descobri que a biblioteca Gd do php transforma iamgens em texto binário, e como já usava a WideImage, ficou mais fácil ainda.
//pega a imagem enviada e carrega com o wideimage
$img = wiImage::loadFromFile($_FILES['Filedata']['tmp_name']);
//transforma a imagem em texto (string) e guarda na variável $img
$img = $img->asString($ext);
//pego o nome da imagem
$nome=$_FILES['Filedata']['name'];
//crio um array com isso (note o nome tem um s no final para diferenciar de img)
$imgs =array(
'nome'=>$temp,
'arquivo'=>$img
);
// e aplico na seção mantendo o [] para criar um novo nó no array
$_SESSION['arquivo'][] = $imgs ;
//pronto.. agora só chamo esse array com foreach quando a página for salva
//e após terminar um unset($_SESSION['arquivo']) para remover as
//imagens salvas na seção e liberando memória
//
//a wideimage também carrega a imagem depois com
//wiImage::loadFromString('a string da imagem aqui');
//e podemos redimensionar, mudar cor, e aplicar efeitos da wideimage
//e salvar a imagem em uma pasta do servidor quando terminarmos
//o site da wideimage: wideimage.sourceforge.net
//e um tutorial legal pra começar a entender:
//http://blog.thiagobelem.net/manipulando-imagens-no-php/
Espero que esteja bem explicado, e temos que tomar cuidado para remover as imagens também quando o usuário for para outra página, por exemplo.
Obrigado Evandro Oliveira pela orientação!!!!!
Erik
>
Montei uma página com formulário NÃO ajax, mas com um sistema de envio de múltiplas imagens COM Ajax (Jquery).
Funciona mel na chupeta quando o registro já existe, ele pega o id do banco de dados e salva as imagens corretamente (movendo para a pasta de destino e inserindo no mysql), mas quando os dados ainda não foram salvos que é o problema.
Para entender melhor:
Eu abro o formulário para inserir um novo registro (de veículos), adiciono o modelo, a cor, o ano, a marca... enfim tudo... e ai em baixo tem o script para enviar as imagens (ele envia as imagens para o PHP, que trata e salva na pasta e no banco de dados via ajax/jquery)
A grande questão é (e vocês já devem imaginar):
Como eu vou salvar os registro no mysql quando eles ainda não existem, como devo fazer para manter as imagens temporariamente no servidor, até a página ser salva e se não for (se sair da página, fechar a janela do navegador, cair a internet...), as imagens devem ser removidas correto?
Como Fazer para o PHP manter estas imagens temporariamente no servidor até o formulário ser enviado e ai sim, salvar no mysql e mante-las definitivamente lá (ou alguém remover o registro...)
Isso é possível, ou terei que escrever uma rotina via cron, para checar se a imagem deve ser mantida?
Cria uma sessão pro cara, salva as imagens com um nome temporário baseado na sessão. Quando terminar de registrar o veículo, renomeia as imagens e insere no BD.
Dependendo da modelagem, você pode, também, já registrar as imagens no BD e, quando registrar o veículo, apenas fazer o de-para no banco.
Veja que, nesse caso, a chave estrangeira permite que o valor seja nulo. Assim salvamos as imagens temporárias
insert into fotos values (null, '/var/www/fotos/abc123xyz.jpg', null);
E, depois de cadastrar um veículo, atualizamos essas fotos
update fotos set veiculo = 1 where id in (1, 2, 3, 4);