Jump to content


Photo

Cadastro Com Foto


  • Faça o login para participar
3 replies to this topic

#1 MelkorValar

MelkorValar

    Novato no fórum

  • Usuários
  • 6 posts
  • Sexo:Masculino
  • Localidade:Uberaba
  • Interesses:Programação PHP, CSS, HTML, JavaScript, XML, AJAX

Posted 07/03/2011, 02:15

Ola pessoal,
Há pouco tempo estou aprendendo a trabalhar com php e estou montando um sistema de cadastro, meu sistema cadastra beleza mas agora preciso colocar um campo "foto" nele tambem. Achei um script ensinando a fazer upload de imagem e tentei adaptar ele pro meu sistema de cadastro mas mas nao consegui. O problema é o seguinte, memo com a funçao de upload o sistema funciona mas soh nao cadastra a foto, no tutorial que segui esplica que devo criar um campo no mysql chamado "foto varchar not null" onde ficara armazenado a foto: segue o script:

Neste script abaixo eu verifico a imagem e depois fasso o upload...

//verificando arquivo imagem

if (!empty($foto["name"])) {
 
	// Largura máxima em pixels
	$largura = 150;
	// Altura máxima em pixels
	$altura = 180;
	// Tamanho máximo do arquivo em bytes
	$tamanho = 1000;
 
    	// Verifica se o arquivo é uma imagem
    	if(!eregi("^image\/(pjpeg|jpeg|png|gif|bmp)$", $foto["type"])){
		$error[1] = "Isso não é uma imagem.";
	} 
 
	// Pega as dimensões da imagem
	$dimensoes = getimagesize($foto["tmp_name"]);
 
	// Verifica se a largura da imagem é maior que a largura permitida
	if($dimensoes[0] > $largura) {
		$error[2] = "A largura da imagem não deve ultrapassar ".$largura." pixels";
	}
 
	// Verifica se a altura da imagem é maior que a altura permitida
	if($dimensoes[1] > $altura) {
		$error[3] = "Altura da imagem não deve ultrapassar ".$altura." pixels";
	}
 
	// Verifica se o tamanho da imagem é maior que o tamanho permitido
	if($foto["size"] > $tamanho) {
	 	$error[4] = "A imagem deve ter no máximo ".$tamanho." bytes";
	}
 
	// Se não houver nenhum erro
	if (count($error) == 0) {
 
		// Pega extensão da imagem
		preg_match("/\.(gif|bmp|png|jpg|jpeg){1}$/i", $foto["name"], $ext);
 
        	// Gera um nome único para a imagem
        	$nome_imagem = md5(uniqid(time())) . "." . $ext[1];
 
        	// Caminho de onde ficará a imagem
        	$caminho_imagem = "fotos/" . $nome_imagem;
 
		// Faz o upload da imagem para seu respectivo caminho
		move_uploaded_file($foto["tmp_name"], $caminho_imagem);

	}
 
	// Se houver mensagens de erro, exibe-as
	if (count($error) != 0) {
		foreach ($error as $erro) {
			echo $erro . "<br />";
		}
	}
}

Aqui eu armazeno os dados juntamente com a foto:
$sql = mysql_query("INSERT INTO usuarios (nome, sobrenome, email, repete_email, senha, repete_senha, data_cadastro, foto) VALUES('{$nome}', '{$sobrenome}', '{$email}', '{$repete_email}', '{$senha}', '{$repete_senha}', now(), '{$foto}')") 
									or die( mysql_error() );

quando rodo o sistema nao da nenhum erro e armazena os dados tranquilo mas nao armazena a foto, se alguem puder me ajudar com este script ficaria muito grato. flw

abaixo esta o codigo responsavel pelo cadastro no db, e a parte vermelha eh onde acho que esta algo errado, sera que alguem poderia verificar pra mim e explicar o que eu fiz de errado? Desde ja agradeço.

<?php

include "config.php";
include "functions.php";
 
$nome = trim($_POST['nome']);
$sobrenome = trim($_POST['sobrenome']);
$email = trim($_POST['email']);
$repete_email = trim($_POST['repete_email']);
$senha = trim($_POST['senha']);
$repete_senha = trim($_POST['repete_senha']);
$foto = trim($_POST['foto']);

/* Vamos checar algum erro nos campos, mas tenha em mente que existem formas bem mais eficientes de tratar os dados que são enviados ou n&atilde;o pelos campos do formulário */


