Ir para conteúdo

POWERED BY:

Arquivado

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

fabiossmn

[Resolvido] If's e Functions...

Recommended Posts

Olá pessoal, estou tendo vários e dolorosos problemas com functions e If's, vou explicar melhor:

 

Tenho uma função que redimensiona imgs e tals, ela faz tudo certinho, só que quando vou cadastrar o nome da imagem no banco de dados ela vem sem a extensão do arquivo ae fica:

 

nomedaimg654564.

 

o problemas é que quando eu chamo a variavel referente a extensão, ela da como indefinida.

vou postar o código para vcs entenderem melhor:

 

if($_FILES['foto']['error'] == UPLOAD_ERR_OK){
include("../includes_adm/config.php");
$SelBanco = mysql_query("SELECT * FROM empresa");
if($SelBanco){
	require("../includes_adm/funcoes.php");	
	$TextoProjeto = $_POST['TextoProjeto'];
	$nome = "Empresa ".date("Hismdy").md5(uniqid(rand(), true)).'.';
	$pasta = '../uploads/Empresa/Miniaturas/';
	$img = $_FILES['foto'];		
		list($width, $height, $type, $attr) = getimagesize($img['tmp_name']);
		if($width > 640){
			$novo_nome = Red_imgs($img['tmp_name'], $img['name'], $nome, 640, $pasta);
		}else{
			$upload = move_uploaded_file($img['tmp_name'], "../uploads/Empresa/Originais/".$nome);
		}		
		include("../includes_adm/config.php");
		$SelBanco = mysql_query("SELECT * FROM empresa");
		$ContaLinhas = mysql_num_rows($SelBanco);

		if($ContaLinhas == 0){
	$Cadastrar = mysql_query("INSERT INTO empresa (TextoProjeto, Foto_Empresa) VALUES('$TextoProjeto', '$nome')");
	if($Cadastrar){
			echo("<script language='javaScript'>window.location.href='../empresa.php?acao=cadastrar&ex=cadastrado'</script>");
		}else{
			echo("<script language='javaScript'>window.location.href='../empresa.php?acao=cadastrar&ex=erro'</script>");
		}
}else{
	$Atualizar = mysql_query("UPDATE empresa SET TextoProjeto = '$TextoProjeto', Foto_Empresa = '$nome'");
if($Atualizar){
	echo("<script language='javaScript'>window.location.href='../empresa.php?acao=cadastrar&ex=atualizado'</script>");
}else{
	echo("<script language='javaScript'>window.location.href='../empresa.php?acao=cadastrar&ex=erroa'</script>");
}		
}
}else{
echo("Nenhum banco de dados foi selecionado.");
}
}

 

funcoes.php

 

function Red_imgs($tmp, $name,$nome, $larguraP, $pasta){

$ext = strtolower(end(explode('.',$name)));	
$MesmoNome = $name;
if($ext == "jpg"){
	$img = imagecreatefromjpeg($tmp);
}elseif($ext == "png"){
	$img = imagecreatefrompng($tmp);
}elseif($ext == "gif"){
	$img = imagecreatefromgif($tmp);
}

$x = imagesx($img);
$y = imagesy($img);

$largura = ($x > $larguraP) ? $larguraP : $x;
$altura = ($largura*$y) / $x;

if($altura>$larguraP){
	$altura = $larguraP; 
	$largura = ($altura*$x) / $y;
}

$nova = imagecreatetruecolor($largura, $altura);
imagecopyresampled($nova, $img, 0, 0, 0, 0, $largura, $altura, $x, $y);

if($ext == "jpg"){
	$nome = $nome.$ext;
	imagejpeg($nova, $pasta.$nome);

}elseif($ext == "png"){
	$nome = $nome.$ext;
	imagepng($nova, $pasta.$nome);

}elseif($ext == "gif"){
	$nome = $nome.$ext;
	imagegif($nova, $pasta.$nome);
}
imagedestroy($img);
imagedestroy($nova);

return (file_exists($pasta.$nome)) ? true : false;
}

 

isso tem alguma coisa haver com algum if?

tipo, de dar variavel indefinida por causa de estar dentro de algum if?

 

agradeço quem puder me ajudar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A variável que você está cadastrando no banco de dados é esta (que não tem nenhuma extensão):

$nome = "Empresa ".date("Hismdy").md5(uniqid(rand(), true)).'.';

 

Veja que a $ext está dentro do escopo da função, então se você chamar ela fora não vai existir mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

e como faço para poder chama-la fora do escopo?

e dai no banco de dados eu cadastro assim: $Cadastrar = mysql_query("INSERT INTO empresa (TextoProjeto, Foto_Empresa) VALUES('$TextoProjeto', '$nome$ext')");

?

Compartilhar este post


Link para o post
Compartilhar em outros sites

A meu ver tem duas soluções simples, a primeira colocar como global a variável com a extensão:

 

function Red_imgs($tmp, $name,$nome, $larguraP, $pasta){
       global $ext;
       $ext = strtolower(end(explode('.',$name)));     
       $MesmoNome = $name;
       if($ext == "jpg"){
               $img = imagecreatefromjpeg($tmp);
       }elseif($ext == "png"){
               $img = imagecreatefrompng($tmp);
       }elseif($ext == "gif"){
               $img = imagecreatefromgif($tmp);
       }

       $x = imagesx($img);
       $y = imagesy($img);

       $largura = ($x > $larguraP) ? $larguraP : $x;
       $altura = ($largura*$y) / $x;

       if($altura>$larguraP){
               $altura = $larguraP; 
               $largura = ($altura*$x) / $y;
       }

       $nova = imagecreatetruecolor($largura, $altura);
       imagecopyresampled($nova, $img, 0, 0, 0, 0, $largura, $altura, $x, $y);

       if($ext == "jpg"){
               $nome = $nome.$ext;
               imagejpeg($nova, $pasta.$nome);

       }elseif($ext == "png"){
               $nome = $nome.$ext;
               imagepng($nova, $pasta.$nome);

       }elseif($ext == "gif"){
               $nome = $nome.$ext;
               imagegif($nova, $pasta.$nome);
       }
       imagedestroy($img);
       imagedestroy($nova);

       return (file_exists($pasta.$nome)) ? true : false;
}

 

e no script apenas faz novamente o global para pegar o valor:

 

global $ext;
if($_FILES['foto']['error'] == UPLOAD_ERR_OK){
       include("../includes_adm/config.php");
       $SelBanco = mysql_query("SELECT * FROM empresa");
       if($SelBanco){
               require("../includes_adm/funcoes.php"); 
               $TextoProjeto = $_POST['TextoProjeto'];
               $nome = "Empresa ".date("Hismdy").md5(uniqid(rand(), true)).'.';
               $pasta = '../uploads/Empresa/Miniaturas/';
               $img = $_FILES['foto'];         
                       list($width, $height, $type, $attr) = getimagesize($img['tmp_name']);
                       if($width > 640){
                               $novo_nome = Red_imgs($img['tmp_name'], $img['name'], $nome, 640, $pasta);
                       }else{
                               $upload = move_uploaded_file($img['tmp_name'], "../uploads/Empresa/Originais/".$nome);
                       }               
                       include("../includes_adm/config.php");
                       $SelBanco = mysql_query("SELECT * FROM empresa");
                       $ContaLinhas = mysql_num_rows($SelBanco);

                       if($ContaLinhas == 0){
               $Cadastrar = mysql_query("INSERT INTO empresa (TextoProjeto, Foto_Empresa) VALUES('$TextoProjeto', '$nome')");
               if($Cadastrar){
                               echo("<script language='javaScript'>window.location.href='../empresa.php?acao=cadastrar&ex=cadastrado'</script>");
                       }else{
                               echo("<script language='javaScript'>window.location.href='../empresa.php?acao=cadastrar&ex=erro'</script>");
                       }
       }else{
               $Atualizar = mysql_query("UPDATE empresa SET TextoProjeto = '$TextoProjeto', Foto_Empresa = '$nome'");
       if($Atualizar){
               echo("<script language='javaScript'>window.location.href='../empresa.php?acao=cadastrar&ex=atualizado'</script>");
       }else{
               echo("<script language='javaScript'>window.location.href='../empresa.php?acao=cadastrar&ex=erroa'</script>");
       }               
       }
}else{
       echo("Nenhum banco de dados foi selecionado.");
}
}

 

O global era uma pratica muito usada no PHP4 que ainda se torna mt util em determinadas situações.

 

A outra alternativa seria por exemplo retornar da funcao Red_imgs um array com os valores da imagem, ou seja, qualquer coisa do género:

 

return (file_exists($pasta.$nome)) ? array('name'=>'imagename', 'ext'=>'jpg') : false;

Compartilhar este post


Link para o post
Compartilhar em outros sites

rfps888 deu certo, fiz usando a global, eu até sabia, tinha lido em um livro que tenho sobre globais e tals, só que como nunca tinha usado nem me passou pela cabeça, vlw ae me salvasse de uma agora (Y)

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.