IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[Web Service] WebService SOAP : Pertes de valeurs?


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2018
    Messages : 11
    Points : 7
    Points
    7
    Par défaut [Web Service] WebService SOAP : Pertes de valeurs?
    Bonjour,

    Actuellement entrain de réaliser un petit webservice que je test en local, lors de l'appel d'une simple méthode CRUD je me retrouve avec une perte de valeur, =>

    Méthode d'update :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    public  function setRequeteModifier($obj)
    	{
    		$classe=get_class($obj);
    		$table = $classe;
    		$proprietes=$obj->getProprietes();  //récupération du tableau associatif clés-valeurs de l'objet
    		$where = " WHERE "; //sous chaîne pour la clause WHERE
    		$params = array();
    		$sql="UPDATE $table SET "; //début de la requête
    		$id="";
    		foreach($proprietes as $key=>$val)//suppose que l'identifiant de la classe et de la table est id_ + nom de la classe : si classe est Client alors id_client. Ou suppose que l'identifiant est un des termes saisies directement dans la condition.
    		{
     
    			if(($key != "id_".$classe) && ($key != "id_".get_parent_class($obj)) && ($key !="id_row") && ($key !="id_hydroweb") && ($key !="id_profil") && ($key !="id_service") && ($key !="id_login_sdis") && ($key !="id_cis") && ($key !="id_login_ext")) //j'écarte l'identifiant des champs à modifier
    			{
    					$sql=$sql.$key."=?,"; //on ajoute un ? -> //requête préparée avec marqueurs interrogatifs
    					$params[]=$val;
    					// echo ($val);
    			}
    			else
    			{
     
    					$where = $where.$key."=?"; //requête préparée avec marqueurs interrogatifs
    					$id=$val;
    					// echo $params[]=$val;
    					// echo $key;
    			}
    		}
    		$proprietes= $val;
    		$params[]=$val;
    		// $params[] = $id; //on ajoute l’id à la fin du tableau des paramètres
     
    		$sql = rtrim($sql, ","); // enleve la derniere virgule, PHManuel : Supprime les espaces (ou d'autres caractères) de fin de chaîne
    		$sql = $sql . $where; //on ajoute la clause WHERE à la fin de la requête
    		$this->requete = $sql; //on stocke le texte de la requête dans $this->requete
    		$this->parametres = $params;//on stocke les valeurs des paramètres dans $this->parametres
    	}// fin de la méthode setRequeteModifier()
    PS correspondant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    	public function setPSModifier($obj)
    	{
    		//exemple ps = modifierClient
    		$nomps=self::$_appel." modifier". get_class($obj). " " . substr(self::$_syntaxe,0,1);//Appel et nom de la procedure stockée
    		$proprietes=$obj->getProprietes();
    		try
    		{
    			$i=0;
    			$params = array();
    			foreach($proprietes as $key=>$val)
    			{	
    				$nomps = $nomps. "?,"; 
    				$params[] = $val;
    			}
    			$nomps = rtrim($nomps, ",");// enlever la derniere virgule
    			$nomps = $nomps . substr(self::$_syntaxe,1,1);
    			$this->requete = $nomps;
    			$this->parametres = array();
    			$this->parametres = $params;
    		}
    		catch (PDOException $e)
    		{
    			throw new PDO3Exception($e->code);
    		}
    	}// fin de la méthode setPSModifier()
    Le petit bout de ma classe lié à cette méthode:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	public function modifierUnRattachement ($id_service, $trigramme_service, $code_insee)
    	{
    		$rattach = new tbl_rattachement_sdis_communes($id_service ,$trigramme_service, $code_insee);
    		Gestion::modifier($rattach);
    	}
    Ainsi que les parties du WSDL correspondant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <message name="modifierUnRattachementRequest">
    	<part name="id_service" type="xsd:int"/>
    	<part name="trigramme_service" type="xsd:string"/>
    	<part name="code_insee" type="xsd:int"/>
    </message>
    <message name="modifierUnRattachementResponse">	
    </message>
     
     
    	<operation name="modifierUnRattachement">
    		Modifier un Rattachement SDIS / Commune : <input message="typens:modifierUnRattachementRequest"/><br/>
    		<output message="typens:modifierUnRattachementResponse"/><br/>
    	</operation>
     
     
    	<operation name="modifierUnRattachement">
    		<soap:operation soapAction="urn:RattachementAction"/>
    		 <!-- <input>  -->
    		 <!-- <soap:body namespace="urn:hydroweb" use="encoded"   -->
    					 <!-- encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>  -->
    		 <!-- </input>  -->
    		<output>
    		<soap:body namespace="urn:hydroweb" use="encoded" 
    					encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
    		</output>
    	</operation>
    Jusqu'à présent tout ce passe bien, aucune erreur d'affichée, la modification se réalise bien SAUF que certaines valeurs de champs sont passées je ne sais pourquoi à "0" exemple :

    Invocation de la méthode modifier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $res4 = $client->modifierUnRattachement("YOLO", 39999, 767);
    On retrouve donc,
    en premier le champ => trigramme_service, (varchar)
    en second le champ => code_insee, (int)
    en troisième le champ => id_service (int, AI, PK)

    Problème étant, que si j'utilises cette méthode directement sans passer par le Webservice, celle-ci fonctionne correctement, mais dans ce cas présent, voici ce que j'obtiens:

    Pièce jointe 347566

    Alors que je devrais avoir :

    Pièce jointe 347567

    Mais la chose que je ne comprends pas, cette perte de valeur j'ai l'impression qu'elle ne se fait que sur des champs "string" et pas tous, en effet sur une autre table, certains champs de type string vont être correctement update, tandis que d'autre seront passés à "0" sans raison.
    On dirait que lorsque la requête passe dans le webservice, certaines valeurs sont transformées en "0" (hypothèse).

    Si vous avez une idée/besoin d'autres informations supplémentaires, n'hésitez pas !

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2018
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Je n'ai toujours pas réussi à passer outre ce bug, et je me retrouve complètement bloqué. Sauvez-moi s'il vous plait!

    Voilà à quoi ressemble la requête liée à mon appel de méthode dans mon webservice :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE tbl_rattachement_sdis_communes SET trigramme_service=?,code_insee=? WHERE id_service=?Array ( [0] => 0 [1] => 40000 [2] => 768 )
    Alors que si je ne passe pas par mon webservice :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE tbl_rattachement_sdis_communes SET trigramme_service=?,code_insee=? WHERE id_service=?Array ( [0] => "TST" [1] => 40000 [2] => 768 )
    (a noter qu'il s'agit d'un exemple pour les valeurs)

    UP Please.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Web Service] Problème d'affichage des valeurs renvoyées par un webservice
    Par informatique34 dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 11/07/2011, 13h34
  2. [Web Service] Client SOAP ou autre pour appel webservice
    Par flo73 dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 14/07/2010, 16h23
  3. [Web Service] Serveur SOAP - NuSOAP ou php_soap (natif)
    Par alexfrere dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 19/01/2009, 11h43
  4. [Web Service] PHP & SOAP - web service
    Par Gregory.M dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 27/12/2008, 13h07
  5. Web Service Adressing SOAP Asynchone
    Par miryame dans le forum Services Web
    Réponses: 2
    Dernier message: 23/11/2006, 12h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo