Array
(
)

Foto de perfil de usuário!

PHP
Cleyton Caetano
   - 20 ago 2014

bom gente! vamos pensar juntos! tenho um sistema em que tenho 5 usuários cadastrados! eles entram na index e aparece uma página de login e apresentação do meu sistema! quando eles fazem o login eu me aproveito do seguinte código para trocar ele de tela!
#Código

<?php if (!isset($_SESSION['usuarioID'])){ ?>

<h1>Código da index</h1>

<?php }else{
	include "home.php";
} ?>

bom a função php verifica se o usuário está logado, se não estiver ele exibe o código da index, se por ventura o usuário vier logar, o código da index vai desaparecer e uma função else me permite chamar a home.php que trás algumas informações do usuário!
bom agora minha dúvida é a seguinte, digamos que em home eu tenha o código!
#Código
<div class="home">

			<div class="avatar_perfil">
					
		<img src="usuario_logado/10561697_574629705980813_3286886594384863998_n.jpg" title="Perfil" width="160px" height="200px">
			
			</div>
       </div>

o que eu quero é que o usuário possa alterar essa foto de perfil no painel dele, e seja tudo salvo em um banco de dados para que quando cada usuário entrar aparece a foto dele no lugar da foto de perfil!
acho que vai ser preciso usar um banco de dados pra fazer isso, mas não sei como!

Ronaldo Lanhellas
   - 20 ago 2014

Bom, primeiro você deve pensar no espaço que irá ocupar com as imagens, pois se forem imagens de boa resolução que tenham 1MB aproximadamente, é inviável colocar isso no banco, você poderia armazenar em uma pasta e apenas fazer o link no banco ( eu gosto de trabalhar assim), se forem imagens bem pequenas (3kb, por exemplo) você pode até salvar no banco, mas ainda assim eu optaria por salvar em uma pasta e apenas salvar o link no banco.

Cleyton Caetano
   - 20 ago 2014


Citação:
Bom, primeiro você deve pensar no espaço que irá ocupar com as imagens, pois se forem imagens de boa resolução que tenham 1MB aproximadamente, é inviável colocar isso no banco, você poderia armazenar em uma pasta e apenas fazer o link no banco ( eu gosto de trabalhar assim), se forem imagens bem pequenas (3kb, por exemplo) você pode até salvar no banco, mas ainda assim eu optaria por salvar em uma pasta e apenas salvar o link no banco.


é este mesmo meu plano amigo, que a foto seja armazenada no meu servidor na pasta ...images/users/profile_photo e assim o banco de dados pegue o link de cada usuário e exiba no painel! agora isso esta em matando aqui! como é que o usuário vai enviar a foto pelo painel e o banco de dados vai pegar automático?

Ronaldo Lanhellas
   - 20 ago 2014

Vou ti passar o passo-a-passo e você começa o desenvolvimento a partir disso, surgindo dúvidas pode postar aqui:

1 - Você terá que colocar um componente para upload de arquivos (ex: uploadify), que seja capaz de enviar a foto do cliente para o servidor;
2 - Quando você pegar esta foto no servidor, você deve atribuir um nome pra ela (sugiro que seja o mesmo ID do cliente, pois assim você garante que nunca haverá conflitos entre os nomes das fotos);
3 - Crie uma coluna na tabela usuário, chamada 'caminho_foto' que terá o valor '/images/users/profile_photo/id_dousuario.jpg
4 - Quando o usuário logar no seu painel, você vai carregar a foto que está em 'caminho_foto';

Cleyton Caetano
   - 20 ago 2014


Citação:
Vou ti passar o passo-a-passo e você começa o desenvolvimento a partir disso, surgindo dúvidas pode postar aqui:

1 - Você terá que colocar um componente para upload de arquivos (ex: uploadify), que seja capaz de enviar a foto do cliente para o servidor;
2 - Quando você pegar esta foto no servidor, você deve atribuir um nome pra ela (sugiro que seja o mesmo ID do cliente, pois assim você garante que nunca haverá conflitos entre os nomes das fotos);
3 - Crie uma coluna na tabela usuário, chamada 'caminho_foto' que terá o valor '/images/users/profile_photo/id_dousuario.jpg
4 - Quando o usuário logar no seu painel, você vai carregar a foto que está em 'caminho_foto';


entendi! vou tentar montar o projeto aqui! vlw!

Ronaldo Lanhellas
   - 20 ago 2014


Citação:

Citação:
Vou ti passar o passo-a-passo e você começa o desenvolvimento a partir disso, surgindo dúvidas pode postar aqui:

