Ir para conteúdo

POWERED BY:

Arquivado

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

Jean Martins

criação de album com upload de varias imagens

Recommended Posts

Olá galera!

 

Estou criando um sistema de cadastro de fotos. Essas fotos serão subdivididas por categoria e dentro de cada categoria album de fotos com 5 fotos.

Desenvolvi aqui mas nao está dando certo, queria um auxilio. vou postar o codigo:

 

banco de dados:

 

Id_album int(11) auto increment

nome_album varchar(255)

foto_1 char(100)

foto_2 char(100)

foto_3 char(100)

foto_4 char(100)

foto_5 char(100)

Id_ambiente int(11)

 

form para upload: cad_album_foto.php

<form id="cadastro" name="album" enctype="multipart/form-data" method="post" action="cadastra_album_foto.php">
			 	<fieldset class="fieldset_cad">
	  				  <label for="Ambiente" class="label_campo_cad"><span class="span_campo_cad">Ambiente:</span>
					  <select name="Id_ambiente" class="input_campo_cad">
					  <?
					  		require_once("conexao.php");

							//Consulta com a tabela
							//Selecione tudo de nomedatabela em ordem crescente pelo nome 
							$consulta=mysql_query("SELECT *FROM ambientes order by nome_ambiente ASC"); 


							//Fazendo o looping para exibição de todos registros que contiverem em nomedatabela
							while ($dados = mysql_fetch_array($consulta)) {
							echo("<option value='".$dados['nome_ambiente']."'>".$dados['nome_ambiente']."</option>");
							}
							
							?>
				      </select>
  	   		    </label>
					 <label for="nome_album" class="label_campo_cad"><span class="span_campo_cad">Nome do Album:</span>
	  				  <input name="nome_album" type="text" class="input_campo_cad" id="nome_album" value="" />
			    </label>  
				     <label for="foto_1" class="label_campo_cad"><span class="span_campo_cad">Foto 1:</span>
				     <input type="file" name="foto[]" class="input_campo_cad" />
				     </label>
					  <label for="foto_2" class="label_campo_cad"><span class="span_campo_cad">Foto 2:</span>
				     <input type="file" name="foto[]" class="input_campo_cad" />
				     </label>
					 <label for="foto_3" class="label_campo_cad"><span class="span_campo_cad">Foto 3:</span>
				     <input type="file" name="foto[]" class="input_campo_cad" />
				     </label>
					 <label for="foto_4" class="label_campo_cad"><span class="span_campo_cad">Foto 4:</span>
				     <input type="file" name="foto[]" class="input_campo_cad" />
				     </label>
					 <label for="foto_5" class="label_campo_cad"><span class="span_campo_cad">Foto 5:</span>
				     <input type="file" name="foto[]" class="input_campo_cad" />
				     </label>
					 <button type="submit" class="button_cad"><span></span></button>
				</fieldset>	 
      </form>

 

pagina de validação: cadastra_album_foto.php

<?

$ambiente = $_POST['Id_ambiente'];
$nome_album = $_POST['nome_album'];
$foto = $_POST['foto'][];



