Dans le souci de partager ma petite experience sur le webservice avec php, j'ai ecrit ce cour programme qui permet d'enregistrer des donnees (nom et prenom) dans une base des donnees distante et de les afficher en utilisant le webservice.
Source / Exemple :
Fichier wsdl
------------
<?xml version="1.0"?>
<!-- partie 1 : Definitions -->
<definitions name="KimiaDieudonnee"
targetNamespace="urn:KimiaDieudonnee"
xmlns:typens="urn:KimiaDieudonnee"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns="http://schemas.xmlsoap.org/wsdl/">
<!-- partie 2 : Types-->
<types>
<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="urn:KimiaDieudonnee">
</xsd:schema>
</types>
<!-- partie 3 : Message 1-->
<message name="addNewRequest">
<part name="prenom" type="xsd:string"/>
<part name="nom" type="xsd:string"/>
</message>
<message name="addNewResponse">
<part name="return" type="xsd:string"/>
</message>
<!-- partie 3 : Message 2-->
<message name="displayDataFromDataBaseRequest">
<part name="critere" type="xsd:string"/>
</message>
<message name="displayDataFromDataBaseResponse">
<part name="return" type="soap-enc:Array"/>
</message>
<!-- partie 4 : Port Type -->
<portType name="KimiaDieudonneePort">
<!-- partie 5 : Operation 1-->
<operation name="addNew">
<input message="typens:addNewRequest"/>
<output message="typens:addNewResponse"/>
</operation>
<!-- partie 5 : Operation 1-->
<operation name="displayDataFromDataBase">
<input message="typens:displayDataFromDataBaseRequest"/>
<output message="typens:displayDataFromDataBaseResponse"/>
</operation>
</portType>
<!-- partie 6 : Binding -->
<binding name="KimiaDieudonneeBinding" type="typens:KimiaDieudonneePort">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="addNew">
<soap:operation soapAction="KimiaDieudonneeAction"/>
<input name="addNewRequest">
<soap:body use="encoded"
namespace="urn:KimiaDieudonnee"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
<output name="addNewResponse">
<soap:body use="encoded"
namespace="urn:KimiaDieudonnee"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</output>
</operation>
<operation name="displayDataFromDataBase">
<soap:operation soapAction="KimiaDieudonneeAction"/>
<input name="displayDataFromDataBaseRequest">
<soap:body use="encoded"
namespace="urn:KimiaDieudonnee"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
<output name="displayDataFromDataBaseResponse">
<soap:body use="encoded"
namespace="urn:KimiaDieudonnee"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</output>
</operation>
</binding>
<!-- partie 7 : Service -->
<service name="KimiaDieudonneeService">
<documentation>Retourne une phrase simple </documentation>
<!-- partie 8 : Port -->
<port name="KimiaDieudonneePort" binding="typens:KimiaDieudonneeBinding">
<soap:address location="http://localhost/kimiaServer/server.php"/>
</port>
</service>
</definitions>
Fichier server.php
------------------
<?php
//Connexion a la bdd
// première étape : désactiver le cache lors de la phase de test
ini_set("soap.wsdl_cache_enabled", "0");
// on indique au serveur à quel fichier de description il est lié
$serveurSOAP = new SoapServer('kimia.wsdl');
// ajouter la fonction addNew au serveur
$serveurSOAP->addFunction('addNew');
// ajouter la fonction displayDataFromDataBase au serveur
$serveurSOAP->addFunction('displayDataFromDataBase');
// lancer le serveur
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
$serveurSOAP->handle();
}
else
{
echo 'Utiulisation de la methode POST est recommandee, veuillez seulement utiliser POST';
}
function addNew($prenom, $nom)
{
$user = 'root';
$pass = 'huitfevrier';
$dsn = 'mysql:host=localhost;dbname=kimia';
$etat = null;
// Connexion à la base de données
try {
$dbh = new PDO($dsn, $user, $pass);
$etat = true;//echo 'Ok';
} catch (PDOException $e) {
//die( "Erreur ! : " . $e->getMessage() );
$etat = false;//echo 'Ko';
}
if($etat){
$sql = "INSERT INTO dieudonnee (nom,prenom) VALUES ('$nom','$prenom')";
$dbh->exec($sql);
return 'L\'enregistrement de '.$prenom.' '.$nom.' est effectue avec succes';
}
else
{
return 'Veiller verifier vos parametres';
}
}
function displayDataFromDataBase($critere)
{
$user = 'root';
$pass = '';
$dsn = 'mysql:host=localhost;dbname=kimia';
$etat = null;
$tab = array();
// Connexion à la base de données
try {
$dbh = new PDO($dsn, $user, $pass);
$etat = true;//echo 'Ok';
} catch (PDOException $e) {
//die( "Erreur ! : " . $e->getMessage() );
$etat = false;//echo 'Ko';
}
if($etat){
$i=0;
$sql = "SELECT * FROM dieudonnee";
$resultat = $dbh->query($sql);
while ($row = $resultat->fetch()) {
$tab[$i] = $row;
$i++;
}
return $tab;
}
else
{
return 'Veiller verifier vos parametres encore une fois';
}
}
?>
fichier client.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Client KIMIA</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<meta name="generator" content="Geany 0.21" />
</head>
<body>
<div class="main">
<form method="post" action="#">
<fieldset>
<label>
Nom :
</label>
<input type="text" value="" name="nom" required/>
</fieldset>
<fieldset>
<label>
Prenom :
</label>
<input type="text" value="" name="prenom" required/>
</fieldset>
<input type="submit" name="valider" value="Valider" />
</form>
<?php
if(isset($_POST['valider']) || isset($_POST['afficher'])){
// première étape : désactiver le cache lors de la phase de test
ini_set("soap.wsdl_cache_enabled", "0");
// lier le client au fichier WSDL
$clientSOAP = new SoapClient('http://127.0.0.1/kimiaServer/kimia.wsdl');
}
if(isset($_POST['nom']) && isset($_POST['prenom']) && isset($_POST['valider'])){
echo '<fieldset>';
$nom = $_POST['nom'];
$prenom = $_POST['prenom'];
// executer la methode getSave
echo $clientSOAP->addNew($prenom,$nom);
echo '</fieldset>';
}
?>
<form method="post" action="#">
<input type="submit" name="afficher" value="Voir tous les enregistrements" />
</form>
<?php
if(isset($_POST['afficher'])){
echo '<fieldset>';
// executer la methode displayDataFromDataBase
foreach($clientSOAP->displayDataFromDataBase("Bonjour ba yaya") as $row){
echo '<br/>';
echo $row['nom'];
echo ' ';
echo $row['prenom'];
echo '<br/>';
}
echo '</fieldset>';
}
?>
</div>
</body>
</html>
Fichier sql
-- phpMyAdmin SQL Dump
-- version 3.4.10.1deb1
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Jul 13, 2012 at 09:22 AM
-- Server version: 5.5.24
-- PHP Version: 5.3.10-1ubuntu3.2
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
--
-- Database: `kimia`
--
-- --------------------------------------------------------
--
-- Table structure for table `dieudonnee`
--
CREATE TABLE IF NOT EXISTS `dieudonnee` (
`nom` varchar(100) NOT NULL,
`prenom` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
Conclusion :
esperant que ceci pourra aider certains.
Merci de le valider.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.