Ir ao conteúdo
  • Cadastre-se

Para que geralmente usamos php ? E banco de dados?


Ir à solução Resolvido por DiF,

Posts recomendados

@FabianoS

 

O principio está certo.  enviou o arquivo ao upload.php

 

Resgatou com o $foto = $_FILES['arquivo']['name'];

 

Agora, você precisa fazer o upload de vez do arquivo, para a pasta onde ela irá ficar no servidor.

 

Para isso você utiliza o   a função  move_uploaded_file().

 

Logo em seguida você pega o  $foto = $_FILES['arquivo']['name']; 

e insere numa tabela no banco de dados.

Então no banco de dados vai ficar o nome dele... exemplo  suafoto.jpg

 

Aí para mostrar essa foto...  você faz o select nela... SELECT foto FROM tabela(supondo que o nome do campo seja foto)

Faz a mesma coisa como nos outros dados...   pegando o nome da foto Como $retorno->foto

 

Por último, para mostrar  coloca dentro do src do elemento img:

 

src="imagens/$retorno->foto"

 

Lembrando que se tiver mais de uma foto... aí tem que colocar dentro do loop while, para que ele percorra toda a tabela.

 

 

@dif mano que difícil isso . peguei um codigo if mais cara nao entendo os cara faz if($_FILES['arquivo'])  <- Como isso verifica se o campo esta vazio ? 

 

