Fóruns sobre PHP, JavaScript, HTML, MySQLi, jQuery, Banco de Dados, CSS


Moderador: web

 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1309
Sexo: Masculino

update múltiplas imagens

15-07-2011 12:28

Olá! Estou tendo dificuldade em mandar nomes de arquivos de fotos para o banco de dados através de update. A inserção é de 5 fotos ao mesmo tempo:

<input type=\"file\" name=\"foto[]\" id=\"foto1\"> <input type=\"file\" name=\"foto[]\" id=\"foto2\"> <input type=\"file\" name=\"foto[]\" id=\"foto3\"> <input type=\"file\" name=\"foto[]\" id=\"foto4\"> <input type=\"file\" name=\"foto[]\" id=\"foto5\">

Todas as fotos têm o mesmo nome, mas ao final de cada uma quero que se acresça um algarismo, de 1 a 5, sucessivamente, antes do sufixo (.jpg).

Este é o código que forma o nome do arquivo:

$nome_foto = $_POST["anuncio"]."_".$dia.$mes.$ano.$hora.$minuto.$segundo.$ip.$i.$quebra[0].".jpg"; 

Para se enviarem os nomes dos arquivos de forma individualizada há este código:

$nome[$i]=$nome_foto; $i++; 

E este é o código do update:

$up=mysql_query("UPDATE $tabela SET foto1='".$nome[1]."', foto2='".$nome[2]."', foto3='".$nome[3]."', foto4='".$nome[4]."', foto5='".$nome[5]."' WHERE AnuncioID=".$_POST["anuncio"]); 

Ocorre que os nomes dos arquivos não estão indo para o banco de dados. Se AnuncioID é 33, não vai para o bd o nome completo da foto, com tudo o que está lá atrás, mas apenas um algarismo 3 em cada campo de foto. Aquela parte do incremento está correta? As fotos vão para o diretório normalmente. O problema está na inserção do nome das fotos no banco de dados. Um abraço.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17736
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

update múltiplas imagens

15-07-2011 14:13

Trabalha com arrays.

Cria o array

$fotos = Array(); 

Onde você pega o nome das fotos, deixa assim

$fotos[] = "foto..."; 

Depois usa o índice para exibir o nome da foto, e armazenar no bd

echo $fotos[0]; // foto1 echo $fotos[1]; // foto2.... 

0
A melhor hospedagem para o seu site HostGator!
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1309
Sexo: Masculino

update múltiplas imagens

15-07-2011 14:47

Cara, é o que eu estou tentando. Mas não sei fazê-lo:

$string = $nome_foto; //$string = "joão, maria, josé, pedro"; $array  = explode(',', $string); print_r($array); echo "<br>"; 

0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17736
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

update múltiplas imagens

15-07-2011 15:31

Como você pega o nome de cada foto upada, é por foreach, correto?

Se sim, dentro do foreach é que você irá estar jogando o nome do documento dentro do array.

A estrutura seria assim da página que pega as fotos

// cria o array aqui, como indiquei foreach(... // armazena cada imagem em um índice do array } 

Aqui, seu insert vai seguir a ordem que indiquei,

fotos[0], fotos[1]...
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1309
Sexo: Masculino

update múltiplas imagens

15-07-2011 19:18

Está dentro de um for. Veja o código:

