Ir para conteúdo

POWERED BY:

Arquivado

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

Prove Yourself

Object of class Imagem could not be converted to string in...

Recommended Posts

Tenho as classes Noticia, Imagem e o arquivo que é o action de um form. Quando tento inserir uma notícia aparece o erro: "Catchable fatal error: Object of class Imagem could not be converted to string in C:\Arquivos de programas\Apache Software Foundation\Apache2.2\htdocs\newsletter\Noticia.class.php on line 21". A linha 21 é

$banco->query("INSERT INTO noticia (titulo, noticia, foto, autor) VALUES ('$this->titulo', '$this->noticia', '$this->foto->path_arquivo', '$this->autor');");
. Acredito que seja como estou tentando acessar a propriedade path_arquivo do objeto/atributo foto. Segue todo o código, se puderem me ajudar... Obrigado.

<?php

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

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

			$banco = new Banco();
			$banco->query("INSERT INTO noticia (titulo, noticia, foto, autor) VALUES ('$this->titulo', '$this->noticia', '$this->foto->path_arquivo', '$this->autor');");
		}
		else
			echo "Esta imagem é muito grande. Por favor, envie uma imagem com menos de 150 pixels de largura e altura.";
	}
}
?>
<?php
class Imagem {
	public $nome_arquivo;
	public $nome_arquivo_temporario;
	public $path_arquivo;
	protected $tamanho;
	
	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'];
	}
	
	public function verificar_tamanho() {
		if($this->tamanho[0] > 150 && $this->tamanho[1] > 150)
			return false;
		return true;
	}
}
?>
<?php
function __autoload($classe) {
	require_once $classe . ".class.php";
}
$noticia = new Noticia($_POST['titulo'], $_POST['noticia'], $_FILES['foto'], 78); //Alterar autor...
$noticia->inserir();
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

aparentemente não tem erros

$banco = new Banco();

$banco->query("INSERT INTO noticia (titulo, noticia, foto, autor) VALUES ('$this->titulo', '$this->noticia', '$this->foto->path_arquivo', '$this->autor');");

a mensagem de erro acusa que o trecho em negrito não retorna uma string

 

seguindo a mensagem de erro, sugiro que debug o array global $_FILES, mais especificamente o índice que está chamando

 

print_r( $_FILES['foto'] ); exit;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tudo é string... Até se eu passar uma string e modificar um pouco a classe para isso ele gera esse gero, veja abaixo:

Noticia.class.php

$this->foto = new Imagem("amor");
public function inserir() {
			echo "INSERT INTO noticia (titulo, noticia, foto, autor) VALUES ('$this->titulo', '$this->noticia', '$this->foto', '$this->autor');";
	}
Imagem.class.php
public function __construct($foto) {
		$this->nome_arquivo = $foto;
:(

Compartilhar este post


Link para o post
Compartilhar em outros sites

print_r( $_FILES['foto'] );

Array ( [name] => imagem.JPG [type] => image/jpeg [tmp_name] => C:\Documents and Settings\Administrador\Configurações locais\Temp\PHP\upload\php1E.tmp [error] => 0 [size] => 2852 )
ou

var_dump($_FILES['foto']);

array(5) { ["name"]=>  string(10) "imagem.JPG" ["type"]=>  string(10) "image/jpeg" ["tmp_name"]=>  string(86) "C:\Documents and Settings\Administrador\Configurações locais\Temp\PHP\upload\php1F.tmp" ["error"]=>  int(0) ["size"]=>  int(2852) }
Pq var_dump retorna os itens como string e print_r não? Obrigado até agora.

Compartilhar este post


Link para o post
Compartilhar em outros sites

tente isso:

 

public $path_arquivo;

troque por isso:

static $path_arquivo;

Deu o mesmo erro...

 

static? mas tornando este atributo estático ele não deixará de pertencer ao objeto e sim a classe?

Obrigado...

Compartilhar este post


Link para o post
Compartilhar em outros sites

só por curiosidade........altera o nome do atributo do parametro.......

 

protected $foto;

 

pra

 

protected $foto_imagem;

 

e em seus respectivos lugares....e testa...

 

tem q ir debugando.....como disse o hinom.....APARENTEMENTE, ta tudo certo.....mas......nao tá...

 

e já deu um print_r/var_dump no $this->foto->path_arquivo pra ver o retorno dele?

 

Att.,

Andrey Moretti

Compartilhar este post


Link para o post
Compartilhar em outros sites

só por curiosidade........altera o nome do atributo do parametro.......

 

protected $foto;

 

pra

 

protected $foto_imagem;

 

e em seus respectivos lugares....e testa...

 

tem q ir debugando.....como disse o hinom.....APARENTEMENTE, ta tudo certo.....mas......nao tá...

 

e já deu um print_r/var_dump no $this->foto->path_arquivo pra ver o retorno dele?

 

Att.,

Andrey Moretti

Cara, mudei e não resolveu... :(

Estou a dois dias debugando e revendo esse código. Ou é algo muito estúpido ou alguma entidade malígna pairou sobre meu programa :P

Ele retorna uma string: string(16) "fotos\imagem.JPG"

Muito obrigado por toda ajuda!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bele?

 

Ta fácil!!

 

Tenta assim:

 

 

"bla bla bla bla '".$this->foto->path_arquivo."' bla bla bla"

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.