Buenas .
estoy haciendo un ejercicio , en el cual tengo una base de datos en MYSQL con una tabla:
CONTACTO
identificador int, llave primaria (auto incrementable)
nombre varchar(50),
dirección varchar(100),
teléfono varchar(9),
email varchar(100)
Me pide crear un servicio web con PHP y SOAP que haga.
Crear contactos. se piden los datos del contacto y se guardan en la base de datos.
Buscar contacto: el usuario podrá buscar contactos por el campo nombre escribiéndolo en una caja de texto de un formulario.
Visualizar todos los contactos: se mostrarán todos los datos de todos los contactos en una tabla
Las funciones que insertan y muestran datos de la base de datos se deben programar en el servidor SOAP. El cliente deberá mostrar la interfaz de la aplicación y llamará a las funciones del servidor cuando se requiera.
He creado el archivo servicio.php en el que tengo la funcion creaContacto
<?php function creaContacto($nombre, $direccion, $telefono, $email){ return ""; } require_once("lib/nusoap.php"); $namespace = "http://localhost/DAW_M07_ACT_05_Javier_Martin/servidor.php"; $server = new soap_server(); $server->configureWSDL("WSDLTST"); $server->soap_defencoding = 'UTF-8'; $server->wsdl->schemaTargetNamespace = $namespace; //parametros para registrar la funcion// $server->register( 'creaContacto', array('nombre' => 'xsd:string', 'direccion' => 'xsd:string', 'telefono' => 'xsd:string', 'email' => 'xsd:string'), array('return'=>'xsd:string'), $namespace, false, 'rpc', 'encoded', 'Metodo holaMundo por excelencia' ); //servidor $server->service(isset($GLOBALS['HTTP_RAW_POST_DATA']) ? $GLOBALS['HTTP_RAW_POST_DATA'] : '');?>
y otro archivo llamado cliente.php desde el que llama a la funcion
<?php require_once("lib/nusoap.php"); $client = new soapclient('http://localhost/clase11/servidor.php?wsdl'); //llamo a la funcion// $result = $client->holaMundo(); echo "$result<br/>";?>
La base de datos la tengo creada y la tabla tambien.
Buenas, te dejo una posible solución.
En el archivo servidor.php e incluido las funciones para crear nuevo contacto, buscar contacto y mostrar todos los contactos:
<?php require_once('nusoap-0.9.5/lib/nusoap.php'); $miURL = 'http://localhost/ejemplos/Nuevacarpeta/nusoap0000'; $server = new soap_server(); $server->configureWSDL('WSDLTST', $miURL); $server->wsdl->schemaTargetNamespace=$miURL; $server->register('creaContacto', array('nombre' => 'xsd:string', 'direccion' => 'xsd:string', 'telefono' => 'xsd:string', 'email' => 'xsd:string'), array('return' => 'xsd:string'), $miURL); $server->register('mostrarTodosContactos', array(), array('return' => 'xsd:string'), $miURL); $server->register('buscarContacto', array('nombre' => 'xsd:string'), array('return' => 'xsd:string'), $miURL); function buscarContacto($nombre) { $conn = mysqli_connect($servername, $username, $password, $dbname); $sql = "SELECT * FROM contacto where nombre='".$nombre."'"; $resultado = mysqli_query($conn, $sql); $listado = "<table><tr><td>ID</td><td>Nombre</td><td>Dirección</td><td>Teléfono</td><td>email</td></tr>"; while ($fila = mysqli_fetch_array($resultado)){ $listado = $listado."<tr><td>".$fila['id']."</td><td>".$fila['nombre'] ."</td><td>".$fila['direccion']."</td><td>".$fila['telefono'] ."</td><td>".$fila['email']."</td></tr>"; } $listado = $listado."</table>"; mysqli_close($conn); return new soapval('return', 'xsd:string', $listado); } function mostrarTodosContactos() { $conn = mysqli_connect($servername, $username, $password, $dbname); $sql = "SELECT * FROM contacto"; $resultado = mysqli_query($conn, $sql); $listado = "<table><tr><td>ID</td><td>Nombre</td><td>Dirección</td><td>Teléfono</td><td>email</td></tr>"; while ($fila = mysqli_fetch_array($resultado)){ $listado = $listado."<tr><td>".$fila['id']."</td><td>".$fila['nombre'] ."</td><td>".$fila['direccion']."</td><td>".$fila['telefono'] ."</td><td>".$fila['email']."</td></tr>"; } $listado = $listado."</table>"; mysqli_close($conn); return new soapval('return', 'xsd:string', $listado); } function creaContacto($nombre, $direccion, $telefono, $email){ $conn = mysqli_connect($servername, $username, $password, $dbname); $sql = "INSERT INTO contacto (nombre, direccion, telefono, email) VALUES ('".$nombre."', '".$direccion."', '".$telefono."', '".$email."')"; if (mysqli_query($conn, $sql)) { $msg = "Se introdujo un nuevo registro en la BD; ".$nombre; } else { $msg = "Error: " . $sql . "<br>" . mysqli_error($conn); } mysqli_close($conn); return new soapval('return', 'xsd:string', $msg); } if ( !isset( $HTTP_RAW_POST_DATA ) ) { $HTTP_RAW_POST_DATA = file_get_contents( 'php://input' ); } $server->service($HTTP_RAW_POST_DATA);?>
En los siguientes códigos, en cada uno de ellos se llama a uno de las tres funciones que contiene servidor.php.
<?php require_once('nusoap-0.9.5/lib/nusoap.php'); $serverURL = 'http://localhost/ejemplos/Nuevacarpeta/nusoap0000'; $serverScript = 'servidor.php'; $metodoALlamar = 'creaContacto'; $cliente = new nusoap_client("$serverURL/$serverScript?wsdl", 'wsdl'); $result = $cliente->call( "$metodoALlamar", array('nombre' => 'Rubia', 'direccion' => 'Colombia', 'telefono' => '456789123', 'email' => 'trapo@paco.com'), "uri:$serverURL/$serverScript", "uri:$serverURL/$serverScript/$metodoALlamar" ); echo 'Respuesta: '.$result;?>
<?php require_once('nusoap-0.9.5/lib/nusoap.php'); $serverURL = 'http://localhost/ejemplos/Nuevacarpeta/nusoap0000'; $serverScript = 'servidor.php'; $metodoALlamar = 'buscarContacto'; $cliente = new nusoap_client("$serverURL/$serverScript?wsdl", 'wsdl'); $result = $cliente->call( "$metodoALlamar", array('nombre' => 'Juan'), "uri:$serverURL/$serverScript", "uri:$serverURL/$serverScript/$metodoALlamar" ); echo $result;?>
<?php require_once('nusoap-0.9.5/lib/nusoap.php'); $serverURL = 'http://localhost/ejemplos/Nuevacarpeta/nusoap0000'; $serverScript = 'servidor.php'; $metodoALlamar = 'mostrarTodosContactos'; $cliente = new nusoap_client("$serverURL/$serverScript?wsdl", 'wsdl'); $result = $cliente->call( "$metodoALlamar", array(), "uri:$serverURL/$serverScript", "uri:$serverURL/$serverScript/$metodoALlamar" ); echo $result;?>
Ahora ya solo faltaría que lo acomodases con el formulario que usará el cliente.
Saludos. ;D
Buenas.
Sí, esos tres códigos son de parte del cliente, lo hice separado en tres partes para que se viese mejor.
Las funciones las puedes poner en el lugar que quieras, no habrá ningún problema al ejecutar el código.
Tendrías que hacer 3 formularios, yo los haría en un archivo independiente y dependiendo de que datos se envien a clientes.php ejecutar un código u otro,en clientes.php tambíen se podrían crear tres funciones, eso ya depende de que te pueda ser más práctico a tí.
Te dejo el código de los formularios y como quedaría el archivo clientes.php.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Servicios web</title>
</head>
<body>
<form action="cliente.php" method="post" >
Nombre: <input type="text" name="nombre" /><br/>
Direccion: <input type="text" name="direccion" /><br/>
Teléfono: <input type="text" name="telefono" /><br/>
Email: <input type="text" name="email" /><br/>
<input type="text" name="funcion" value="creaContacto" hidden />
<input type="submit" value="Crear nuevo usuario" />
</form>
<hr/>
<form action="cliente.php" method="post" >
Nombre<input type="text" name="nombre" />
<input type="text" name="funcion" value="buscarContacto" hidden />
<input type="submit" value="Buscar Contacto" />
</form>
<hr/>
<form action="cliente.php" method="post" >
<input type="text" name="funcion" value="mostrarTodosContactos" hidden />
<input type="submit" value="Mostrar todos los contactos" />
</form>
</body>
</html>
<?php require_once('nusoap-0.9.5/lib/nusoap.php'); $serverURL = 'http://localhost/ejemplos/Nuevacarpeta/nusoap0000'; $serverScript = 'servidor.php'; $metodoALlamar = $_POST['funcion']; $cliente = new nusoap_client("$serverURL/$serverScript?wsdl", 'wsdl'); if(strcmp($metdodALlamar, 'creaContacto')) { $result = $cliente->call( "$metodoALlamar", array('nombre' => $_POST['nombre'], 'direccion' => $_POST['direccion'], 'telefono' => $_POST['telefono'], 'email' => $_POST['email']), "uri:$serverURL/$serverScript", "uri:$serverURL/$serverScript/$metodoALlamar" ); } else if($metdodALlamar == 'buscarContacto') { $result = $cliente->call( "$metodoALlamar", array('nombre' => $_POST['nombre']), "uri:$serverURL/$serverScript", "uri:$serverURL/$serverScript/$metodoALlamar" ); } else if(strcmp($metdodALlamar, 'mostrarTodosContactos')) { $result = $cliente->call( "$metodoALlamar", array(), "uri:$serverURL/$serverScript", "uri:$serverURL/$serverScript/$metodoALlamar" ); } echo $result."<br><br><a href='formularios.php'>Volver a formularios</a>";?>
Saludos. ;D
Te paso como tengo los codigos
formularios.php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Servicios web</title>
</head>
<body>
<form action="cliente.php" method="post" >
Nombre: <input type="text" name="nombre" /><br/>
Direccion: <input type="text" name="direccion" /><br/>
Teléfono: <input type="text" name="telefono" /><br/>
Email: <input type="text" name="email" /><br/>
<input type="text" name="funcion" value="creaContacto" hidden />
<input type="submit" value="Crear nuevo usuario" />
</form>
<hr/>
<form action="cliente.php" method="post" >
Nombre<input type="text" name="nombre" />
<input type="text" name="funcion" value="buscarContacto" hidden />
<input type="submit" value="Buscar Contacto" />
</form>
<hr/>
<form action="cliente.php" method="post" >
<input type="text" name="funcion" value="mostrarTodosContactos" hidden />
<input type="submit" value="Mostrar todos los contactos" />
</form>
</body>
</html>
cliente.php
<?php require_once("/lib/nusoap.php"); $namespace = "http://localhost/DAW_M07_ACT_05_Javier_Martin/servidor.php"; $serverScript = 'servidor.php'; $metodoALlamar = $_POST['funcion']; $client = new nusoap_client("$namespace/$serverScript?wsdl", 'wsdl'); if(strcmp($metodoALlamar, 'creaContacto')) { $result = $client->call( "$metodoALlamar", array('nombre' => $_POST['nombre'], 'direccion' => $_POST['direccion'], 'telefono' => $_POST['telefono'], 'email' => $_POST['email']), "uri:$namespace/$serverScript", "uri:$namespace/$serverScript/$metodoALlamar" ); } else if($metodoALlamar == 'buscarContacto') { $result = $client->call( "$metodoALlamar", array('nombre' => $_POST['nombre']), "uri:$namespace/$serverScript", "uri:$namespace/$serverScript/$metodoALlamar" ); } else if(strcmp($metodoALlamar, 'mostrarTodosContactos')) { $result = $client->call( "$metodoALlamar", array(), "uri:$namespace/$serverScript", "uri:$namespace/$serverScript/$metodoALlamar" ); } echo $result."<br><br><a href='formularios.php'>Volver a formularios</a>";?>
<?php require_once("lib/nusoap.php"); $namespace = "http://localhost/DAW_M07_ACT_05_Javier_Martin/servidor.php"; $serverScript = 'servidor.php'; $metodoALlamar = 'creaContacto'; $client = new soapclient('http://localhost/DAW_M07_ACT_05_Javier_Martin/servidor.php?wsdl'); $result = $client->call( "$metodoALlamar", array('nombre' => 'Pepe', 'direccion' => 'Colombia', 'telefono' => '456789123', 'email' => 'trapo@paco.com'), "uri:$namespace/$serverScript", "uri:$namespace/$serverScript/$metodoALlamar" ); echo 'Respuesta: '.$result; ?>
<?php require_once("lib/nusoap.php"); $namespace = "http://localhost/DAW_M07_ACT_05_Javier_Martin/servidor.php"; $serverScript = 'servidor.php'; $metodoALlamar = 'buscarContacto'; $client = new soapclient('http://localhost/DAW_M07_ACT_05_Javier_Martin/servidor.php?wsdl'); $result = $client->call( "$metodoALlamar", array('nombre' => 'Juan'), "uri:$namespace/$serverScript", "uri:$namespace/$serverScript/$metodoALlamar" ); echo $result;?>
<?php require_once("lib/nusoap.php"); $namespace = "http://localhost/DAW_M07_ACT_05_Javier_Martin/servidor.php"; $serverScript = 'servidor.php'; $metodoALlamar = 'mostrarTodosContactos'; $client = new soapclient('http://localhost/DAW_M07_ACT_05_Javier_Martin/servidor.php?wsdl'); $result = $client->call( "$metodoALlamar", array(), "uri:$namespace/$serverScript", "uri:$namespace/$serverScript/$metodoALlamar" ); echo $result;?>
servidor.php
<?php require_once("lib/nusoap.php"); $namespace = "http://localhost/DAW_M07_ACT_05_Javier_Martin/servidor.php"; $server = new soap_server(); $server->configureWSDL("WSDLTST"); $server->soap_defencoding = 'UTF-8'; $server->wsdl->schemaTargetNamespace = $namespace; function creaContacto($nombre, $direccion, $telefono, $email){ $conn = mysqli_connect($host, $user, $pass, $db_name)or die("Error de conexión con la base de datos"); $sql = "INSERT INTO CONTACTO (nombre, direccion, telefono, email) VALUES ('".$nombre."', '".$direccion."', '".$telefono."', '".$email."')"; if (mysqli_query($conn, $sql)) { $msg = "Se introdujo un nuevo registro en la BD; ".$nombre; } else { $msg = "Error: " . $sql . "<br>" . mysqli_error($conn); } mysqli_close($conn); return new $msg; } function buscarContacto($nombre) { $conn = mysqli_connect($host, $user, $pass, $db_name); $sql = "SELECT * FROM CONTACTO where nombre='".$nombre."'"; $resultado = mysqli_query($conn, $sql); $listado = "<table><tr><td>ID</td><td>Nombre</td><td>Dirección</td><td>Teléfono</td><td>email</td></tr>"; while ($fila = mysqli_fetch_array($resultado)){ $listado = $listado."<tr><td>".$fila['id']."</td><td>".$fila['nombre'] ."</td><td>".$fila['direccion']."</td><td>".$fila['telefono'] ."</td><td>".$fila['email']."</td></tr>"; } $listado = $listado."</table>"; mysqli_close($conn); return $listado; } function mostrarTodosContactos() { $conn = mysqli_connect($host, $user, $pass, $db_name); $sql = "SELECT * FROM CONTACTO"; $resultado = mysqli_query($conn, $sql); $listado = "<table><tr><td>ID</td><td>Nombre</td><td>Dirección</td><td>Teléfono</td><td>email</td></tr>"; while ($fila = mysqli_fetch_array($resultado)){ $listado = $listado."<tr><td>".$fila['id']."</td><td>".$fila['nombre'] ."</td><td>".$fila['direccion']."</td><td>".$fila['telefono'] ."</td><td>".$fila['email']."</td></tr>"; } $listado = $listado."</table>"; mysqli_close($conn); return $listado; } $server->register ('creaContacto', array('nombre'=>'xsd:string','direccion'=>'xsd:string', 'telefono'=>'xsd:string','email'=>'xsd:string'), array('return'=> 'xsd:string'), $namespace, false, 'rpc', 'encoded', 'funcion que crea contacto' ); $server->register ('mostrarTodosContactos', array(), array('return' => 'xsd:string'), $namespace, false, 'rpc', 'encoded', 'funcion que crea muestra los contactos' ); $server->register ('buscarContacto', array('nombre' => 'xsd:string'), array('return' => 'xsd:string'), $namespace, false, 'rpc', 'encoded', 'funcion que crea muestra los contactos' ); $server->service(isset($GLOBALS['HTTP_RAW_POST_DATA']) ? $GLOBALS['HTTP_RAW_POST_DATA'] : '');?>
Cuando cargo el archivo formulario.php me muestra el formulario, pero cuando creo un usuario me da un fatal error con el siguiente comentario:
Fatal error: Uncaught SoapFault exception: [Client] Function ("call") is not a valid method for this service in C:\xampp\htdocs\DAW_M07_ACT_05_Javier_Martin\cliente.php:61 Stack trace: #0 C:\xampp\htdocs\DAW_M07_ACT_05_Javier_Martin\cliente.php(61): SoapClient->__call('call', Array) #1 C:\xampp\htdocs\DAW_M07_ACT_05_Javier_Martin\cliente.php(61): SoapClient->call('creaContacto', Array, 'uri:http://loca...', 'uri:http://loca...') #2 {main} thrown in C:\xampp\htdocs\DAW_M07_ACT_05_Javier_Martin\cliente.php on line 61
si, en un archivo llamado datos.php
<?php$host = 'localhost';$user = 'root';$pass = '';$db_name = 'agenda';?>
tenia puesto el de ayer y el de hoy
ahora se me queda asi
<?php require_once("/lib/nusoap.php"); $namespace = "http://localhost/DAW_M07_ACT_05_Javier_Martin/servidor.php"; $serverScript = 'servidor.php'; $metodoALlamar = $_POST['funcion']; $client = new nusoap_client("$namespace/$serverScript?wsdl", 'wsdl'); if(strcmp($metodoALlamar, 'creaContacto')) { $result = $client->call( "$metodoALlamar", array('nombre' => $_POST['nombre'], 'direccion' => $_POST['direccion'], 'telefono' => $_POST['telefono'], 'email' => $_POST['email']), "uri:$namespace/$serverScript", "uri:$namespace/$serverScript/$metodoALlamar" ); } else if($metodoALlamar == 'buscarContacto') { $result = $client->call( "$metodoALlamar", array('nombre' => $_POST['nombre']), "uri:$namespace/$serverScript", "uri:$namespace/$serverScript/$metodoALlamar" ); } else if(strcmp($metodoALlamar, 'mostrarTodosContactos')) { $result = $client->call( "$metodoALlamar", array(), "uri:$namespace/$serverScript", "uri:$namespace/$serverScript/$metodoALlamar" ); } echo $result."<br><br><a href='formularios.php'>Volver a formularios</a>";?>
Voy a perder la cabeza con este ejercicio, me sigue dando error
<?php require_once("/lib/nusoap.php"); $namespace = "http://localhost/DAW_M07_ACT_05_Javier_Martin"; $serverScript = 'servidor.php'; $metodoALlamar = $_POST['funcion']; $client = new nusoap_client("$namespace?wsdl", 'wsdl'); if(strcmp($metodoALlamar, 'creaContacto')) { $result = $client->call( "$metodoALlamar", array('nombre' => $_POST['nombre'], 'direccion' => $_POST['direccion'], 'telefono' => $_POST['telefono'], 'email' => $_POST['email']), "uri:$namespace/$serverScript", "uri:$namespace/$serverScript/$metodoALlamar" ); } else if($metodoALlamar == 'buscarContacto') { $result = $client->call( "$metodoALlamar", array('nombre' => $_POST['nombre']), "uri:$namespace/$serverScript", "uri:$namespace/$serverScript/$metodoALlamar" ); } else if(strcmp($metodoALlamar, 'mostrarTodosContactos')) { $result = $client->call( "$metodoALlamar", array(), "uri:$namespace/$serverScript", "uri:$namespace/$serverScript/$metodoALlamar" ); } echo $result."<br><br><a href='formularios.php'>Volver a formularios</a>";?>
Perdón, es que no me expliqué bien en el anterior mensaje, cuando decía "o cambias esa última línea por esta otra:" era solo para cambiar esa parte solo.
<?php require_once("/lib/nusoap.php"); $namespace = "http://localhost/DAW_M07_ACT_05_Javier_Martin"; $serverScript = 'servidor.php'; $metodoALlamar = $_POST['funcion']; $client = new nusoap_client(""$namespace/$serverScript?wsdl"", 'wsdl'); if(strcmp($metodoALlamar, 'creaContacto')) { $result = $client->call( "$metodoALlamar", array('nombre' => $_POST['nombre'], 'direccion' => $_POST['direccion'], 'telefono' => $_POST['telefono'], 'email' => $_POST['email']), "uri:$namespace/$serverScript", "uri:$namespace/$serverScript/$metodoALlamar" ); } else if($metodoALlamar == 'buscarContacto') { $result = $client->call( "$metodoALlamar", array('nombre' => $_POST['nombre']), "uri:$namespace/$serverScript", "uri:$namespace/$serverScript/$metodoALlamar" ); } else if(strcmp($metodoALlamar, 'mostrarTodosContactos')) { $result = $client->call( "$metodoALlamar", array(), "uri:$namespace/$serverScript", "uri:$namespace/$serverScript/$metodoALlamar" ); } echo $result."<br><br><a href='formularios.php'>Volver a formularios</a>";?>
Como lo dejé ahora debería funcionar.
A mí si me funciona.
;D
exacto
te pego el codigo de servidor.php
<?php require_once("datos.php"); require_once("lib/nusoap.php"); $namespace = "http://localhost/DAW_M07_ACT_05_Javier_Martin/servidor.php"; $server = new soap_server(); $server->configureWSDL("WSDLTST"); $server->soap_defencoding = 'UTF-8'; $server->wsdl->schemaTargetNamespace = $namespace; function creaContacto($nombre, $direccion, $telefono, $email){ $conn = mysqli_connect($host, $user, $pass, $db_name)or die("Error de conexión con la base de datos"); $sql = "INSERT INTO contacto (nombre, direccion, telefono, email) VALUES ('".$nombre."', '".$direccion."', '".$telefono."', '".$email."')"; if (mysqli_query($conn, $sql)) { $msg = "Se introdujo un nuevo registro en la BD; ".$nombre; } else { $msg = "Error: " . $sql . "<br>" . mysqli_error($conn); } mysqli_close($conn); return new soapval('return', 'xsd:string', $msg); } function buscarContacto($nombre) { $conn = mysqli_connect($host, $user, $pass, $db_name); $sql = "SELECT * FROM contacto where nombre='".$nombre."'"; $resultado = mysqli_query($conn, $sql); $listado = "<table><tr><td>ID</td><td>Nombre</td><td>Dirección</td><td>Teléfono</td><td>email</td></tr>"; while ($fila = mysqli_fetch_array($resultado)){ $listado = $listado."<tr><td>".$fila['id']."</td><td>".$fila['nombre'] ."</td><td>".$fila['direccion']."</td><td>".$fila['telefono'] ."</td><td>".$fila['email']."</td></tr>"; } $listado = $listado."</table>"; mysqli_close($conn); return new soapval('return', 'xsd:string', $listado); } function mostrarTodosContactos() { $conn = mysqli_connect($host, $user, $pass, $db_name); $sql = "SELECT * FROM contacto"; $resultado = mysqli_query($conn, $sql); $listado = "<table><tr><td>ID</td><td>Nombre</td><td>Dirección</td><td>Teléfono</td><td>email</td></tr>"; while ($fila = mysqli_fetch_array($resultado)){ $listado = $listado."<tr><td>".$fila['id']."</td><td>".$fila['nombre'] ."</td><td>".$fila['direccion']."</td><td>".$fila['telefono'] ."</td><td>".$fila['email']."</td></tr>"; } $listado = $listado."</table>"; mysqli_close($conn); return $listado; } $server->register ('creaContacto', array('nombre'=>'xsd:string','direccion'=>'xsd:string', 'telefono'=>'xsd:string','email'=>'xsd:string'), array('return'=> 'xsd:string'), $namespace, false, 'rpc', 'encoded', 'funcion que crea contacto' ); $server->register ('mostrarTodosContactos', array(), array('return' => 'xsd:string'), $namespace, false, 'rpc', 'encoded', 'funcion que crea muestra los contactos' ); $server->register ('buscarContacto', array('nombre' => 'xsd:string'), array('return' => 'xsd:string'), $namespace, false, 'rpc', 'encoded', 'funcion que crea muestra los contactos' ); $server->service(isset($GLOBALS['HTTP_RAW_POST_DATA']) ? $GLOBALS['HTTP_RAW_POST_DATA'] : '');?>
cliente.php
<?php require_once("/lib/nusoap.php"); $namespace = "http://localhost/DAW_M07_ACT_05_Javier_Martin"; $serverScript = 'servidor.php'; $metodoALlamar = $_POST['funcion']; $client = new nusoap_client("$namespace/$serverScript?wsdl", 'wsdl'); if(strcmp($metodoALlamar, 'creaContacto')) { $result = $client->call( "$metodoALlamar", array('nombre' => $_POST['nombre'], 'direccion' => $_POST['direccion'], 'telefono' => $_POST['telefono'], 'email' => $_POST['email']), "uri:$namespace/$serverScript", "uri:$namespace/$serverScript/$metodoALlamar" ); } else if($metodoALlamar == 'buscarContacto') { $result = $client->call( "$metodoALlamar", array('nombre' => $_POST['nombre']), "uri:$namespace/$serverScript", "uri:$namespace/$serverScript/$metodoALlamar" ); } else if(strcmp($metodoALlamar, 'mostrarTodosContactos')) { $result = $client->call( "$metodoALlamar", array(), "uri:$namespace/$serverScript", "uri:$namespace/$serverScript/$metodoALlamar" ); } echo $result."<br><br><a href='formularios.php'>Volver a formularios</a>";?>
servidor.php
<?php require_once("datos.php"); require_once("lib/nusoap.php"); $namespace = "http://localhost/DAW_M07_ACT_05_Javier_Martin/servidor.php"; $server = new soap_server(); $server->configureWSDL("WSDLTST"); $server->soap_defencoding = 'UTF-8'; $server->wsdl->schemaTargetNamespace = $namespace; function creaContacto($nombre, $direccion, $telefono, $email){ require_once("datos.php"); $conn = mysqli_connect($host, $user, $pass, $db_name)or die("Error de conexión con la base de datos"); $sql = "INSERT INTO contacto (nombre, direccion, telefono, email) VALUES ('".$nombre."', '".$direccion."', '".$telefono."', '".$email."')"; if (mysqli_query($conn, $sql)) { $msg = "Se introdujo un nuevo registro en la BD; ".$nombre; } else { $msg = "Error: " . $sql . "<br>" . mysqli_error($conn); } mysqli_close($conn); return new soapval('return', 'xsd:string', $msg); } function buscarContacto($nombre) { require_once("datos.php"); $conn = mysqli_connect($host, $user, $pass, $db_name); $sql = "SELECT * FROM contacto where nombre='".$nombre."'"; $resultado = mysqli_query($conn, $sql); $listado = "<table><tr><td>identificador</td><td>Nombre</td><td>Dirección</td><td>Teléfono</td><td>email</td></tr>"; while ($fila = mysqli_fetch_array($resultado)){ $listado = $listado."<tr><td>".$fila['identificador']."</td><td>".$fila['nombre'] ."</td><td>".$fila['direccion']."</td><td>".$fila['telefono'] ."</td><td>".$fila['email']."</td></tr>"; } $listado = $listado."</table>"; mysqli_close($conn); return new soapval('return', 'xsd:string', $listado); } function mostrarTodosContactos() { require_once("datos.php"); $conn = mysqli_connect($host, $user, $pass, $db_name); $sql = "SELECT * FROM contacto"; $resultado = mysqli_query($conn, $sql); $listado = "<table><tr><td>identificador</td><td>Nombre</td><td>Dirección</td><td>Teléfono</td><td>email</td></tr>"; while ($fila = mysqli_fetch_array($resultado)){ $listado = $listado."<tr><td>".$fila['identificador']."</td><td>".$fila['nombre'] ."</td><td>".$fila['direccion']."</td><td>".$fila['telefono'] ."</td><td>".$fila['email']."</td></tr>"; } $listado = $listado."</table>"; mysqli_close($conn); return $listado; } $server->register ('creaContacto', array('nombre'=>'xsd:string','direccion'=>'xsd:string', 'telefono'=>'xsd:string','email'=>'xsd:string'), array('return'=> 'xsd:string'), $namespace, false, 'rpc', 'encoded', 'funcion que crea contacto' ); $server->register ('mostrarTodosContactos', array(), array('return' => 'xsd:string'), $namespace, false, 'rpc', 'encoded', 'funcion que crea muestra los contactos' ); $server->register ('buscarContacto', array('nombre' => 'xsd:string'), array('return' => 'xsd:string'), $namespace, false, 'rpc', 'encoded', 'funcion que crea muestra los contactos' ); $server->service(isset($GLOBALS['HTTP_RAW_POST_DATA']) ? $GLOBALS['HTTP_RAW_POST_DATA'] : '');?>
Cambié algunas cosas en servidor.php
<?php //require_once("datos.php");// require_once("lib/nusoap.php"); //$namespace = "http://localhost/DAW_M07_ACT_05_Javier_Martin/servidor.php"; $namespace = "http://localhost/DAW_M07_ACT_05_Javier_Martin"; $server = new soap_server(); $server->configureWSDL("WSDLTST"); $server->soap_defencoding = 'UTF-8'; $server->wsdl->schemaTargetNamespace = $namespace; function creaContacto($nombre, $direccion, $telefono, $email){ require_once("datos.php"); $conn = mysqli_connect($host, $user, $pass, $db_name)or die("Error de conexión con la base de datos"); $sql = "INSERT INTO contacto (nombre, direccion, telefono, email) VALUES ('".$nombre."', '".$direccion."', '".$telefono."', '".$email."')"; if (mysqli_query($conn, $sql)) { $msg = "Se introdujo un nuevo registro en la BD; ".$nombre; } else { $msg = "Error: " . $sql . "<br>" . mysqli_error($conn); } mysqli_close($conn); return new soapval('return', 'xsd:string', $msg); } function buscarContacto($nombre) { require_once("datos.php"); $conn = mysqli_connect($host, $user, $pass, $db_name); $sql = "SELECT * FROM contacto where nombre='".$nombre."'"; $resultado = mysqli_query($conn, $sql); $listado = "<table><tr><td>identificador</td><td>Nombre</td><td>Dirección</td><td>Teléfono</td><td>email</td></tr>"; while ($fila = mysqli_fetch_array($resultado)){ $listado = $listado."<tr><td>".$fila['identificador']."</td><td>".$fila['nombre'] ."</td><td>".$fila['direccion']."</td><td>".$fila['telefono'] ."</td><td>".$fila['email']."</td></tr>"; } $listado = $listado."</table>"; mysqli_close($conn); return new soapval('return', 'xsd:string', $listado); } function mostrarTodosContactos() { require_once("datos.php"); $conn = mysqli_connect($host, $user, $pass, $db_name); $sql = "SELECT * FROM contacto"; $resultado = mysqli_query($conn, $sql); $listado = "<table><tr><td>identificador</td><td>Nombre</td><td>Dirección</td><td>Teléfono</td><td>email</td></tr>"; while ($fila = mysqli_fetch_array($resultado)){ $listado = $listado."<tr><td>".$fila['identificador']."</td><td>".$fila['nombre'] ."</td><td>".$fila['direccion']."</td><td>".$fila['telefono'] ."</td><td>".$fila['email']."</td></tr>"; } $listado = $listado."</table>"; mysqli_close($conn); return new soapval('return', 'xsd:string', $listado); } $server->register ('creaContacto', array('nombre'=>'xsd:string','direccion'=>'xsd:string', 'telefono'=>'xsd:string','email'=>'xsd:string'), array('return'=> 'xsd:string'), $namespace, false, 'rpc', 'encoded', 'funcion que crea contacto' ); $server->register ('mostrarTodosContactos', array(), array('return' => 'xsd:string'), $namespace, false, 'rpc', 'encoded', 'funcion que crea muestra los contactos' ); $server->register ('buscarContacto', array('nombre' => 'xsd:string'), array('return' => 'xsd:string'), $namespace, false, 'rpc', 'encoded', 'funcion que crea muestra los contactos' ); $server->service(isset($GLOBALS['HTTP_RAW_POST_DATA']) ? $GLOBALS['HTTP_RAW_POST_DATA'] : '');?>
Bueno, seguí probando un poco y he conseguido que tu código funcione, te dejo los códigos de los cuatro archivos que usé:
formularios.php
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Servicios web</title>
</head>
<body>
<form action="cliente.php" method="post" >
Nombre: <input type="text" name="nombre" /><br/>
Direccion: <input type="text" name="direccion" /><br/>
Teléfono: <input type="text" name="telefono" /><br/>
Email: <input type="text" name="email" /><br/>
<input type="text" name="funcion" value="creaContacto" hidden />
<input type="submit" value="Crear nuevo usuario" />
</form>
<hr/>
<form action="cliente.php" method="post" >
Nombre<input type="text" name="nombre" />
<input type="text" name="funcion" value="buscarContacto" hidden />
<input type="submit" value="Buscar Contacto" />
</form>
<hr/>
<form action="cliente.php" method="post" >
<input type="text" name="funcion" value="mostrarTodosContactos" hidden />
<input type="submit" value="Mostrar todos los contactos" />
</form>
</body>
</html>
cliente.php
<?php require_once("lib/nusoap.php"); $namespace = "http://localhost/DAW_M07_ACT_05_Javier_Martin"; $serverScript = 'servidor.php'; $metodoALlamar = $_POST['funcion']; $client = new nusoap_client("$namespace/$serverScript?wsdl", 'wsdl'); if(strcmp($metdodALlamar, 'creaContacto')) { $result = $client->call( "$metodoALlamar", array('nombre' => $_POST['nombre'], 'direccion' => $_POST['direccion'], 'telefono' => $_POST['telefono'], 'email' => $_POST['email']), "uri:$namespace/$serverScript", "uri:$namespace/$serverScript/$metodoALlamar" ); } else if(strcmp($metdodALlamar, 'buscarContacto')) { $result = $client->call( "$metodoALlamar", array('nombre' => $_POST['nombre']), "uri:$namespace/$serverScript", "uri:$namespace/$serverScript/$metodoALlamar" ); } else if(strcmp($metdodALlamar, 'mostrarTodosContactos')) { $result = $client->call( "$metodoALlamar", array(), "uri:$namespace/$serverScript", "uri:$namespace/$serverScript/$metodoALlamar" ); } echo $result."<br><br><a href='formularios.php'>Volver a formularios</a>";?>
servidor.php
<?php require_once("lib/nusoap.php"); $namespace = "http://localhost/DAW_M07_ACT_05_Javier_Martin"; $server = new soap_server(); $server->configureWSDL("WSDLTST", $namespace); $server->soap_defencoding = 'UTF-8'; $server->wsdl->schemaTargetNamespace = $namespace; function creaContacto($nombre, $direccion, $telefono, $email){ require_once("datos.php"); $conn = mysqli_connect($servername, $username, $password, $dbname)or die("Error de conexión con la base de datos"); $sql = "INSERT INTO contacto (nombre, direccion, telefono, email) VALUES ('".$nombre."', '".$direccion."', '".$telefono."', '".$email."')"; if (mysqli_query($conn, $sql)) { $msg = "Se introdujo un nuevo registro en la BD; ".$nombre; } else { $msg = "Error: " . $sql . "<br>" . mysqli_error($conn); } mysqli_close($conn); return new soapval('return', 'xsd:string', $msg); } function buscarContacto($nombre) { require_once("datos.php"); $conn = mysqli_connect($servername, $username, $password, $dbname); $sql = "SELECT * FROM contacto where nombre='".$nombre."'"; $resultado = mysqli_query($conn, $sql); $listado = "<table><tr><td>identificador</td><td>Nombre</td><td>Dirección</td><td>Teléfono</td><td>email</td></tr>"; while ($fila = mysqli_fetch_array($resultado)){ $listado = $listado."<tr><td>".$fila['id']."</td><td>".$fila['nombre'] ."</td><td>".$fila['direccion']."</td><td>".$fila['telefono'] ."</td><td>".$fila['email']."</td></tr>"; } $listado = $listado."</table>"; mysqli_close($conn); return new soapval('return', 'xsd:string', $listado); } function mostrarTodosContactos() { require_once("datos.php"); $conn = mysqli_connect($servername, $username, $password, $dbname); $sql = "SELECT * FROM contacto"; $resultado = mysqli_query($conn, $sql); $listado = "<table><tr><td>identificador</td><td>Nombre</td><td>Dirección</td><td>Teléfono</td><td>email</td></tr>"; while ($fila = mysqli_fetch_array($resultado)){ $listado = $listado."<tr><td>".$fila['id']."</td><td>".$fila['nombre'] ."</td><td>".$fila['direccion']."</td><td>".$fila['telefono'] ."</td><td>".$fila['email']."</td></tr>"; } $listado = $listado."</table>"; mysqli_close($conn); return new soapval('return', 'xsd:string', $listado); } $server->register('creaContacto', array('nombre'=>'xsd:string','direccion'=>'xsd:string', 'telefono'=>'xsd:string','email'=>'xsd:string'), array('return'=> 'xsd:string'), $namespace, false, 'rpc', 'encoded', 'funcion que crea contacto' ); $server->register ('mostrarTodosContactos', array(), array('return' => 'xsd:string'), $namespace, false, 'rpc', 'encoded', 'funcion que crea muestra los contactos' ); $server->register ('buscarContacto', array('nombre' => 'xsd:string'), array('return' => 'xsd:string'), $namespace, false, 'rpc', 'encoded', 'funcion que crea muestra los contactos' ); if ( !isset( $HTTP_RAW_POST_DATA ) ) { $HTTP_RAW_POST_DATA = file_get_contents( 'php://input' ); } $server->service($HTTP_RAW_POST_DATA);?>
datos.php
<?php $servername = "localhost"; $username = "root"; $password = "*******"; $dbname = "nombreBaseDatos"; ?>
Saludos. ;D