Ir para conteúdo

POWERED BY:

Arquivado

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

Camila de Paula

Inserir imagem dentro do ID já cadastrado

Recommended Posts

Olá, boa tarde!

 

Tenho um sistema de cadastro com dados e foto. Acontece que precisei adaptar o código com Crop da imagem e desde então não consegui mais fazer funcionar corretamente. Primeiro tentei cadastrar a imagem "cropada" junto com o restante do cadastro, e não consegui... até pedi ajuda aqui no fórum há mais de um mês, e não obtive respostas.

 

Então resolvi mudar para um jeito mais simples: Primeiro faço o cadastro dos dados da pessoa, e depois tenho um link separado caso queira incluir uma foto neste cadastro. Só que ainda não está funcionando.

 

Estou gerando um nome aleatório e consigo gravar a imagem em um diretório, mas quando pego o cadastro pelo ID, não consigo atualizar o cadastro com a imagem.

 

Por favor, alguém pode me ajudar?

 

Este é o código do formulário:

 

 

mudar_foto.php

<?php
		
			// memory limit 
			ini_set("memory_limit","50M");
			set_time_limit(0);
			
			// processa arquivo
			$imagem		= isset( $_FILES['imagem'] ) ? $_FILES['imagem'] : NULL;
			$tem_crop	= false;
			$img		= '';
			if( $imagem['tmp_name'] )
			{
				$imagesize = getimagesize( $imagem['tmp_name'] );
				if( $imagesize !== false )
				{
					if( move_uploaded_file( $imagem['tmp_name'], $imagem['name'] ) )
					{
						include( 'm2brimagem.class.php' );
						$oImg = new m2brimagem( $imagem['name'] );
						if( $oImg->valida() == 'OK' )
						{
							$oImg->redimensiona( '400', '', '' );
							$oImg->grava( $imagem['name'] );
							
							$imagesize 	= getimagesize( $imagem['name'] );
							$img		= '<img src="'.$imagem['name'].'" id="jcrop" '.$imagesize[3].' />';
							$preview	= '<img src="'.$imagem['name'].'" id="preview" '.$imagesize[3].' />';
							$tem_crop 	= true;	
						}
						
					}
					
				}
			
			}
				
		?>

	
		<?php if( $tem_crop === true ): ?>
			<h2 id="tit-jcrop">Recorte a imagem</h2>
           
			<div id="div-jcrop">
				
				<div id="div-preview">
					<?php echo $preview; ?>
				</div>
				
				<?php echo $img; ?>
                
                
                
                <input type="submit" value="Salvar" id="btn-crop" />
       
   			
			
               
			</div>
             
            
			<div id="debug">
				<p><strong>X</strong> <input type="text" id="x" size="5" disabled /> x <input type="text" id="x2" size="5" disabled /> </p>
				<p><strong>Y</strong> <input type="text" id="y" size="5" disabled /> x <input type="text" id="y2" size="5" disabled /> </p>
				<p><strong>Dimensões</strong> <input type="text" id="h" size="5" disabled /> x <input type="text" id="w" size="5" disabled /></p>
			</div>
           
             
         
			<script type="text/javascript">
				var img = '<?php echo $imagem['name']; ?>';
			
				$(function(){
					$('#jcrop').Jcrop({
						onChange: exibePreview,
						onSelect: exibePreview,
						aspectRatio: 1
					});
					$('#btn-crop').click(function(){
						$.post( 'crop.php', {
							img:img, 
							x: $('#x').val(), 
							y: $('#y').val(), 
							w: $('#w').val(), 
							h: $('#h').val()
						}, function(){
							$('#div-jcrop').html( '<img src="' + img + '?' + Math.random() + '" width="'+$('#w').val()+'" height="'+$('#h').val()+'" />' );
							$('#debug').hide();
							$('#tit-jcrop').html('Feito!<br /><a href="crop-simples.php">enviar outra imagem</a>');
						});
						return false;
					});
				});
				
				function exibePreview(c)
				{
					var rx = 100 / c.w;
					var ry = 100 / c.h;
				
					$('#preview').css({
						width: Math.round(rx * <?php echo $imagesize[0]; ?>) + 'px',
						height: Math.round(ry * <?php echo $imagesize[1]; ?>) + 'px',
						marginLeft: '-' + Math.round(rx * c.x) + 'px',
						marginTop: '-' + Math.round(ry * c.y) + 'px'
					});
					
					$('#x').val(c.x);
					$('#y').val(c.y);
					$('#x2').val(c.x2);
					$('#y2').val(c.y2);
					$('#w').val(c.w);
					$('#h').val(c.h);
					
				};
				
			</script>
           
          
       
          
		<?php else: ?>
			<form name="frm-jcrop" id="frm-jcrop" method="post" action="crop-simples.php" enctype="multipart/form-data">
            <input type="hidden" name="id" value="<?php echo $id; ?>" />
				<p>
					<label>Envie uma imagem:</label>
					<input type="file" name="imagem" id="imagem" />
					<input type="submit" value="Enviar" />
				</p>
			</form>
		<?php endif; ?>

E o código que renomeia a imagem, salva no diretório e deveria salvar no banco, agora está assim:

 

crop.php

<?php
if( $_SERVER['REQUEST_METHOD'] == 'POST' )
{
	include( 'm2brimagem.class.php' );
	$oImg = new m2brimagem( $_POST['img'] );
	if( $oImg->valida() == 'OK' )
	{
		$oImg->posicaoCrop( $_POST['x'], $_POST['y'] );
		$oImg->redimensiona( $_POST['w'], $_POST['h'], 'crop' );
		$oImg->grava( $_POST['img'] );
		
	
 		
		//especifica o diretorio pra salvar a foto cropada

$diretorio = '../../foto/'; 



//cria um nome aleatorio

preg_match("/\.(gif|bmp|png|jpg|jpeg){1}$/i", $_POST['img'], $XTs); 

$nome_novo = md5(uniqid(time())) . "." . $XTs[1];



//grava no diretorio, o nome aleatorio

$oImg->grava( $diretorio . $nome_novo );

$id = $_GET["id"];

$sql = mysql_query("UPDATE motoristas SET imagem=$nome_novo WHERE id='$id' ");


mysql_query ($sql)or die("Probelmas de conecção".$sql);
    echo"Foto cadastrada com sucesso";
	



//apaga a imagem original

$return = @unlink($_POST['img']);
		
	}
}

?>

Obs: fiz um teste só de INSERT e a imagem grava no banco em um novo ID, mas na hora do UPDATE do cadastro, não dá certo.

 

Só alterei este pedaço:

$oImg->grava( $diretorio . $nome_novo );



$sql = mysql_query("INSERT INTO motoristas (id, imagem )  VALUES ('$id', '$nome_novo') ");



Compartilhar este post


Link para o post
Compartilhar em outros sites

tenta isso

 