/* validacao de arquivo enviado pelo usuario */
if($nome_album=="") {

 echo "É preciso cadastrar um album";
 
 }
 
 else {
 
 	$busca_album = "select * from album where nome_album = \"$nome_album\"";
		$resultado_album = mysql_query($busca_album, $con);
		$num_rows_album = mysql_num_rows($resultado_album);
		
		if($num_rows_album>=1) {
			
			echo "Este album já está cadastrado";
		}
		
		else {

// definir paramentros de teste

$tamanho_maximo = 100000; //em bytes
$tipos_aceitos = array("image/jpeg","image/x-png");

//validar o arquivo enviado

$arquivo = $_FILES['foto'];
if($arquivo['error'] != 0){

echo "Erro no upload do arquivo!";

switch($arquivo['error']){

	case UPLOAD_ERR_INI_SIZE:
			echo "O arquivo excede o tamanho máximo permitido";
			break;
	case UPLOAD_ERR_FORM_SIZE:
			echo "O arquivo enviado é muito grande";
			break;
	case UPLOAD_ERR_PARTIAL:
			echo "O upload não foi completo";
			break;
	case UPLOAD_ERR_NO_FILE:
			echo "Nenhum arquivo foi informado para upload";
			break;
}
	exit;
}

if($arquivo['size']==0 OR $arquivo['temp_name']==NULL){
	echo "Nenhum aquivo enviado";
	exit;
}

if($arquivo['size']>$tamanho_maximo) {
	echo 'O arquivo enviado é muito grande(Tamanho maximo = ' .$tamanho_maximo . ;
	exit;
}

if(array_search($arquivo['type'], $tipos_aceitos)===FALSE) {

	echo ' O arquivo enviado não é do tipo (' . $arquivo['type'] . ') aceito para upload. Os Tipos aceitos são: ';
		 print_r($tipos_aceitos);
		 exit;
}

//Agora podemos copiar o arquivo 

$destino = 'localhost\\moveis_dourados\\fotos';
$destino .= $arquivo['name'][];

if(move_uploaded_file($arquivo['tmp_name'], $destino)) {

//tudo ok

echo "O arquivo foi carregado com sucesso";

$insere_album = "insert into album values (NULL, \"$nome_album\", \"$foto[]\", \"$Id_ambiente\")";
					$resultado = mysql_query($insere_album, $con);
					
					echo "Cadastro Efetuado";
					
				
					
					mysql_close($con);
}

else{

	echo "Ocorreu um erro durante o upload";
}

}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

$_FILE["foto"] é um array de fotos.

 

Tente:

$arquivos = $_FILES['foto'];

foreach($arquivos as $arquivo)
{
...//aqui, mantenha o mesmo código
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

jaime nao consegui entender o que quer me dizer,desculpe, estou a pouco tempo trabalhando com php.

 

Mudei meus metodos de upload, consegui fazer upoar os arquivos mas agora nao consigo fazer gravar no banco de dados.

 

vou postar o codigo novamente:

 

pagina: cad_album_foto.php

<p>Cadastro de Fotos</p>
	 		 <form id="cadastro" name="album" enctype="multipart/form-data" method="post" action="cadastra_album_foto.php">
			 	<fieldset class="fieldset_cad">
	  				  <label for="Ambiente" class="label_campo_cad"><span class="span_campo_cad">Ambiente:</span>
					  <select name="nome_ambiente" class="input_campo_cad" id="nome_ambiente">
					  <?
					  		require_once("conexao.php");

							//Consulta com a tabela
							//Selecione tudo de nomedatabela em ordem crescente pelo nome 
							$consulta=mysql_query("SELECT *FROM ambientes order by nome_ambiente ASC"); 


							//Fazendo o looping para exibição de todos registros que contiverem em nomedatabela
							while ($dados = mysql_fetch_array($consulta)) {
							echo("<option value='".$dados['nome_ambiente']."'>".$dados['nome_ambiente']."</option>");
							}
							
							?>
				      </select>
  	   		    </label>
					 <label for="nome_album" class="label_campo_cad"><span class="span_campo_cad">Nome do Album:</span>
	  				  <input name="nome_album" type="text" class="input_campo_cad" id="nome_album" value="" />
			    </label>  
				     <label for="foto_1" class="label_campo_cad"><span class="span_campo_cad">Qtde de fotos (max 5):</span>
				     <input name="quantidade" type="text" size="5" class="input_campo_cad" />
				     </label>
					 <button type="submit" class="button_cad"><span></span></button>
				</fieldset>	 
      </form>

pagina: cadastra_album_foto.php

<?
$ambiente = $_POST['nome_ambiente'];
$album = $_POST['nome_album'];


//echo $ambiente;
//echo $album;
//echo $quantidade;

if($album==""){
	echo "favor cadastrar nome do album";
}

else {

	require_once("conexao.php");
	$busca_album = "select * from album where nome_album = \"$album\"";	
	$resultado_album = mysql_query($busca_album, $con);
	$num_rows_album = mysql_num_rows($resultado_album);
		if($num_rows_album>=1){
			echo "ja existe album cadastrado com esse nome";
			
			mysql_close($con);
		}
		
	
		else {
			
			$Quantidade = (isset($_POST['quantidade']) && is_int(intval($_POST['quantidade']))) ? (int)$_POST['quantidade']	: 5;
			
			echo '<form action="processa_album_foto.php" method="POST" Enctype="multipart/form-data">';	
			echo '<b>Envio das fotos</b></br>';	
			
			for($i = 1; $i <= $Quantidade; ++$i){
				echo 'Foto #' .$i . ':<input type="file" name="fotos[]" /></br>';
				}
				echo '<input type="hidden" name="nome_ambiente" value="' . $ambiente . '" />';
				echo '<input type="hidden" name="nome_album" value="' . $album . '" />';
				echo '<br /><input type="submit" value="OK"/>';
				echo '</form>';  
			}	
	  }		
?>

Pagina Processa_album_foto.php

<?
$Destino = 'C:\apache2\\htdocs\\moveis_dourados\\fotos\\';
$Fotos = $_FILES['fotos'];
$Conta = 0;

for($i = 0; $i < sizeof($Fotos); $i++){

$Nome = $Fotos['name'][$i];
$Tamanho = $Fotos['size'][$i];
$Tipo = $Fotos['type'][$i];
$Tmpname = $Fotos['tmp_name'][$i];


	if($Tamanho > 0 && strlen($Nome) > 1){
		
		if(preg_match('/^image\/(gif|jpeg|jpg|png)$/', $Tipo)){
			
			$Caminho = $Destino . $Nome;
			
			if(move_uploaded_file($Tmpname, $Caminho)){
			
				echo 'Foto #'. ($i+1) . 'enviada.</br>';
				$Conta++;
				
				require_once("conexao.php");
	$insere_album_foto = "insert into album   			VALUES('$Id_album','$album','$Fotos[0]','$Fotos[1]','$Fotos[2]','$Fotos[3]','$Fotos[4]','$ambiente')"; 	
	$resultado = mysql_query($insere_album_foto, $con);	
	mysql_close($con);		
			}
				else {
					
					echo'Não foi possivel enviar a foto #' . ($i+1) . '</br>';
				}
		}
	}			
}
if($Conta){
	
	
	echo '</br> Foram enviadas' . $Conta . 'foto(s). ';
		
}
else {
	
	echo 'Você nao enviou fotos!';
	}
		  						
?>

alguem pode me ajudar nisso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos la...

 

Arrume isso:

//$Destino = 'C:\apache2\\htdocs\\moveis_dourados\\fotos\\';
$Destino = 'C:\\apache2\\htdocs\\moveis_dourados\\fotos\\';

 

Verifique se existe esse diretorio.

Verifique se fotos é o nome dos inputs (fotos[], no inicio era foto[]).

 

Aqui funcionou. Abaixo segue o código que usei para teste:

<form id="cadastro" name="album" enctype="multipart/form-data"
method="post" action="">
<fieldset class="fieldset_cad"><label for="Ambiente"
class="label_campo_cad"><span class="span_campo_cad">Ambiente:</span> <select
name="Id_ambiente" class="input_campo_cad">

</select> </label> <label for="nome_album" class="label_campo_cad"><span
class="span_campo_cad">Nome do Album:</span> <input name="nome_album"
type="text" class="input_campo_cad" id="nome_album" value="" /> </label>
<label for="foto_1" class="label_campo_cad"><span class="span_campo_cad">Foto
1:</span> <input type="file" name="foto[]" class="input_campo_cad" /> </label>
<label for="foto_2" class="label_campo_cad"><span class="span_campo_cad">Foto
2:</span> <input type="file" name="foto[]" class="input_campo_cad" /> </label>
<label for="foto_3" class="label_campo_cad"><span class="span_campo_cad">Foto
3:</span> <input type="file" name="foto[]" class="input_campo_cad" /> </label>
<label for="foto_4" class="label_campo_cad"><span class="span_campo_cad">Foto
4:</span> <input type="file" name="foto[]" class="input_campo_cad" /> </label>
<label for="foto_5" class="label_campo_cad"><span class="span_campo_cad">Foto
5:</span> <input type="file" name="foto[]" class="input_campo_cad" /> </label>
<button type="submit" class="button_cad" value="OK" /><span></span></button>
</fieldset>

</form>

<?php
$Destino = 'C:\\';
$Fotos = $_FILES['foto'];
$Conta = 0;

for($i = 0; $i < sizeof($Fotos); $i++){

$Nome = $Fotos['name'][$i];
$Tamanho = $Fotos['size'][$i];
$Tipo = $Fotos['type'][$i];
$Tmpname = $Fotos['tmp_name'][$i];

if($Tamanho > 0 && strlen($Nome) > 1){

	if(preg_match('/^image\/(gif|jpeg|jpg|png)$/', $Tipo)){

		$Caminho = $Destino . $Nome;

		if(move_uploaded_file($Tmpname, $Caminho)){
			echo'Enviada com sucesso a foto #' . ($i+1) . '</br>';
			$Conta++;
		}
		else {
			echo'Não foi possivel enviar a foto #' . ($i+1) . '</br>';
		}
	}
}
}
if($Conta){
echo '</br> Foram enviadas' . $Conta . 'foto(s). ';
}
else {
echo 'Você nao enviou fotos!';
}
?>

 

Qualquer problema, volta aí.

Compartilhar este post


Link para o post
Compartilhar em outros sites

jaime consegui fazer o upload para o dir de destino como tinha me sujerido, ai já comecei a implementar para gravar no bd mas nao esta gravando, gostaria de saber como insiro o codigo para gravar no banco de dados o ambiente, o nome do album e as fotos. Obrigado por estar me dando uma força!

Compartilhar este post


Link para o post
Compartilhar em outros sites

vamos por partes:

 

1) Em ambientes, o valor de cada option deve conter o seu id (verifique o nome do campo id na tabela ambiente.):

<select name="Id_ambiente" class="input_campo_cad">
<?php
<select name="Id_ambiente" class="input_campo_cad">
<?php
require_once("conexao.php");

//Consulta com a tabela
//Selecione tudo de nomedatabela em ordem crescente pelo nome 
$consulta=mysql_query("SELECT * FROM ambientes order by nome_ambiente ASC"); 


//Fazendo o looping para exibição de todos registros que contiverem em nomedatabela
while ($dados = mysql_fetch_array($consulta)) {
echo("<option value='".$dados['Id_ambiente']."'>".$dados['nome_ambiente']."</option>");
}

?>
</select>

 

Receba o id do ambiente:

$ambiente = $_POST['Id_ambiente'];

 

Monte o sql de inserção de dados. Não é necessario preencher o id do album se for auto_increment:

$sql = "
INSERT INTO album
(
	nome_album
,	foto_1
,	foto_2
,	foto_3
,	foto_4
,	foto_5
,	Id_ambiente
)
VALUES
(
	'$album'
,	'$Fotos[0]'
,	'$Fotos[1]'
,	'$Fotos[2]'
,	'$Fotos[3]'
,	'$Fotos[4]'
,	$ambiente
)
";

 

Execute a inserção de dados:

$resultado = mysql_query($sql, $con) or die("Erro ao executar o comando: [ $sql ] " . mysql_error());

 

Espero ter ajudado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

jAIME fiz aqui novamente o script:

 

 

Cad_album_foto.php

 <form id="cadastro" name="album" enctype="multipart/form-data" method="post" action="cadastra_album_foto.php">
			 	<fieldset class="fieldset_cad">
	  				  <label for="Ambiente" class="label_campo_cad"><span class="span_campo_cad">Ambiente:</span>
					  <select name="Id_ambiente" class="input_campo_cad" id="nome_ambiente">
					  <?
					  		 
					  		require_once("conexao.php");

							//Consulta com a tabela
							//Selecione tudo de nomedatabela em ordem crescente pelo nome 
							$consulta=mysql_query("SELECT *FROM ambientes order by nome_ambiente ASC"); 


							//Fazendo o looping para exibição de todos registros que contiverem em nomedatabela
							while ($dados = mysql_fetch_array($consulta)) {
							echo("<option value='".$dados['Id_ambiente']."'>".$dados['nome_ambiente']."</option>");
							}
							
							?>
				      </select>
  	   		    </label>
					 <label for="nome_album" class="label_campo_cad"><span class="span_campo_cad">Nome do Album:</span>
	  				  <input name="nome_album" type="text" class="input_campo_cad" id="nome_album" value="" />
			    </label>  
				     <label for="foto_1" class="label_campo_cad"><span class="span_campo_cad">Foto 1:</span> <input type="file" 		name="foto[]" class="input_campo_cad" />
					</label>
					<label for="foto_2" class="label_campo_cad"><span class="span_campo_cad">Foto
					2:</span> <input type="file" name="foto[]" class="input_campo_cad" /> </label>
					<label for="foto_3" class="label_campo_cad"><span class="span_campo_cad">Foto
					3:</span> <input type="file" name="foto[]" class="input_campo_cad" /> </label>
					<label for="foto_4" class="label_campo_cad"><span class="span_campo_cad">Foto
					4:</span> <input type="file" name="foto[]" class="input_campo_cad" /> </label>
					<label for="foto_5" class="label_campo_cad"><span class="span_campo_cad">Foto
					5:</span> <input type="file" name="foto[]" class="input_campo_cad" /> </label>


					 <button type="submit" class="button_cad"><span></span></button>
				</fieldset>	 
      </form>
			 

Cadastra_album_foto.php

 

<?php
require_once("conexao.php");
$Destino = 'C:\\apache2\\htdocs\\moveis_dourados\\fotos\\';
$ambiente = $_POST['Id_ambiente'];
$album = $_POST['nome_album'];
$Fotos = $_FILES['foto'];
$Conta = 0;

for($i = 0; $i < sizeof($Fotos); $i++){

        $Nome = $Fotos['name'][$i];
        $Tamanho = $Fotos['size'][$i];
        $Tipo = $Fotos['type'][$i];
        $Tmpname = $Fotos['tmp_name'][$i];

        if($Tamanho > 0 && strlen($Nome) > 1){

                if(preg_match('/^image\/(gif|jpeg|jpg|png)$/', $Tipo)){

                        $Caminho = $Destino . $Nome;
						
                        if(move_uploaded_file($Tmpname, $Caminho)){
						
						
							
						
						$insere= "INSERT INTO album (nome_album, foto_1, foto_2, foto_3, foto_4, foto_5, Id_ambiente) VALUES ('$album', '$Fotos[0]', '$Fotos[1]', '$Fotos[2]', '$Fotos[3]', '$Fotos[4]', '$ambiente')";
						$resultado = mysql_query($insere, $con) or die("Erro ao executar o comando: [ $insere ] " . mysql_error());
						mysql_close($con);
					
                                echo'Enviada com sucesso a foto #' . ($i+1) . '</br>';
                                $Conta++;
                        }
                        else {
                                echo'Não foi possivel enviar a foto #' . ($i+1) . '</br>';
                        }
                }
        }
}
if($Conta){
        echo '</br> Foram enviadas' . $Conta . 'foto(s). ';
		
}
else {
        echo 'Você nao enviou fotos!';
}
?>

Cadastra o ambiente e o album, a imagem vai pro diretorio mas no banco o campo das fotos fica em branco.

 

da uma olhada e ve se estou pecando em alguma parte do script por favor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A inserção das fotos no banco não deve ser feita dentro do loop. Ao tratar o upload, é foto por foto. A inserção no banco, são todas as fotos juntas.

 

Desloque o bloco insert para fora do for.

 

Tente isso:

 

if($Conta){
   echo '</br> Foram enviadas' . $Conta . 'foto(s). ';
   $insere= "INSERT INTO album (nome_album, foto_1, foto_2, foto_3, foto_4, foto_5, Id_ambiente) VALUES ('$album', '$Fotos['name'][0]', '$Fotos['name'][1]', '$Fotos['name'][2]', '$Fotos['name'][3]', '$Fotos['name'][4]', '$ambiente')";
   $resultado = mysql_query($insere, $con) or die("Erro ao executar o comando: [ $insere ] " . mysql_error());
   mysql_close($con);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

A inserção das fotos no banco não deve ser feita dentro do loop. Ao tratar o upload, é foto por foto. A inserção no banco, são todas as fotos juntas.

 

Desloque o bloco insert para fora do for.

 

Tente isso:

 

if($Conta){
   echo '</br> Foram enviadas' . $Conta . 'foto(s). ';
   $insere= "INSERT INTO album (nome_album, foto_1, foto_2, foto_3, foto_4, foto_5, Id_ambiente) VALUES ('$album', '$Fotos['name'][0]', '$Fotos['name'][1]', '$Fotos['name'][2]', '$Fotos['name'][3]', '$Fotos['name'][4]', '$ambiente')";
   $resultado = mysql_query($insere, $con) or die("Erro ao executar o comando: [ $insere ] " . mysql_error());
   mysql_close($con);
}

 

Acabei de modificar, nao deu certo, agora aparece a pagina em branco apos o envio do formulario com as fotos.

estou enviando todas as fotos juntas como disse.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Jean, a parte do upload estava ok? Então não mexa! O que estava errado era a inserção no banco de dados. Analise o fluxo:

 

Upload: primeira etapa

Para cada foto (for loop):

Verifica, salva em disco e registra o número de sucessos.

 

Registrar no banco de dados: segunda etapa

Se houve sucesso no upload:

Insere album no banco.

Se não:

Implemente mensagem de erro.

 

Verifique os erros. Poste-os depois.

Compartilhar este post


Link para o post
Compartilhar em outros sites

como irei definir se teve sucesso no upload? pois não estou sabendo como colocar isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A função: move_uploaded_file() te retorna: TRUE, em caso de sucesso, e FALSE em caso de falha.

 

http://br2.php.net/move_uploaded_file

Compartilhar este post


Link para o post
Compartilhar em outros sites

seria mais ou menos isso?

 

<?php
require_once("conexao.php");
$Destino = 'C:\\apache2\\htdocs\\moveis_dourados\\fotos\\';
$ambiente = $_POST['Id_ambiente'];
$album = $_POST['nome_album'];
$Fotos = $_FILES['foto'];
$Conta = 0;

for($i = 0; $i < sizeof($Fotos); $i++){

        $Nome = $Fotos['name'][$i];
        $Tamanho = $Fotos['size'][$i];
        $Tipo = $Fotos['type'][$i];
        $Tmpname = $Fotos['tmp_name'][$i];

        if($Tamanho > 0 && strlen($Nome) > 1){

                if(preg_match('/^image\/(gif|jpeg|jpg|png)$/', $Tipo)){

                        $Caminho = $Destino . $Nome;
                                                
                        if(move_uploaded_file($Tmpname, $Caminho)){
                                                
                                echo'Enviada com sucesso a foto #' . ($i+1) . '</br>';
                                $Conta++;
                        }
                        else {
                                echo'Não foi possivel enviar a foto #' . ($i+1) . '</br>';
                        }
                }
        }
}

if(move_uploaded_file($Fotos)==TRUE){
$insere= "INSERT INTO album (nome_album, foto_1, foto_2, foto_3, foto_4, foto_5, Id_ambiente) VALUES ('$album', '$Fotos['name'][0]', '$Fotos['name'][1]', '$Fotos['name'][2]', '$Fotos['name'][3]', '$Fotos['name'][4]', '$ambiente')";
    $resultado = mysql_query($insere, $con) or die("Erro ao executar o comando: [ $insere ] " . mysql_error());
	mysql_close($con);
	
}
else {

echo 'nao foi possivel gravar as fotos.';
}	
if($Conta){

		

        echo '</br> Foram enviadas' . $Conta . 'foto(s). ';
		
		
                
}
else {
        echo 'Não foi possivel enviar as fotos!';
}
?>

Alguem pode me ajudar a corrigir meu código?

 

só ta faltando inserir no banco de dados, o upload ta beleza, alguem pode me ajudar ja procurei hj o dia todo, pesquisei e nao consegui fazer gravar no banco.

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.