Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Chris Martin

como enviar fotos com PHP

Recommended Posts

ooie, tudo bem? estou com uma dúvida, tenho um campo type file que envia múltiplos arquivos, estou querendo saber como faço para enviar eles para o DB com o limite de 8 arquivos, no caso para o DB iria somente o nome, estou usando o seguinte código

<?php
$count= count($_FILES['imv']['name']);
$tb="FOTO_".$cod;
if($count == 1) {
	mysql_query('CREATE TABLE IF NOT EXISTS `.'$tb'.` (
	`id` int(11) NOT NULL AUTO_INCREMENT,
  `foto1` varchar(150) CHARACTER SET utf8 NOT NULL
  ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ');
}elseif ($count == 2) {
	mysql_query('CREATE TABLE IF NOT EXISTS `.'$tb'.` (
`id` int(11) NOT NULL AUTO_INCREMENT,
  `foto1` varchar(150) CHARACTER SET utf8 NOT NULL,
   `foto2` varchar(150) CHARACTER SET utf8 NOT NULL
   ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ');
}elseif ($count == 3) {
	mysql_query('CREATE TABLE IF NOT EXISTS `.'$tb'.` (
`id` int(11) NOT NULL AUTO_INCREMENT,
  `foto1` varchar(150) CHARACTER SET utf8 NOT NULL,
  `foto2` varchar(150) CHARACTER SET utf8 NOT NULL,
  `foto3` varchar(150) CHARACTER SET utf8 NOT NULL
  ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ');
}elseif ($count == 4) {
	mysql_query('CREATE TABLE IF NOT EXISTS `.'$tb'.` (
`id` int(11) NOT NULL AUTO_INCREMENT,
  `foto1` varchar(150) CHARACTER SET utf8 NOT NULL,
  `foto2` varchar(150) CHARACTER SET utf8 NOT NULL,
  `foto3` varchar(150) CHARACTER SET utf8 NOT NULL,
  `foto4` varchar(150) CHARACTER SET utf8 NOT NULL
  ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ');
}elseif ($count == 5) {
	mysql_query('CREATE TABLE IF NOT EXISTS `.'$tb'.` (
`id` int(11) NOT NULL AUTO_INCREMENT,
  `foto1` varchar(150) CHARACTER SET utf8 NOT NULL,
  `foto2` varchar(150) CHARACTER SET utf8 NOT NULL,
  `foto3` varchar(150) CHARACTER SET utf8 NOT NULL,
  `foto4` varchar(150) CHARACTER SET utf8 NOT NULL,
  `foto5` varchar(150) CHARACTER SET utf8 NOT NULL
  ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ');
}elseif ($count == 6) {
	mysql_query('CREATE TABLE IF NOT EXISTS `.'$tb'.` (
`id` int(11) NOT NULL AUTO_INCREMENT,
  `foto1` varchar(150) CHARACTER SET utf8 NOT NULL,
  `foto2` varchar(150) CHARACTER SET utf8 NOT NULL,
  `foto3` varchar(150) CHARACTER SET utf8 NOT NULL,
  `foto4` varchar(150) CHARACTER SET utf8 NOT NULL,
  `foto5` varchar(150) CHARACTER SET utf8 NOT NULL,
  `foto6` varchar(150) CHARACTER SET utf8 NOT NULL
  ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ');
}elseif ($count == 7) {
	mysql_query('CREATE TABLE IF NOT EXISTS `.'$tb'.` (
`id` int(11) NOT NULL AUTO_INCREMENT,
  `foto1` varchar(150) CHARACTER SET utf8 NOT NULL,
  `foto2` varchar(150) CHARACTER SET utf8 NOT NULL,
  `foto3` varchar(150) CHARACTER SET utf8 NOT NULL,
  `foto4` varchar(150) CHARACTER SET utf8 NOT NULL,
  `foto5` varchar(150) CHARACTER SET utf8 NOT NULL,
  `foto6` varchar(150) CHARACTER SET utf8 NOT NULL,
  `foto7` varchar(150) CHARACTER SET utf8 NOT NULL
  ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ');
}elseif ($count == 8) {
	mysql_query('CREATE TABLE IF NOT EXISTS `.'$tb'.` (
`id` int(11) NOT NULL AUTO_INCREMENT,
  `foto1` varchar(150) CHARACTER SET utf8 NOT NULL,
  `foto2` varchar(150) CHARACTER SET utf8 NOT NULL,
  `foto3` varchar(150) CHARACTER SET utf8 NOT NULL,
  `foto4` varchar(150) CHARACTER SET utf8 NOT NULL,
  `foto5` varchar(150) CHARACTER SET utf8 NOT NULL,
  `foto6` varchar(150) CHARACTER SET utf8 NOT NULL,
  `foto7` varchar(150) CHARACTER SET utf8 NOT NULL,
  `foto8` varchar(150) CHARACTER SET utf8 NOT NULL
  ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ');
}
?>

primeiro verifica quantos arquios tem e cria a tabela de acordo com o tamanho, a variável cod vem de outro arquivo externo que cria um código único, pois bem gostaria de saber como alterar o nome de cada arquivo, com um só com o multiple desabilitado eu uso um código que gera nomes com letras e números, queria saber se dá para usar aqui tbm.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para começo de conversa, essa sua modelagem é totalmente errada, criar tabelas para cada upload? Pior que isto, criar tabelas com várias colunas? Isto contradiz o básico da modelagem...

 

Sobre o upload, tem que ver como exatamente isto chega no PHP.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas eu preciso que cada upload crie uma tabela com a quantidade exata, pq eu criei uma com 8 linhas mas e ai, se a pessoa mandar só um arquivo o que faço?

 

ali em linha eu quis dizer coluna

Compartilhar este post


Link para o post
Compartilhar em outros sites

E ai que a sua ideia é totalmente errada... solução básica, duas tabelas, uma com a informação do upload (nome ou sei lá o que) e a outra com os itens, que no caso são os nomes dos arquivos, neste segunda tabela você joga o ID da primeira e pronto...

Compartilhar este post


Link para o post
Compartilhar em outros sites

pois, é, já fiz isso, mas não estava sabendo manipular como deveria, agora aprendi relacionamento de tabelas agora ta de boa, coloquei uma tabela para as fotos com os campos id id_rel foto1 etc ai eu consegui, mas continuarei usando o if, na hora de salvar apenas, que ai se tiver 1 arquivo, eu mando ele para foto1 e os outros eu mando algo como "não"

 

 

bem, minha dúvida ainda não foi sanada, eu quero saber como eu faço para manipular múltiplos arquivos, como dar nome único e colocar o nome dele depois de alterado com extensão e tudo para o db. eu tenho um código que faz isso, muda nome, coloca na pasta e envia o nome para o banco de dados, mas eu quero saber como fazer com muitos arquivos

Compartilhar este post


Link para o post
Compartilhar em outros sites

Conforme eu falei no post #2 "tem que ver como exatamente isto chega no PHP."... dá um print_r no $_FILES e posta aqui pra gente ver a estrutura.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz exatamente como falou, e tive um array com vários outros arrays como retorno:

Array ( [imv] => Array ( [name] => Array ( [0] => euoo.jpg [1] => mano opa.jpeg [2] => teste.jpeg ) [type] => Array ( [0] => image/jpeg [1] => image/jpeg [2] => image/jpeg ) [tmp_name] => Array ( [0] => /tmp/phpppAPGv [1] => /tmp/php8Bk29F [2] => /tmp/phpTPNfDQ ) [error] => Array ( [0] => 0 [1] => 0 [2] => 0 ) [size] => Array ( [0] => 57645 [1] => 9365 [2] => 11606 ) ) )

Compartilhar este post


Link para o post
Compartilhar em outros sites

Basta adaptar o que você já tem ai:

foreach($_FILES['imv']['name'] as $indice=>$arquivo){
    echo 'arquivo '.$arquivo;
    echo '<br />arquivo a ser movido no servidor: '.$_FILES['imv']['tmp_name'][$indice];
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

o processo de adaptação está bem arduo, pode ser que esteja errado, mas veja só:

<?php
$pasta = '../images';
$t = time();
$arq = $_FILES['imv'];
$arqNome = $_FILES['imv']['name'];
$arqTmp = $_FILES['imv']['tmp_name'];
$ext = strtolower(end(explode('.', $arqNome)));
$nf = $t.'-'.$data.'.'.$ext;
$destino = $pasta."/".$nf;

foreach ($arq as $indice => $arquivo) {
echo $nf; //o echo está aqiu, pq eu preciso saber se está certo as informações
echo $destino;
}
?>

porém, está me retornando este erro: Warning: end() expects parameter 1 to be array, null given

explode() expects parameter 2 to be string, array given

e depois mostra o nome dos arquivos: 1425227833-.../images/1425227833-.1425227833-.../images/1425227833-.1425227833-.../images/1425227833-.1425227833-.../images/1425227833-.1425227833-.../images/1425227833-.

sem a extensão.

​obs.: ainda não defini a variável data, pois o que importa agora é a extensão.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.