Ir para conteúdo

POWERED BY:

Arquivado

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

sjscosta

Webservices

Recommended Posts

Ola pessoal,

 

Estou tendo um probleminha com meu webservices...

é o seguinte o cliente mostra apenas o ultimo registo introduzido na tabela books.

Alguém me pode explicar o que está a acontecer....

Obrigado

 

SERVER.PHP

<?php
	//call library 
	require_once ('nusoap.php'); 
	 
	//using soap_server to create server object 
	$server = new soap_server; 
	 
	//register a function that works on server 
	$server->register('getallbook'); 
	 
	// create the function 
	function getallbook() 
	{ 
		$conn = mysql_connect('localhost','root','pass'); 
		$link = mysql_select_db('testedb', $conn); 

		$sql = "SELECT * FROM book"; 
		$q  = mysql_query($sql); 
		$num = mysql_num_rows($q);
		while($r = mysql_fetch_array($q)){ 
		  $items = array('cd'=>$r['cd'], 
						 'title'=>$r['title'], 
						 'author'=>$r['author'], 
						 'publisher'=>$r['publisher']);  
		} 
		return $items; 
	 
	} 
	 
	// create HTTP listener 
	$server->service($HTTP_RAW_POST_DATA); 
	 
	exit(); 
	 
	?>

CLIENTE.PHP

<?php 
	require_once ('nusoap.php'); 
	 
	$client = new soapclient('http://localhost/webservices/server.php'); 
	 
	$response = $client->call('getallbook'); 
	 
	if($client->fault) 
	{ 
		echo "FAULT: <p>Code: (".$client->faultcode.")</p>"; 
		echo "String: ".$client->faultstring; 
	} 
	else 
	{ 
		$r = $response; 
		$count = count($r); 
		
?> 
		<table border="1"> 
		<tr> 
			<th>Code</th> 
			<th>Title</th>		 
			<th>Author</th>		 
			<th>Publisher</th>		 
		</tr> 
<?php 
	   for($i=0;$i<=$count-1;$i++){ 
		
	  
?> 
		<tr> 
		  <td><?php echo $r['cd']?></td> 
			<td><?php echo $r['title']?></td> 
			<td><?php echo $r['author']?></td>				 
			<td><?php echo $r['publisher']?></td> 
		</tr> 
<?php	
		} 
?> 
		</table> 
<?php 
	} 
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você está recriando a variável a cada iteração:

 

while($r = mysql_fetch_array($q)){
		  $items = array('cd'=>$r['cd'],
						 'title'=>$r['title'],
						 'author'=>$r['author'],
						 'publisher'=>$r['publisher']);  
		}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Criar um array, por exemplo:

while($r = mysql_fetch_array($q)){
		  $items[] = array('cd'=>$r['cd'],
						 'title'=>$r['title'],
						 'author'=>$r['author'],
						 'publisher'=>$r['publisher']);  
		}

Compartilhar este post


Link para o post
Compartilhar em outros sites

com a soloção que apresentas-te eu obtenho :

 

Notice: Undefined index: cd in cliente.php on line 32

Notice: Undefined index: title in cliente.php on line 33

Notice: Undefined index: author in cliente.php on line 34

Notice: Undefined index: publisher in cliente.php on line 35

 

 

Como faço para resolver?

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você tem que testar, imprimir o retorno pra ver o que está recebendo.

Como você mecheu na estrutura do array original, as chaves já não estão iguais.

Dica: use print_r pra imprimir arrays.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só complementando a dica do Marcio, para facilitar a visualização, use <pre> antes e </pre> depois do print_r, pois fica ainda mais fácil de enxergar o array, principalmente se for de diversos níveis.

 

Carlos Eduardo

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.