Dioguex Posted January 7, 2016 at 02:38 PM Report Share #591574 Posted January 7, 2016 at 02:38 PM 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 More sharing options...
HappyHippyHippo Posted January 7, 2016 at 05:10 PM Report Share #591591 Posted January 7, 2016 at 05:10 PM eu tive esse problema p'rai à uns 2 anos. se bem me lembro o problema é na declaração do tipo de dados de retorno. vou ver se vejo onde tenho isso IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
Dioguex Posted January 9, 2016 at 12:52 PM Author Report Share #591693 Posted January 9, 2016 at 12:52 PM 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now