$sql = mysql_query("UPDATE motoristas SET imagem='$nome_novo' WHERE id='$id'";

 

senão for, da um echo na variavel $sql e tenta rodar direto no banco e vê o erro q ta retornando.

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenta isso

$sql = mysql_query("UPDATE motoristas SET imagem='$nome_novo' WHERE id='$id'";

senão for, da um echo na variavel $sql e tenta rodar direto no banco e vê o erro q ta retornando.

 

 

Bruno,

 

Obrigada por tentar ajudar, mas veja meu arquivo crop.php. Já está desse jeito e não funciona.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Camila, boa tarde.

 

Na verdade não está não

 

seu código

 

$sql = mysql_query("UPDATE motoristas SET imagem=$nome_novo WHERE id='$id' ");

 

a variavel $nome_novo tem que estar entre parenteses ja q é uma string.

além disso vc tentou a questão q falei de ver o retorno da sua variavel $sql e rodar ela direto no banco pra ver se rola lá.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Camila, boa tarde.

 

Na verdade não está não

 

seu código

$sql = mysql_query("UPDATE motoristas SET imagem=$nome_novo WHERE id='$id' ");

a variavel $nome_novo tem que estar entre parenteses ja q é uma string.

além disso você tentou a questão q falei de ver o retorno da sua variavel $sql e rodar ela direto no banco pra ver se rola lá.

 

 

Desculpa, Bruno. Não reparei nas aspas...

Coloquei as aspas agora e continua na mesma. Dei um echo na variável $sql e não acontece nada de diferente. Fiz o update direto no banco e rodou normalmente, coloquei valor nulo em uma ID que tinha foto e ele apagou a foto sem apresentar nenhum erro.

 

Ah, esqueci de dizer: estou com php habilitado para mostrar todos os erros. Ele não apresenta nenhum erro, e apesar de funcionar direto pelo banco, continua sem funcionar no php.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se o problema está na query, utilize OR DIE(mysql_error())... Se não aparecer nenhum erro, comece debugando as variáveis que você está usando na própria query.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi gente, voltei! rs

 

Então, depois da dica de vocês, descobri que o problema estava na recuperação do ID. Fucei, fucei e não consegui resolver.

 

Mas achei um script na internet que está funcionando, corta a imagem como eu preciso e salva o nome no banco. O único problema é que ele salva no diretório a imagem original e a recortada, e eu gostaria de usar o mesmo nome e substituir uma pela outra, e eu não consegui fazer isso neste script.

 

Peço a ajuda novamente de vocês para esse problema que já está me tirou várias noites de sono.

 

Este é o trecho que salva a imagem original no diretório e no banco:

 

foto.php



	$valid_formats = array("jpg", "png", "gif", "bmp");
	if(isset($_POST['submit']))
		{
			$name = $_FILES['photoimg']['name'];
			$size = $_FILES['photoimg']['size'];
			
			if(strlen($name))
				{
					list($txt, $ext) = explode(".", $name);
					if(in_array($ext,$valid_formats) && $size<(1024*1024))
						{
							$imagem = time().substr($txt, 5).".".$ext;
							$tmp = $_FILES['photoimg']['tmp_name'];
							if(move_uploaded_file($tmp, $path.$imagem))
								{
								mysql_query("UPDATE motoristas SET imagem='$imagem' WHERE id='$id'");
									$image="<h1>Selecione o que deseja recortar</h1><img src='../../foto/".$imagem."' id=\"photo\" ' >";
									
								}
							else
								echo "O processo falhou, tente novamente.";
						}
					else
						echo "Formato inválido, selecione outra imagem..!";					
				}
			else
				echo "Por favor, selecione a imagem..!";
		}


E este outro, é o pedaço que salva o recorte no diretório.

Mas só salva no diretório, o update do banco não está dando certo, e este é um dos motivos que quero substituir no diretório a imagem original pela recortada.

$id='1'; // id
$t_width = 100;
$t_height = 100;	
$new_name = "small".$id.".jpg";
$path = "../../foto/";
if(isset($_GET['t']) and $_GET['t'] == "ajax")
	{
		extract($_GET);
		$ratio = ($t_width/$w); 
		$nw = ceil($w * $ratio);
		$nh = ceil($h * $ratio);
		$nimg = imagecreatetruecolor($nw,$nh);
		$im_src = imagecreatefromjpeg($path.$img);
		imagecopyresampled($nimg,$im_src,0,0,$x1,$y1,$nw,$nh,$w,$h);
		imagejpeg($nimg,$path.$new_name,90);
		mysql_query("UPDATE motoristas SET profile_image_small='$new_name' WHERE id='$id'");
		echo $new_name."?".time();
		exit;
	}

O outro motivo de eu querer substituir a imagem, além de desocupar espaço, é porque este script sempre salva o recorte com o mesmo nome: $new_name = "small".$id.".jpg";

Já tentei trocar esse $id='1' pelo id do cadastrado, mas dá erro na pré-visualização do recorte.

 

Bom, resumindo: A ideia e substituir a imagem original pela recortada do diretório, para não precisar fazer dois UPDATEs no banco, já que o primeiro UPDATE está funcionando.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por curiosidade, como está seu arquivo de conexão?

$hostname_conexao = "*************e.com";
$database_conexao = "*************832";
$username_conexao = "**********32";
$password_conexao = "*********ar14";
$conexao = mysql_pconnect($hostname_conexao, $username_conexao, $password_conexao) or die (mysql_error()); 
mysql_select_db($database_conexao, $conexao);

Assim, sem os asteriscos.

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.