[color="#FF0000"]if ((!$nome) || (!$sobrenome) || (!$email) || (!$repete_email) || (!$senha) || (!$repete_senha)){

	echo "ERRO: Voc&ecirc; n&atilde;o enviou as seguintes informaç&otilde;es requeridas para o cadastro! <br /> <br />";

	if (!$nome){

		echo "Nome &eacute; um campo requerido. <br />";

	}

	if (!$sobrenome){

		echo "Sobrenome &eacute; um campo requerido. <br />";

	}

	if (!$email){

		echo "Email &eacute; um campo requerido.<br />";

	}
	if (!$repete_email){

		echo "Confirma Email &eacute; um campo requerido.<br />";

	}

	if (!$senha){

		echo "Senha &eacute; um campo requerido. <br />";

	}
	if (!$repete_senha){

		echo "Confirma Senha &eacute; um campo requerido. <br />";

	}


	echo "<br />Preencha os campos necess&aacute;rios abaixo: <br /><br />";

	include "formulario_cadastro.php"; 

}else

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//verificando arquivo imagem

if (!empty($foto["name"])) {
 
	// Largura máxima em pixels
	$largura = 150;
	// Altura máxima em pixels
	$altura = 180;
	// Tamanho máximo do arquivo em bytes
	$tamanho = 1000;
 
    	// Verifica se o arquivo é uma imagem
    	if(!eregi("^image\/(pjpeg|jpeg|png|gif|bmp)$", $foto["type"])){
		$error[1] = "Isso não é uma imagem.";
	} 
 
	// Pega as dimensões da imagem
	$dimensoes = getimagesize($foto["tmp_name"]);
 
	// Verifica se a largura da imagem é maior que a largura permitida
	if($dimensoes[0] > $largura) {
		$error[2] = "A largura da imagem não deve ultrapassar ".$largura." pixels";
	}
 
	// Verifica se a altura da imagem é maior que a altura permitida
	if($dimensoes[1] > $altura) {
		$error[3] = "Altura da imagem não deve ultrapassar ".$altura." pixels";
	}
 
	// Verifica se o tamanho da imagem é maior que o tamanho permitido
	if($foto["size"] > $tamanho) {
	 	$error[4] = "A imagem deve ter no máximo ".$tamanho." bytes";
	}
 
	// Se não houver nenhum erro
	if (count($error) == 0) {
 
		// Pega extensão da imagem
		preg_match("/\.(gif|bmp|png|jpg|jpeg){1}$/i", $foto["name"], $ext);
 
        	// Gera um nome único para a imagem
        	$nome_imagem = md5(uniqid(time())) . "." . $ext[1];
 
        	// Caminho de onde ficará a imagem
        	$caminho_imagem = "fotos/" . $nome_imagem;
 
		// Faz o upload da imagem para seu respectivo caminho
		move_uploaded_file($foto["tmp_name"], $caminho_imagem);

	}
 
	// Se houver mensagens de erro, exibe-as
	if (count($error) != 0) {
		foreach ($error as $erro) {
			echo $erro . "<br />";
		}
	}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if ($senha!=$repete_senha){
	echo "Senha nao confere¹";
}
if ($email!=$repete_email){
	echo "Email nao confere¹";
	echo "<br><br>$email<br><br>$repete_email";}[/color]
else{
	/* Vamos checar se o nome de Usuário escolhido e/ou Email já existem no banco de dados */

	$sql_email_check = mysql_query("SELECT COUNT(usuario_id) FROM usuarios WHERE email='{$email}'");
	$sql_usuario_check = mysql_query("SELECT COUNT(usuario_id) FROM usuarios WHERE email='{$senha}'");

	$eReg = mysql_fetch_array($sql_email_check);
	$uReg = mysql_fetch_array($sql_usuario_check);

	$email_check = $eReg[0];
	$usuario_check = $uReg[0];
	
	if (($email_check > 0) || ($usuario_check > 0)){

		echo "<strong>ERRO </strong>- Por favor corrija os seguintes erros abaixo: <br /> <br />";

		if ($email_check > 0){

		    echo "Este email ( <strong>".$email."</strong> ) j&aacute; est&aacute; sendo utilizado.<br />Por favor utilize outra conta de email! <br />";

		    unset($email);

		}

		if ($usuario_check > 0){

			echo "Este e-mail ( <strong>".$email."</strong> ) j&aacute; est&aacute; sendo utilizado.<br/>Por favor utilize outro e-mail<br />";

			unset($email);

		}

		echo "<br />";
		include "formulario_cadastro.php";

	}
	else
	{

		$email = strtolower(trim($_POST['email']));
		$char = "@";
		$pos = strpos($email, $char);

        if ($pos === false){

			echo "<strong>ERRO:</strong><br />";
			echo "O endere&ccedil;o de email [ <strong><em>".$email."</em></strong> ] que est&aacute; tentando utilizar n&atilde;o &eacute; v&aacute;lido.<br />";
			echo "Por favor, utilize um email v&aacute;lido.<br /><br />";
			include "formulario_cadastro.php"; 

        }else{

            $v_mail = verifica_email($email);

            if ($v_mail){

				$senha = md5($senha); /*somente trocar $senha_randomica pelo nome de um campo para criar uma senha*/
				$repete_senha = md5($repete_senha);
				// Inserindo os dados no banco de dados

				$info = htmlspecialchars($info);

				$sql = mysql_query("INSERT INTO usuarios (nome, sobrenome, email, repete_email, senha, repete_senha, data_cadastro, foto) VALUES('{$nome}', '{$sobrenome}', '{$email}', '{$repete_email}', '{$senha}', '{$repete_senha}', now(), '{$foto}')") 
									or die( mysql_error() );

				if (!$sql){

					echo "Ocorreu algum erro ao criar sua conta, por favor entre em contato com o Webmaster.";

				}

				echo "Cadastro efetuado com sucesso!"; 

            }else{

                echo "<strong>ERRO:</strong><br />";
                echo "O endere&ccedil;o de email [ <strong><em>".$email."</em></strong> ] que est&aacute; tentando utilizar n&atilde;o &eacute; v&aacute;lido.<br />";
                echo "Por favor, utilize um email v&aacute;lido.<br /><br />";
				include "formulario_cadastro.php"; 

            }

        }

    }

}

?>


#2 cjdj

cjdj

    Novato no fórum

  • Usuários
  • 14 posts
  • Sexo:Masculino
  • Localidade:Uberlândia (MG)

Posted 07/03/2011, 14:29

Olá.

Nessa linha, você está fazendo um procedimento equivocado:

$sql = mysql_query("INSERT INTO usuarios (nome, sobrenome, email, repete_email, senha, repete_senha, data_cadastro, foto) VALUES('{$nome}', '{$sobrenome}', '{$email}', '{$repete_email}', '{$senha}', '{$repete_senha}', now(), '{$foto}')") or die( mysql_error() );

Um campo do tipo varchar não é apropriado para armazenamento de arquivos e/ou imagens. Uma opção correta seria, por exemplo, BLOB.

Porém, para upload é mais interessante salvar no banco de dados apenas o endereço de acesso (diretório) ao arquivo e/ou foto. Você economiza espaço em sua base de dados e otimiza o desempenho do seu sistema, uma vez que o mesmo não precisa manipular o arquivo físico.

O script de upload que você está utilizando aparentemente está correto, basta você incluir o endereço de acesso à imagem na cláusula insert (no lugar de $foto). Posteriormente, na sua página web indique o diretório da foto em uma tag <img>.


[]s.

#3 MelkorValar

MelkorValar

    Novato no fórum

  • Usuários
  • 6 posts
  • Sexo:Masculino
  • Localidade:Uberaba
  • Interesses:Programação PHP, CSS, HTML, JavaScript, XML, AJAX

Posted 08/03/2011, 01:50

Ola, tinha achado estranho armazenar uma foto num campo varchar tambem, to dando uma pesquisada sobre upload de imagem. deixa eu tirar outra duvida, no caso a melhor maneira seria gravar no campo BLOB apenas o endereço se é que entendi mas ai eu vou ter de criar uma pasta onde ficaram armazenada essas fotos. ( meu sistema tera varios usuarios e cada um com farias fotos) acho que dessa forma ficara um pouco bagunçado desta forma sera que tem outra forma de armazenamento? ou esta eh a melhor forma pra desempenho? grato

#4 André Manoel

André Manoel

    Doutor

  • Usuários
  • 996 posts
  • Sexo:Masculino
  • Localidade:Brasilia

Posted 08/03/2011, 17:54

Bem... tenho duas dicas para você... primeiro ... é criar uma forma de identificar as fotos que não seja pelo nome que elas tem no upload.

Você pode criar uma forma de identificar a foto e assim você não vai ter o problema de sobreescrever duas imagens que tenham o mesmo nome.

E como o amigo disse aí em cima você armazena no banco somente o nome da imagem... já que o diretório você sabe qual é.

O campo BLOB é para armazenar coisas muito grande... como binário de um arquivo...
Mas o que voCê precisa fazer é manter o seu campo varchar... e armazenar o nome da imagem que você vai gerar.
Não utilize o campo BLOB para isso. Use o varchar mesmo.

Eu costumo gerar um código md5 com base nos segundos ... e verificar se existe alguma imagem com este nome no banco já... enquando eu não encontro um nome unico continuo tentando criar um nome unico. Até uma hora que esse nome não existe e ele realiza o upload da imagem.

Você verificou se a imagem está indo para o diretório mesmo?
Iniciando na Ajuda On line...

Posted Image Meu post lhe ajudou? Reputar/votar é uma das formas de agradecer.




0 user(s) are reading this topic

0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq