Jump to content

Retornar Array key => Value


Dioguex
 Share

Recommended Posts

Boa tarde a todos,

Estou a tenta retornar um array key => Value de um servidor soap em php, mas não estou a conseguir, nesse sentido solicitava a vossa ajuda.

O objecto é que uma interface php receba um array com informações para preencher uma combo box automaticamente sendo que os dados estão numa base de dados.

A minha configuração é a seguinte:

Interface cliente faz um pedido ao web service soap:

$result = $client->call('fill_veiculo');
echo '<pre>';
print_r($result);
echo '</pre>';
echo "Veiculos: <select name='veiculos'>";
foreach ($result as $key => $value){
  echo "<option value=".$key.">".$value."</option>";
}
echo "</select>";
echo "<input type='submit' name='pesquisar' value='Pesquisar'>";

No web service soap tenho a função registada da seguinte forma:

$server->register('fill_veiculo',		// method name
array(),							// input parameters
array('return' => 'tns:ArrayOfString'),	  // output parameters
'urn:transporteswsdl',				// namespace
'urn:transporteswsdl#fill_veiculo',  // soapaction
'rpc',								// style
'encoded',							// use
'Says hello to the caller'			// documentation
);

A função propiamente dita é:

function fill_veiculo(){
  $conn = mysqli_connect ("localhost","root","master","engenhariasoftware");
  $sql = "SELECT * FROM Veiculo;";
  $result = mysqli_query ($conn, $sql);
  $arr = array();
  while ($row = mysqli_fetch_assoc($result)){
	$arr[] = array('id' => $row["idVeiculo"], "matricula" => $row["matricula"]);
	//$arr = array('1' => 'teste');
	//$arr = array('return' => array($row["idVeiculo"] => $row["matricula"],));
  }
  //$result = mysql_fetch_array($arr);
  mysqli_close ($conn);

  return $arr;
}

O que está a retornar como saída de dados é:

Array

(

[faultcode] => SOAP-ENV:Server

[faultactor] =>

[faultstring] => unable to serialize result

[detail] =>

)

Acham que me podem ajudar a perceber o que se passa aqui?

Obrigado.

Link to comment
Share on other sites

Obrigado pela resposta.

O problema estava no tipo complexo de dados como suspeitava, estava mal declarado.

Deixo aqui o código, pois pode ajudar outro como eu.

Declarar tipo complexo de dados:

$server->wsdl->addComplexType('ArrayOfString', 'complexType', 'struct', 'all', '', array('veiculos' => array('idVeiculo' => 'xsd:string', 'matricula' => 'xsd:string')));

Registo da função:

$server->register('fill_veiculo',	    // method name
   array(),						    // input parameters
   array('ArrayOfString' => 'tns:ArrayOfString'),	  // output parameters
   'urn:transporteswsdl',			    // namespace
   'urn:transporteswsdl#fill_veiculo',  // soapaction
   'rpc',							    // style
   'encoded',						    // use
   'Says hello to the caller'		    // documentation
   );

Função:

function fill_veiculo(){
    $conn = mysqli_connect ("localhost","root","master","engenhariasoftware");
    $sql = "SELECT idVeiculo, matricula FROM Veiculo;";
    $result = mysqli_query ($conn, $sql);
    $arrayToReturn=array();
    while ($row = mysqli_fetch_assoc($result)){
	    $arrayToReturn[] = array('idVeiculo' => $row["idVeiculo"], 'matricula'=> $row["matricula"]);
    }
    mysqli_close ($conn);

   return array('veiculos'=>$arrayToReturn);
}
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.