eu aprendi que o if faz Se(a for mais b {faça c}senao{d}.. mais mesmo assim olha meu codigo . nao retorna nem echo de sucesso e nem erro. e nao insere nada na pasta e nem no banco de dados . ve se to fazendo certo.

<html lang="pt-br"><head>	<meta charset="utf-8"><title>upload</title></head><body><?php$foto = $_FILES['arquivo']['name'];$conexao = mysqli_connect('localhost','root','','cadastro');$consulta = mysqli_query($conexao , "SELECT fotos FROM dbfotos");$temp_name_foto = $_FILES['arquivo']['tmp_name'];if( $_FILES ) { // Verificando se existe o envio de arquivos.		if( $_FILES['arquivo'] ) { // Verifica se o campo não está vazio.				// move_uploaded_file( $arqTemporário, $nomeDoArquivo )		if( move_uploaded_file( $temp_name_foto, '.fotos/') ) { // move_uploaded_file irá realizar o envio do arquivo.					$enviar = mysqli_query($conexao,"INSERT INTO dbfotos(foto)VALUES('$foto')") or die (mysql_error());			echo "Foto Enviado Com Susseco."; // Em caso de sucesso, retorna para a página de sucesso.					} else {						echo "Foto não enviada - Tente Novamente."; // Em caso de erro, retorna para a página de erro.					}			}}?></body></html>

atualização: eu errei na hora de inserir o campo e fotos e nao "foto". ele inseriu no banco de dados o nome da imagem. mais nao colocou na pasta a foto. em vez disso criou um arquivo .foto

 

 

2° atualização: criei uma variavel $diretorio = "fotos/".$foto; e inseriu na pasta . meu codigo ficou assim .

<html lang="pt-br"><head>	<meta charset="utf-8"><title>upload</title></head><body><?php$foto = $_FILES['arquivo']['name'];$conexao = mysqli_connect('localhost','root','','cadastro');$consulta = mysqli_query($conexao , "SELECT fotos FROM dbfotos");$temp_name_foto = $_FILES['arquivo']['tmp_name'];$diretorio = "fotos/".$foto;if( $_FILES ) { // Verificando se existe o envio de arquivos.		if( $_FILES['arquivo'] ) { // Verifica se o campo não está vazio.				// move_uploaded_file( $arqTemporário, $nomeDoArquivo )		if( move_uploaded_file( $temp_name_foto, $diretorio) ) { // move_uploaded_file irá realizar o envio do arquivo.					$enviar = mysqli_query($conexao,"INSERT INTO dbfotos(fotos)VALUES('$foto')") or die (mysql_error());			echo "Foto Enviado Com Susseco."; // Em caso de sucesso, retorna para a página de sucesso.					} else {						echo "Foto não enviada - Tente Novamente."; // Em caso de erro, retorna para a página de erro.					}			}}?></body></html>

Só nao entendi ainda o IF.

@dif conseguir fazer tudo que queria so um problema se eu selecionar a mesma imagem ela envia. como faço pra se tiver a mesma imagem no banco de dados ele mandar um alert.

 

 

tipo if($fotos == 1){

echo "<script>alert('Imagem ja consata no banco de dados.')</script>";

}

 

obs: esse == 1 so exemplo nao sei fazer.

Link para o comentário
Compartilhar em outros sites

  • Moderador

@FabianoS

 

Para testar se a foto já existe.. podes usar a função file_exists()

 

exemplo:

<?php$file = '../images/image_1.jpg';if(file_exists($file)){echo "$file já existe no servidor.. não pode enviar outro igual";}else{echo "$file não existe.. portanto pode usar um insert aqui>";}?>

então tens que implementar antes de fazer o upload ali.  testa se o arquivo já existe.. Se verdadeiro, mostra mensagem de erro dizendo que já existe.. Se falso, é por que não existe.. então faz o upload e o insert no banco.

Link para o comentário
Compartilhar em outros sites

 

 

então tens que implementar antes de fazer o upload ali.  testa se o arquivo já existe.. Se verdadeiro, mostra mensagem de erro dizendo que já existe.. Se falso, é por que não existe.. então faz o upload e o insert no banco.

 

Consegui , ja tinha visto essa função.

 

como faço pra voltar para pagina se eu usar o header ele volta sem mostrar o alert . tem como usar return false ? sei la.

 

 

atualização: coloquei a varavel diretorio agora qualquer imagem que coloco ele falo que esta no banco de dados. 

<html lang="pt-br"><head>	<meta charset="utf-8"><title>upload</title></head><body><?php$foto = $_FILES['arquivo']['name'];$conexao = mysqli_connect('localhost','root','','cadastro');$consulta = mysqli_query($conexao , "SELECT fotos FROM dbfotos");$temp_name_foto = $_FILES['arquivo']['tmp_name'];$diretorio = "fotos/".$foto;if( $_FILES ) { // Verificando se existe o envio de arquivos.		if( $_FILES['arquivo'] ) { // Verifica se o campo não está vazio.				// move_uploaded_file( $arqTemporário, $nomeDoArquivo )		if( move_uploaded_file( $temp_name_foto, $diretorio) ) { // move_uploaded_file irá realizar o envio do arquivo.					if(file_exists($diretorio))			{				echo "<script>alert('Foto Ja Consta No Banco de Dados'); </script>";							}else			{				$enviar = mysqli_query($conexao,"INSERT INTO dbfotos(fotos)VALUES('$foto')") or die (mysql_error());				echo "Foto Enviado Com Susseço."; // Em caso de sucesso, retorna para a página de sucesso.			header("location: index.php");			}				} else {						echo "Foto não enviada - Tente Novamente."; // Em caso de erro, retorna para a página de erro.					}			}}?></body></html>
Link para o comentário
Compartilhar em outros sites

  • Moderador

@FabianoS

 Não pode  testar se existe depois que faz o upload,

tem que ser antes...

 

Então a condição é:  SE  file_exists().....  faz algo.. senão faz outro.

 

exemplo: 

if(file_exists($foto)):  echo " Já consta no dirertório";else:  if(move_uploaded_file($temp_name_foto, $diretorio));    $envia = mysqli_query("insert into.....")  endif;endif;

Claro que tens que verificar e adaptar o código.. fiz isso de cabeça.

Link para o comentário
Compartilhar em outros sites

  • Moderador

@FabianoS

 

Bem tem alguns erros ali..   e não precisa usar o header() para redirecionar.. se quer voltar podes usar o history.go(-1).

 

 veja o exemplo:

<?php$foto = $_FILES['arquivo']['name'];$foto_temp_name = $_FILES['arquivo']['tmp_name'];$diretorio = "imagens/";$uploadfile = $diretorio . $foto;include 'db_config.php';function verifica($arquivo){  if(file_exists($arquivo)):       return true;   endif;}if(verifica($uploadfile)):    echo "<script>alert('Já existe!'); history.back(-1);</script>";else:    if (move_uploaded_file($foto_temp_name, $uploadfile)) :        $insereFotos = mysqli_query($conexao, "INSERT into imagens(imagem) VALUES('$foto')");        if ($insereFotos) :            echo "<script>alert('Nova foto inserida!'); history.back(-1);</script>";        endif;    endif;endif;
Linha 2, Arquivo da imagem
Linha 3, Arquivo da imagem temporária 
Linha 4, Variável do diretório
Linha 6, Variável que concatena com a variável da imagem(linha 2)
Linha 8, inclusão da config do banco de dados. Sempre se acostume a utilizar assim, reduz as linhas de código.
Linhas 11 a 15,  Uma função que criei que verifica se o arquivo existe. Não precisar ser exatamente ali.. podia ser em um arquivo separado chamado funcoes.php.. e depois incluiria no seu arquivo como include 'funcoes.php'
 
Linha 17 e 26, Cadeia de if que chama a função que verifica se existe a tal imagem. Por padrão essa função retorna true. então por isso que a condição do iF é  Se verdadeiro, mostra mensagem de erro de que já existe a imagem.
 
Se retornar falso, é por que não existe.. então entramos no ELSE.
 
A linha 20 é o conteúdo deste ELSE. Que verifica se foi executada a funão move_uploaded_file.
Se executado, ele executa a linha 21 que insere o nome da imagem no banco de dados.
A linha 22, testa a inserção no banco de dados.. Se verdadeiro, mostra mensagem de que a imagem foi inserida com sucesso e volta para a tela anterior... usando a função javascript history.go(-1)
 
O código acima, realmente funciona..  foi testado aqui em localhost. então se caso mesmo com essa explicação dê algum erro.. provavelmente será erro de digitação no seu código.. variáveis erradas... ou algum outro esquecimento.
Link para o comentário
Compartilhar em outros sites

o codigo estava certo foi erro meu. por exemplo Depois que eu fiz o codigo deu certo ai depois dava erro que imagem ja estava no banco de dados e na verdade estava mesmo.  eu tinha apagado so no banco de dados mais estava na pasta do banco ainda eu apaguei so o registro depois que apaguei da pasta funcionava normalmente.


 

 

  1. if ($insereFotos) :
  2. echo "<script>alert('Nova foto inserida!'); history.back(-1);</script>";
  3. endif;

 

Tipo o history.back volta pra tela . mais também usei o location.href="index.php" também serve nao serve ?

 

 

 

Linha 8, inclusão da config do banco de dados. Sempre se acostume a utilizar assim, reduz as linhas de código.

 

Sim eu ja começei a fazer assim fica ate mais limpo so to usando agora quando faço teste pra aprender mesmo.

 

valeu pela ajuda. so mais 2 duvidas se eu quiser fazer upload multiplo de imagens como seria ? porque o input so pega uma. precisaria usar um array pra agrupar as imagens ?

 

e tambem

por exemplo se eu apago um registro ou uma imagem com id 2 ai o proximo que eu crio ja vem com id 3 . queria que ele continuasse a numeração tem como ?

Link para o comentário
Compartilhar em outros sites

  • Moderador

@FabianoS

 

 

 

e eu quiser fazer upload multiplo de imagens como seria ? porque o input so pega uma. precisaria usar um array pra agrupar as imagens ?

 

tens de definir o campo file como   multiple e deixar como array de dados . e  no php iterar com um laço de foreach..

 

exemplo:

No html

<input type="file" name="arquivos[]" multiple/>

no php

$arquivos = $_FILES[arquivos][name];foreach ($arquivos as $fotos) :    echo "$fotos <br/>";endforeach;

O foreach, itera um elemento array.... como no html definiu que o campo está enviando um array de arquivos  "arquivos[]" o foreach pega cada um e imprime em tela.

No seu caso, ao invés de imprimir em tela.. podes fazer o upload e o insert into tabela.

 

Lembre-se sempre que quiser aplicar algo em mais de uma coisa.. precisa estar dentro de um laço de repetição.

Então dentro do foreach.. você coloca todo aquele if:

if(verifica($uploadfile)):    echo "<script>alert('Já existe!'); history.back(-1);</script>";else:    if (move_uploaded_file($foto_temp_name, $uploadfile)) :        $insereFotos = mysqli_query($conexao, "INSERT into imagens(imagem) VALUES('$foto')");        if ($insereFotos) :            echo "<script>alert('Nova foto inserida!'); history.go(-1);</script>";        endif;    endif;endif;

ou seja.. fará um upload e um insert no banco para cada imagem selecionada.

 

Sobre o history.back...  pode ser usada.. mas no caso ali.. eu errei. não é history.back().... mas sim  history.go(-1)  onde o -1 é a pagina anterior.

A diferença entre history.back, history.go(-1) e location.href é que o location redireciona para onde quiser, o history.back() volta para a anterior,  o history.go(-1) volta para o anterior, mas se colocar history.go(1)  ele vai para a seguinte.

 

 

 

se eu apago um registro ou uma imagem com id 2 ai o proximo que eu crio ja vem com id 3 . queria que ele continuasse a numeração tem como ?

 

Não tem como. uma vez apagada, a contagem segue a diante...  A única forma de restaurar a contagem  é truncando a tabela... ou seja, zerando. 

fazendo isso... todos os dados serão perdidos.. e a contagem de linhas zerada.

Para isso é só fazer:   truncate nome-da-tabela

ps: fazer isso diretamente no phpmyadmin no campo de fazer selects 

Link para o comentário
Compartilhar em outros sites

  • Moderador

@FabianoS

 

Não só para campo file.. usa-se sempre que quiser um array de dados.

 

os colchetes avisam ao php que está sendo enviado um array.

 

então se dar  um print_r() na variável $arquivos 

 

exemplo:

echo "<pre>";        print_r($arquivos);echo "</pre>";

mostrará isto:

Array(    [0] => wallpaper001-1920x1200.jpg    [1] => wallpaper002-1920x1200.jpg    [2] => wallpaper003-1920x1200.jpg    [3] => wallpaper004-1920x1200.jpg    [4] => wallpaper010-1920x1200.jpg)

Veja que cada índice é uma imagem diferente.. ou seja o campo input file enviou múltiplas imagens como um array

Link para o comentário
Compartilhar em outros sites

@dif me retornaram alguns erros olha só 

 

tuu90n2.png?1

<html lang="pt-br"><head>	<meta charset="utf-8"><title>upload</title></head><body><?php$foto = $_FILES['arquivo']['name'];$conexao = mysqli_connect('localhost','root','','cadastro');$consulta = mysqli_query($conexao , "SELECT fotos FROM dbfotos");$temp_name_foto = $_FILES['arquivo']['tmp_name'];$diretorio = "fotos/".$foto;$var_foto = "//fotos/$foto";if( $_FILES ) { // Verificando se existe o envio de arquivos.		if( $_FILES['arquivo'] ) { // Verifica se o campo não está vazio.				foreach ($foto as $ft):			if(move_uploaded_file($temp_name_foto, $diretorio)){		mysqli_query($conexao,"INSERT INTO dbfotos(fotos)VALUES('$foto')");		echo"Fotos Inseridas";			}else{echo"Fotos Nao Inseridas";}	endforeach;					}}?></body></html>
Link para o comentário
Compartilhar em outros sites

 

@FabianoS

 Pelo que eu vi ele acusa erro nas linhas 13 e 14.. onde define o diretório ..e outra variável.

 

tenta alterar o diretório de:

$diretorio = "fotos/".$foto;

para

$diretorio = "fotos/";

 

Tentei isso antes o primeiro erro desaparece, mais os dois fica do move_uploaded_file() . sobre 1 parametro.

 

 

que nem falo o move_uploaded_file() ele requer o nome temporario da foto e o destino . sendo eu tenho o nome mais como ele colocaria

 

a foto sendo que a $foto tem mais de uma . acho que ele nao consegue sei la . 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!