Ir para conteúdo

POWERED BY:

Arquivado

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

Prove Yourself

Código PHP funciona no FF 3 mas não no IE7

Recommended Posts

Tenho um formulário onde o usuário insere uma notícia:

<html>
<head>
	<title>Criar Notícia</title>
	<link rel="stylesheet" type="text/css" href="estilos.css" media="all">
</head>
<body>
	<h1>Criar Notícia</h1>
	<?php
		function __autoload($classe) {
			require_once $classe . ".class.php";
		}

		$site = new Site();
		$site->verificar_permissao("index.php", 8);
	?>
	<form method="post" action="inserir_noticia.php" enctype="multipart/form-data">
		<label for="titulo">Título</label>
		<input type="text" name="titulo" />
		<label for="noticia">Notícia</label>
		<textarea name="noticia"></textarea>
		<label for="foto">Foto</label>
		<input type="file" name="foto" />
		<input type="submit" value="Enviar" class="enviar" />
	</form>
</body>
</html>
A classe notícia:
<?php

require_once "phpmailer/class.phpmailer.php";

class Noticia {
	protected $titulo;
	protected $noticia;
	protected $foto;

	public function __construct($titulo, $noticia, $foto) {
		$this->titulo = $titulo;
		$this->noticia = $noticia;
		$this->foto = new Imagem($foto);
	}
	
	public function inserir() {
		if($this->foto->verificar_tipo_mime()) {
			if($this->foto->verificar_tamanho()) {
				move_uploaded_file($this->foto->nome_arquivo_temporario, "fotos/" . $this->foto->nome_arquivo);

				$banco = new Banco();
				$sql = "INSERT INTO noticias (titulo, noticia, foto) VALUES ('" . addslashes($this->titulo) . "', '" . addslashes($this->noticia) . "', '{$this->foto->path_arquivo}');";
				$banco->query($sql);
			
				$email = new PHPMailer();
				$email->Host = "smtp.mail.yahoo.com.br";
				$email->IsSMTP();
				$email->Port = 587;
				$email->SMTPAuth = true;
			
				$email->Username = "php_mailer@yahoo.com.br";
				$email->Password = "senha";
			
				$email->IsHTML(true);
			
				$email->From = "php_mailer@yahoo.com.br";
				$email->FromName = "Newsletter!";
				$email->Subject = $this->titulo;

				$sql = "SELECT email FROM emails;";
				$consulta = $banco->query($sql);
			
				for($i = 0; $i < $banco->numero_resultados($consulta); $i++) {
					$resultado = $banco->array_resultados($consulta, $i, PGSQL_ASSOC);
					$email->AddAddress($resultado['email']);
				}

				$email->Body = $this->noticia;
				$email->Send();
			}
			else {
				echo "Esta imagem é muito grande. Por favor, envie uma imagem com menos de 150 pixels de largura e altura.";
				exit();
			}
		}
		else {
			echo "Tipo de arquivo inválido. Por favor, envie um tipo de imagem válida (jpeg, gif, bmp ou png).";
			exit();
		}
	}
	
	public function editar($codigo) {
		$banco = new Banco();
		$sql = "SELECT foto FROM noticias WHERE codigo = $codigo";
		$resultado = $banco->array_resultados($banco->query($sql), 0, PGSQL_ASSOC);

		unlink($resultado['foto']);
		
		if($this->foto->verificar_tamanho()) {
			move_uploaded_file($this->foto->nome_arquivo_temporario, "fotos/" . $this->foto->nome_arquivo);
		
			$sql = "UPDATE noticias SET titulo = '{$this->titulo}', noticia = '{$this->noticia}', foto = '{$this->foto->path_arquivo}' WHERE codigo = $codigo;";
			$banco->query($sql);
		}
		else
			echo "Esta imagem é muito grande. Por favor, envie uma imagem com menos de 150 pixels de largura e altura.";
	}
	
	public function excluir($codigo) {
		$banco = new Banco();
		$sql = "SELECT foto FROM noticias WHERE codigo = $codigo";
		$resultado = $banco->array_resultados($banco->query($sql), 0, PGSQL_ASSOC);
		
		unlink($resultado['foto']);
		
		$sql = "DELETE FROM noticias WHERE codigo = $codigo";
		$banco->query($sql);
	}
}
?>
E a página que envia a notícia:
<?php
function __autoload($classe) {
	require_once $classe . ".class.php";
}