1 - Você terá que colocar um componente para upload de arquivos (ex: uploadify), que seja capaz de enviar a foto do cliente para o servidor;
2 - Quando você pegar esta foto no servidor, você deve atribuir um nome pra ela (sugiro que seja o mesmo ID do cliente, pois assim você garante que nunca haverá conflitos entre os nomes das fotos);
3 - Crie uma coluna na tabela usuário, chamada 'caminho_foto' que terá o valor '/images/users/profile_photo/id_dousuario.jpg
4 - Quando o usuário logar no seu painel, você vai carregar a foto que está em 'caminho_foto';


entendi! vou tentar montar o projeto aqui! vlw!


De nada, boa sorte.

Cleyton Caetano
   - 20 ago 2014

cara eu fiz o que pude kkkk

eu criei uma página pra fazer o upload da imagem e tals, esta dando um erro mais esta upando a imagem normal!

veja como ficou a estrutura.

change_profile_photo.php

#Código

<?php
    $PHP_SELF = "";
    //Diretório aonde ficará os arquivos
    $dir = "./image/users/profile_photo/";
     
    //Extensões permitidas
    $ext = array("gif","jpg","png");
     
    //Quant. de campos do tipo FILE
    $campos = 6;
     
    //Formulário
    echo '<form method="post" action="'.$PHP_SELF.'" enctype="multipart/form-data">
      <input type="file" name="file[]">
		<br />
		<br />
		<br />
     <input type="submit" name="submit" value=" OK ">
     </form>';
     
     
    //Se for enviado
    if (isset($_POST['submit'])) {
     
    //Obtendo info. dos arquivos
    $f_name = $_FILES['file']['name'];
    $f_tmp = $_FILES['file']['tmp_name'];
    $f_type = $_FILES['file']['type'];
     
     
    //Contar arquivos enviados
    $cont=0;
     
    //Repetindo de acordo com a quantidade de campos FILE
    for($i=0;$i<$campos;$i++){
     
    //Pegando o nome
    $name = $f_name[$i];
     
    //Verificando se o campo contem arquivo
      if ( ($name!="") and (is_file($f_tmp[$i])) and (in_array(substr($name, -3),$ext)) ) {
     
        if ($cont==0) {
          echo "<b>Arquivo(s) enviados:
    </b>";
        }
          echo $name." - ";
     
          //Movendo arquivo's do upload
          $up = move_uploaded_file($f_tmp[$i], $dir.$name);
     
            //Status
            if ($up==true):
                echo  "<i>Enviado!</i>";
                  $cont++;
            else:
                echo "<i>Falhou!</i>";
            endif;
     
          echo "
    ";
      }
     
    }
     
    echo ($cont!=0) ? "<i>Total de arquivos enviados: </i>".$cont : "Nenhum arquivo foi enviado!";
    }
    ?>


eu to fazendo o teste o com usuário dono do ID 1 a imagem vai ficar assim.

/image/users/profile_photo/1.jpg

agora o problema! como vou inserir esse endereço automático no banco de dados? e como renomear a imagem automaticamente de qualquer nome que ela tiver para o ID do usuário?
ou seja, meu problema está sendo, trocar o nome do arquivo e colocar o link atualizado no banco de dados!

Cleyton Caetano
   - 21 ago 2014

alguém???

Ronaldo Lanhellas
   - 21 ago 2014

Vamos lá,

Você deve mudar a variável $name para receber o novo nome da imagem (sendo o ID) e não o antigo, veja:

#Código

//Pegando o nome
    $name = id_do_usuario;

Cleyton Caetano
   - 21 ago 2014


Citação:
Vamos lá,

Você deve mudar a variável $name para receber o novo nome da imagem (sendo o ID) e não o antigo, veja:

#Código

//Pegando o nome
    $name = id_do_usuario;


fiz isso mais da erro, a imagem não é upada!

Ronaldo Lanhellas
   - 21 ago 2014

Mostre o erro, sempre poste o erro, fica melhor de lhe ajudar.

Cleyton Caetano
   - 21 ago 2014


Citação:
Mostre o erro, sempre poste o erro, fica melhor de lhe ajudar.


Bom, eu percebi duas coisas, se tento mudar a foto de perfil sem o include "seguranca.php"; ele da o seguinte erro!

#Código

Notice: Undefined variable: _SESSION in C:\Program Files\EasyPHP-DevServer-14.1VC11\data\localweb\SITE\change_profile_photo.php on line 55

