Ir para conteúdo

POWERED BY:

Arquivado

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

Matheus Brito

Acessar Objeto dentro do php

Recommended Posts

Pessoal o problema é o seguinte, eu mando um objeto do flex, para o php, so que preciso fazer iterar num loop um array que ta dentro desse objeto, porem não to conseguindo o acesso:

 

Consigo inserir o paciente, mas quando vo inserir o telefone, ele ate insere, porem o numero e o tipo do telefone não vai.

 

public function cadastrarPacientes($objPaciente){ // so to mandando o objeto de la do flex

                $mysql = mysql_pconnect(DATABASE_SERVER, DATABASE_USERNAME, DATABASE_PASSWORD);
        mysql_select_db(DATABASE_NAME);
                
                
                
                $dados = new PacienteVO();
                $dadosTel = new TelefoneVO();
                $dadosEnd = new EnderecoVO();
                
                $dados->idPaciente = $objPaciente['idPaciente'];
                $dados->nomePaciente =  $objPaciente['nomePaciente'];
                $dados->dataNascimento =  $objPaciente['dataNascimento'];
                $dados->observacoes =  $objPaciente['observacoes'];
                
                $query = "insert into Paciente(nomePaciente,dataNascimento,observacoes)values('{$dados->nomePaciente}',{$dados->                                        dataNascimento},'{$dados->observacoes}')";
                $result = mysql_query($query);
                
                $lastId = mysql_insert_id();

// Cadastro o paciente e pego o id dele, pra cadastrar os telefones

$dadosTel->Paciente_idPaciente = $lastId;
                
                
                $total = count($objPaciente['telefones']); // Aqui ta certo o valor do $total
                for($i=0;$i<$total;$i++){
                
                        
                        $dadosTel->telefone = $objPaciente->telefones[$i]->telefone; 
                        $dadosTel->tipo = $objPaciente->telefones[$i]->tipo;
                        $sql = "insert into Telefone(telefone,tipo,Paciente_idPaciente) values('{$dadosTel->telefone}','{$dadosTel->tipo}',{$dadosTel->Paciente_idPaciente})";
                $execute = mysql_query($sql);
                }


 

Alguma sugestão de como eu poderia acessa-los?

Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

De um print_r nos dados e veja se esta tudo correto (e poste aqui)

print_r($objPaciente->telefones);

E eu notei uma coisa, hora você acessa como array:

$total = count($objPaciente['telefones']); // Aqui ta certo o valor do $total

E hora como propriedade de um objeto:

$objPaciente->telefones[$i]->tipo;

Não seria:

$objPaciente['telefones'][$i]->tipo;

? (a não ser que seja um ArrayObject)

 

E no seu caso, seria melhor um foreach:

foreach($objPaciente['telefones'] as $tel){
  echo $tel->telefone;
  echo $tel->tipo;
}

OBS: Também notei que você não está escapando os dados http://br2.php.net/manual/en/function.stripslashes.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

Porque o mapeamento da minha entidade eu fiz assim:

public class PacienteVO{

public $id;
public $nome;
.
.
.
public $telefones; //Aqui é um array, la no flex do mesmo modo como array.
}

 

 

Só que andei pesquisando e vi que talvez devo colocar como do tipo TelefoneVO.

 

Porque em java eu criaria um vetor mas diria que ele eh do tipo TelefoneVO, já em php não sei como fazer isso, se é possivel fazer isso.

 

Quando eu tento fazer o acesso assim:

$dadosTel->tipo = $objPaciente['telefones'][$i]->tipo;

 

 

Ele da um erro pela parte do flex.

Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

public class PacienteVO{

 

heheh, você está misturando AS3 com PHP, classes no PHP não possuem visibilidade.

 

class PacienteVO

 

Você está utilizando webservices ou um POST normal ?

 

Poste aqui a parte Flex, para que vejamos como você está enviando os dados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

hehehe errei, mas não to misturando nao... rsrs

É porque la no flex eu tenho uma classe da mesma forma que faz o espelhamento.

Preciso apenas conseguir acessar as informacoes.

 

Ex: Passo um objeto chamado dados, dai no php eu quero acessar um vetor que tem dentro de dados:

 

$teste = new TelefoneVO();

 

public function cadastro($obj){ //obj é o parametro ou seja o objeto que mando de la

 

$teste->telefone = $obj->telefones[$i]->telefone; // Com isso eu deveria conseguir acessar, o telefone dentro do vetor de telefones, dentro do objeto, ou talvez eu não esteja conseguindo porque no flex posso trabalhar com uarrayCollection e no php nao.

 

 

}

 

Alguma luz, ta dificil to qse desistindo do php

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não tem como fazer igual ao java, mas você pode fazer algo parecido:

class TelefoneVO{
public $numero;
public $tipo;
public $paciente_id;

public function __construct($numero, $tipo){
   $this->numero = $numero;
   $this->tipo = $tipo;
 }

public function save(){
   return mysql_query("INSERT INTO x VALUES('$this->numero', '$this->tipo', $this->paciente_id)")
  }
}

class PacienteVO{

public $id;
public $nome;

public $telefones = array();

public function __construct($id, $nome){
   $this->id = $id;
   $this->nome = $nome;
}
public function addPhone(TelefoneVO $telefone){
   $telefone->paciente_id = $this->id;
   $this->telefones[] = $telefone;
}
}

 

Exemplo de uso:

$telefone1 = new TelefoneVO('9954862x', 'meutipo');
$telefone2 = new TelefoneVO('9951841x' , 'meutipo2');

$paciente = new PacienteVO(10, 'Lucas');
$paciente->addPhone($telefone1);
$paciente->addPhone($telefone2);

foreach($pacientes->telefones as $telefone){
   $telefone->save();
}

 

Foi só um exemplo doque você poderia fazer para organizar melhor.

 

Você chegou a checar se $objPaciente->telefones tem alguma coisa?

É através de RemoteObject, se não me engano, que o flex se comunica com php certo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Lucas é por remoteObject sim, mas tipo eu não preciso do construtor da classe porque não chamo a classe do php, eu simplesmente tenho as classes do VO, so pra espelhar o banco e ter acesso aos atributos, e na classe do flex que chamo os metodos do php, entao eu chamo os metodos usando o mesmo nome que tem na classe do php, e posso passar argumentos, tipo nesse problema que to tendo eu to passando so o objPaciente pra o php, porque dentro dele tenho as outras propriedades.

 

Quando eu faco o metodo dessa forma:

public function addPhone(TelefoneVO $telefone){
   $telefone->paciente_id = $this->id;
   $this->telefones[] = $telefone;
}

Ele da erro, no tipo ali TelefoneVO, nao sei porque.Não é erro de php é um erro no amfphp.

 

Tipo sera que ficaria mais facil se eu passasse tres parametros, de la do flex. Tipo o objeto do paciente, ai eu passaria o objeto Paciente apontando pro vetor de telefones e da mesma forma apontando pro vetor de enderecos.

 

Abs

 

Como eu debugaria, minhas classes em php, sendo que me servico é serializado, o php so tem a funcao de tratar e inserir no banco, teria alguma coisa pra usar como debug mesmo???

Abs

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.