$site = new Site();
$site->verificar_permissao("index.php", 8);

$noticia = new Noticia($_POST['titulo'], nl2br($_POST['noticia']), $_FILES['foto']);
$noticia->inserir();

$site->redirecionar("index.php", 0);
?>

Quando envio a notícia pelo Firefox 3 tudo funciona numa boa. Agora, quando tento enviar pelo Internet Explorer 7, aparece um erro dizendo que o formato da imagem não é válido (este, que eu criei, comparando o mime type da imagem que o usuário selecionou no campo do tipo file...). Alguma idéia do que pode ser? Muito obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Posta esse método pra eu ver: $this->foto->verificar_tipo_mime()

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpa, esqueci a classe Imagem

<?php

class Imagem {

public $nome_arquivo;

public $nome_arquivo_temporario;

public $path_arquivo;

protected $tamanho;

protected $tipo;

 

public function __construct($foto) {

$this->nome_arquivo = $foto['name'];

$this->nome_arquivo_temporario = $foto['tmp_name'];

$this->tamanho = getimagesize($foto['tmp_name']);

$this->path_arquivo = "fotos/" . $foto['name'];

$this->tipo = $foto['type'];

}

 

public function verificar_tamanho() {

if($this->tamanho[0] > 150 && $this->tamanho[1] > 150)

return false;

return true;

}

 

public function verificar_tipo_mime() {

echo $this->tipo . "<br>";

if($this->tipo == "image/jpeg" || $this->tipo == "image/gif" || $this->tipo == "image/bmp" || $this->tipo == "image/png")

return true;

else

return false;

}

}

?>

Com um echo em $this->tipo no IE7 retorna image/pjpeg e no FF3 aparece image/jpeg. Não sei de onde vem esse p antes de jpeg... Obrigado, abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

o IE7 mostra o type da imagem JPEG como PJPEG mesmo .... tive o mesmo problema aqui, descobri por acaso...

 

:unsure: lindo isso que a microsoft faz pra gente .... :wacko:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu nem tinha notado isso, nossa, que coisa horrível, agora terei que fazer funções para destinguir ambos os navegadores...

pois é ... isso e um erro grotesco d+

ao inves de facilitarem nossa vida, so complicam

Compartilhar este post


Link para o post
Compartilhar em outros sites

em casa tenho uma funcao q funciona nos 2 pra upload de imagem.

 

na parte onde você diz JPG e tals ali o meu tem coisas a mais q nao lembro, mas em casa envio pra vcs

 

Sou iniciante em PHP, oq estou falando pode ser uma tremenda bobagem, como pode ser um acerto bem grande.auheauheae

 

flw

Compartilhar este post


Link para o post
Compartilhar em outros sites

em casa tenho uma funcao q funciona nos 2 pra upload de imagem.

 

na parte onde você diz JPG e tals ali o meu tem coisas a mais q nao lembro, mas em casa envio pra vcs

 

Sou iniciante em PHP, oq estou falando pode ser uma tremenda bobagem, como pode ser um acerto bem grande.auheauheae

 

flw

mas função que funciona para os 2 navegadores e facil, no caso de você trabalhar com jpeg, aonde tiver verificação do tipo de arquivo e so solocar $type=='jpeg' or $type=='pjpeg' ....

 

a chatice e ter que mandar o script mostrar o type do arquivo pra você poder acrescentar uma verificação ....

Compartilhar este post


Link para o post
Compartilhar em outros sites

eh um trecho do codigo..

como eu disse tow ai iniciando e PHP orientado ao objeto nao sei nada ainda, então fica ai oq eu disse q ia fazer, e dai se alguem tiver paciencia me explica direito qual o erro e pq dele, pois ainda nao entendi direito.flw

 

if( preg_match('/(jpg|jpeg)/i', $info['extension']) )

Compartilhar este post


Link para o post
Compartilhar em outros sites

acrescenta os formatos...

if($this->tipo == "image/jpeg" || $this->tipo == "image/pjpeg" || $this->tipo == "image/gif" || $this->tipo == "image/bmp" || $this->tipo == "image/png" || $this->tipo == "image/x-png")

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.