Notice: Undefined variable: _SESSION in C:\Program Files\EasyPHP-DevServer-14.1VC11\data\localweb\SITE\change_profile_photo.php on line 55

Notice: Undefined variable: _SESSION in C:\Program Files\EasyPHP-DevServer-14.1VC11\data\localweb\SITE\change_profile_photo.php on line 55

Notice: Undefined variable: _SESSION in C:\Program Files\EasyPHP-DevServer-14.1VC11\data\localweb\SITE\change_profile_photo.php on line 55

Notice: Undefined variable: _SESSION in C:\Program Files\EasyPHP-DevServer-14.1VC11\data\localweb\SITE\change_profile_photo.php on line 55

Notice: Undefined variable: _SESSION in C:\Program Files\EasyPHP-DevServer-14.1VC11\data\localweb\SITE\change_profile_photo.php on line 55
Nenhum arquivo foi enviado!


do contrario se uso o o include "seguranca";

ele deixa de exibir o erro! creio que pq o ID do usuário passa a ser válido, que quando quando tento enviar a foto aparece uma mensagem dizendo

Citação:
Nenhum arquivo foi enviado!


o código fica assim.

#Código
	   <?php
		include "seguranca.php";
	   
		$PHP_SELF = "";
		//Diretório aonde ficará os arquivos
		$dir = "./image/users/profile_photo/";
		 
		//Extensões permitidas
		$ext = array("gif","jpg","png");
		 
		//Quant. de campos do tipo FILE
		$campos = 6;
		 
		//Formulário
		echo '<form method="post" action="'.$PHP_SELF.'" enctype="multipart/form-data">
      <input type="file" name="file[]">
		<br />
		<br />
		<br />
     <input type="submit" name="submit" value=" OK ">
     </form>';
     
     
    //Se for enviado
    if (isset($_POST['submit'])) {
     
    //Obtendo info. dos arquivos
    $f_name = $_FILES['file']['name'];
    $f_tmp = $_FILES['file']['tmp_name'];
    $f_type = $_FILES['file']['type'];
     
     
    //Contar arquivos enviados
    $cont=0;
     
    //Repetindo de acordo com a quantidade de campos FILE
    for($i=0;$i<$campos;$i++){
     
    //Pegando o nome
    $name = $_SESSION['usuarioID'];
     
    //Verificando se o campo contem arquivo
      if ( ($name!="") and (is_file($f_tmp[$i])) and (in_array(substr($name, -3),$ext)) ) {
     
        if ($cont==0) {
          echo "<b>Arquivo(s) enviados:
    </b>";
        }
          echo $name." - ";
     
          //Movendo arquivo's do upload
          $up = move_uploaded_file($f_tmp[$i], $dir.$name);
     
            //Status
            if ($up==true):
                echo  "<i>Enviado!</i>";
                  $cont++;
            else:
                echo "<i>Falhou!</i>";
            endif;
     
          echo "
    ";
      }
     
    }
     
    echo ($cont!=0) ? "<i>Total de arquivos enviados: </i>".$cont : "Nenhum arquivo foi enviado!";
    }
    ?>

Ronaldo Lanhellas
   - 21 ago 2014

Deixa o include seguranca.php. O problema está aqui:

#Código

$up = move_uploaded_file($f_tmp[$i], $dir.$name);


Antes de executar o move_uploaded_file execute um echo em $f_tmp[$i] e outro echo em $dir.$name, vamos ver qual conteúdo aparece.

Cleyton Caetano
   - 21 ago 2014


Citação:
Deixa o include seguranca.php. O problema está aqui:

#Código

$up = move_uploaded_file($f_tmp[$i], $dir.$name);


Antes de executar o move_uploaded_file execute um echo em $f_tmp[$i] e outro echo em $dir.$name, vamos ver qual conteúdo aparece.

não apareceu nada!

Ronaldo Lanhellas
   - 21 ago 2014

Pode ser que ele não esteja entrando no IF

#Código

  if ( ($name!="") and (is_file($f_tmp[$i])) and (in_array(substr($name, -3),$ext)) ) {


Execute var_dump em :

#Código
$f_tmp[$i]

Cleyton Caetano
   - 21 ago 2014

cara, to desistindo desse código, vou procurar outro aqui....

Ronaldo Lanhellas
   - 21 ago 2014

O seu problema é algo simples de ser resolvido, porém você está "se enrolando", teste linha a linha e veja se ela faz o que deveria. Use o XDEBUG para depurar seu código e facilitar sua vida, coloque var_dump em todos os locais que precisar e não desista;