$uploaddir = "../../$diretoriofotos/"; $qts = count($_FILES['foto']['name']); $i=1; for($indice=0; $indice < $qts; $indice++){ $uploadfile = $uploaddir.$_FILES['foto']['name'][$indice]; if(move_uploaded_file($_FILES['foto']['tmp_name'][$indice], $uploadfile)) { $imagemC = $uploadfile; $imagemN = $_FILES['foto'][$indice]; $quebra = explode(".",$imagemN); $servertime = time(); //Dados que formam o nome do arquivo $dia = date("d", ($servertime)); //dia do upload $mes = date("m", ($servertime)); //mês do upload $ano = date("y", ($servertime))+2000; //ano do upload $hora = date("H", ($servertime)); //hora do upload $minuto = date("i", ($servertime)); //minuto do upload $segundo = date("s", ($servertime)); //segundo do upload $ip = str_replace(".", "", $_SERVER['REMOTE_ADDR']); //ip da máquina de quem está upando //Forma o nome do arquivo $nome_foto = $_POST["anuncio"]."_".$dia.$mes.$ano.$hora.$minuto.$segundo.$ip.$i.$quebra[0].".jpg"; $caminho = $uploaddir.$nome_foto; $img = imagecreatefromjpeg($imagemC); //Redimensiona a imagem para medidas padrão (a altura corresponde a 75% da largura) $ThumbImagem = imagecreatetruecolor(640,480); //medida do redimensionamento, se for alterar medidas, altere nesta linha e na de baixo  imagecopyresampled($ThumbImagem, $img , 0 , 0 , 0 , 0 , 640 , 480, imagesX( $img ) , imagesY( $img )); imagejpeg($ThumbImagem, $caminho); unlink($uploadfile); $nome[$i]=$nome_foto; $i++; }//fecha if(move_uploaded_file... }//fecha for($indice=0; $indice < $qts; $indice++){ $up=mysql_query("UPDATE $tabela SET foto1='".$nome[1]."', foto2='".$nome[2]."', foto3='".$nome[3]."', foto4='".$nome[4]."', foto5='".$nome[5]."' WHERE AnuncioID=".$_POST["anuncio"]); echo ("<script>location.href='ConfereCadastrarAnuncioParcial_Admin.php?AnuncioID=$_POST[anuncio]'</script>"); 

Tem $i e $indice. E o update está fora do for. Deve estar fora ou dentro?
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17736
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

update múltiplas imagens

15-07-2011 19:22

Eu não entendi porque usou o UPDATE dentro do for, deveria estar fora.

Já o nome da imagem, $nome_foto, deve estar sendo gerado dentro de um laço, então no laço é que você vai adicionar o nome da foto ao array

$fotos[] = $_POST["anuncio"]."_".$dia.$mes.$ano.$hora.$minuto.$segundo.$ip.$i.$quebra[0].".jpg";

Como indiquei, cria o array antes do for, ai no UPDATE você pega os valores como indiquei.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1309
Sexo: Masculino

update múltiplas imagens

15-07-2011 20:36

Apenas acrescentando: se dou um echo em $nome_foto, aparece isso:

38_150720112028001270011.jpg 38_150720112028011270012.jpg 38_150720112028021270013.jpg 38_150720112028031270014.jpg 38_150720112028041270015.jpg


Pode ver que são os mesmos nomes de arquivo, e, ao final de cada, um há um número de 1 a 5 (5 fotos inseridas simultaneamente), respectivamente. Estou pesquisando sobre a array, conforme você referiu. Fiz isso, mas dei echo e não aparece nada:

$Fotos = array($nome_foto); echo $Fotos[1]; echo "<br>"; echo $Fotos[2]; echo "<br>"; echo $Fotos[3]; echo "<br>"; echo $Fotos[4]; echo "<br>"; echo $Fotos[5]; echo "<br>"; 


Não se teria de trabalhar com explode, também? Passei manhã e tarde tentando arrumar isso. E pelo jeito vai a noite toda, também.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17736
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

update múltiplas imagens

15-07-2011 21:23

Em um dos posts eu te mostrei como fazer. Você deve criar o array

$fotos = Array(); 

Isso é fora de qualquer laço

Quando você cria o array, você tem que adicionar os valores

$fotos[] = "foto..."; 

Isso vai dentro do for ou o laço que usa para criar o nome da imagem.

Ai fora você pega os valores. Veja abaixo um script que simulei parecendo o seu script, testa e compara com o seu

<?php $fotos = Array(); for($i = 0; $i < 3; $i++) { $fotos[] = "foto".$i; } echo $fotos[0]."<br>"; echo $fotos[1]."<br>"; echo $fotos[2]."<br>"; ?>

0
A melhor hospedagem para o seu site HostGator!
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1309
Sexo: Masculino

update múltiplas imagens

15-07-2011 21:48

Estou tentando adaptar seu exemplo para meu código e ainda não estou conseguindo.

Fiz isto:

$Fotos = array($nome_foto); print_r($Fotos); echo "<br>";

E resultou nisto:

Array ( [0] => 38_150720112141521270011.jpg ) Array ( [0] => 38_150720112141531270012.jpg ) Array ( [0] => 38_150720112141541270013.jpg ) Array ( [0] => 38_150720112141541270014.jpg ) Array ( [0] => 38_150720112141551270015.jpg )

É um array? Está correto? Por quê os valores dentro dos colchetes são todos zero? Como posso individualizar os valores, como em seu exemplo, para enviar para o bd?
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17736
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

update múltiplas imagens

15-07-2011 22:23

No meu exemplo olha como eu inicio o array

$fotos = Array();

Olha como você está inciando

$Fotos = array($nome_foto);

Você tem que colocar a linha que cria o array fora do if, por exemplo após criar $uploaddir

Como o nome da foto é armazenado em $nome_foto, deveria adicionar o nome a um índice do array

$fotos[] = $nome_foto;

E fora de qualquer for ou if você vai pegar todos os índices do array como indiquei no exemplo. Se você testar o exemplo vai ver.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1309
Sexo: Masculino

update múltiplas imagens

15-07-2011 22:57

Você quis dizer fora do if, mesmo, ou fora do for? Com base em meu código, coloquei $fotos = Array(); fora do for, após $uploaddir, como você sugeriu. Dentro do for, quase antes de fechá-lo (e antes de }//fecha if($_FILES['foto']['name'][0]!=""), eu coloquei $fotos[] = $nome_foto; e após fechar o for eu coloquei echo $fotos[0]."<br>"; echo $fotos[1]."<br>"; echo $fotos[2]."<br>"; echo $fotos[3]."<br>"; echo $fotos[4]."<br>";. Esses echo resultaram nisto:

39_150720112246401270011.jpg 39_150720112246411270011.jpg 39_150720112246421270011.jpg 39_150720112246431270011.jpg 39_150720112246441270011.jpg

O nome do arquivo com o número 1 ao final (o último número 1, pois o penúltimo faz parte do nome da foto. No caso, é o ip do servidor local). Eu gostaria que esse número ao final fosse de 1 a 5, sucessivamente.

O código que você passou tem for. Eu posso usar o de meu código em substituição ao do seu, ou eu uso um for dentro do outro?
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17736
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

update múltiplas imagens

15-07-2011 23:08

A criação do array é no início do script, antes de ter iniciado o processo do upload.

Não entendi porque está pegando nomes iguais da foto no array. Já que está usando o $i para incrementar.

Como indiquei, o array para capturar o nome deve estar logo após criar o $nome_foto

Você tem que identificar ai se o incremente no nome da foto está sendo feito, verificando na pasta que recebe as fotos.

Agora a parte do adicionar o nome da foto no array eu não estou vendo se é dentro do for ou do if move_upload_file. Você tem que ver ai porque não sei a condição que você criou no script.
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1309
Sexo: Masculino

update múltiplas imagens

16-07-2011 00:05

O incremento das fotos está sendo feito, pois elas estão indo para o diretório com os números finais de 1 a 5. Vou fazer uma pausa, e pela manhã reexaminarei o código com suas sugestões. Obrigado pela força.
0
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1309
Sexo: Masculino

update múltiplas imagens

16-07-2011 05:44

Estou continuando a procurar o erro. Com as alterações que fiz acima, com sua sugestão, as fotos estão indo para a pasta todas com o número 1 ao final. Mas há um consolo: os nomes delas estão indo para o bd, o que não ocorria. Vou ver a questão do incremento.

Desculpe por insistir nisto: $Fotos = array($nome_foto);. Como te falei, utilizei print_r($Fotos); echo "<br>"; e mostrou que está armazenando os nomes de todas as fotos enviadas, cada qual com os números de 1 a 5 ao final, sucessivamente (veja acima o resultado). Não há como eu utilizar esses valores mostrados como armazenados para enviar para o bd?
0
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1309
Sexo: Masculino

update múltiplas imagens

16-07-2011 06:24

Cara, substituí o for de meu código (for($indice=0; $indice < $qts; $indice++){) pelo do seu exemplo (for($i = 0; $i < 6; $i++){). Não sei se estou certo, mas como são 5 fotos a enviar, coloquei $i < 6. O que estava como $indice troquei por $i. Nomes das fotos estão indo para o bd e as fotos para a pasta já com números diferentes ao final. Mas o update abaixo não está mandando para o bd a foto 5:

$up=mysql_query("UPDATE $tabela SET foto1='".$fotos[1]."', foto2='".$fotos[2]."', foto3='".$fotos[3]."', foto4='".$fotos[4]."', foto5='".$fotos[5]."' WHERE AnuncioID=".$_POST["anuncio"]);

O que está se confirmando pelo echo, que não exibe o nome referente à foto 5:

echo $fotos[1]."<br>"; echo $fotos[2]."<br>"; echo $fotos[3]."<br>"; echo $fotos[4]."<br>"; echo $fotos[5]."<br>"; 31_160720110605441270011.jpg 31_160720110605451270012.jpg 31_160720110605451270013.jpg 31_160720110605461270014.jpg

E as fotos estão indo para a pasta assim:

31_160720110605441270010.jpg 31_160720110605441270011.jpg 31_160720110605451270012.jpg 31_160720110605451270013.jpg 31_160720110605461270014.jpg

Ou seja, os nomes das fotos vão para o bd com números de 1 a 4 ao final (4 fotos), mas os arquivos vão para a pasta com números de 0 a 4 ao final (5 fotos). O que pode estar errado? (Este post mostra que houve avanço nas tentativas. Para não ficarem posts seguidos, se quiser, exclua os meus posts seguintes ao do seu exemplo que citei neste, e exclua o conteúdo destes parêntesis)
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17736
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

update múltiplas imagens

16-07-2011 11:17

O array sempre começa no índice 0, ou seja, se são 5 fotos, será:

0, 1, 2, 3, 4
0
A melhor hospedagem para o seu site HostGator!

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado