fabiossmn 1 Denunciar post Postado Março 1, 2012 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
ESerra 744 Denunciar post Postado Março 1, 2012 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
fabiossmn 1 Denunciar post Postado Março 1, 2012 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
rfps888 7 Denunciar post Postado Março 1, 2012 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
fabiossmn 1 Denunciar post Postado Março 1, 2012 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