Webservice avec php

Soyez le premier à donner votre avis sur cette source.

Vue 11 738 fois - Téléchargée 2 036 fois

Description

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.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Oddy700
Messages postés
4
Date d'inscription
vendredi 13 juillet 2012
Statut
Membre
Dernière intervention
13 juillet 2012
-
Boon moi sa ne marche pas ..
cs_glad
Messages postés
97
Date d'inscription
lundi 26 novembre 2001
Statut
Membre
Dernière intervention
24 février 2012
-
Quand tu t'adresses à des débutants, il faut a minima :
- Commenter ton code,
- Donner des explications beaucoup plus détaillées que les 2 lignes de commentaires que tu as mis
jadu
Messages postés
225
Date d'inscription
mercredi 26 juillet 2006
Statut
Membre
Dernière intervention
16 août 2018
-
c'est quoi un webservice ???

quand en a-t-on besoin ???

ça marche comment ?

Après j'irais voir le code !
cs_JLN
Messages postés
373
Date d'inscription
samedi 1 juin 2002
Statut
Membre
Dernière intervention
17 juin 2013
-
Pour moi qui fait de la domotique, j'en ai créé pas mal, donc les webservices je connais, mais il est vrai que tu mets débutant et que tu n'aide pas beaucoup les débutants...
sitoumbaz
Messages postés
6
Date d'inscription
mercredi 29 avril 2009
Statut
Membre
Dernière intervention
17 juillet 2012
-
salut tous, et merci pour vos commentaires, c'est ma première fois pour moi de publier une source sur ce site et lors de l'opération d'upload dans le formulaire j'ai coché "debutant" en comprenant qu'il s'agissait de mon niveau.

JADU : Un service web est un programme informatique permettant la communication et l'échange de données entre applications ou systèmes hétérogènes dans des environnements distribués. Il s'agit donc d'un ensemble de fonctionnalités exposées sur internet ou sur un intranet, par et pour des applications ou machines sans intervention humaine et de manière synchrone.

JLN : merci pour votre remarque, j'ai mis débutant, car j'avais compris qu'il s'agissait de mon niveau en programmation.

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.