Bonjour,

Je travaille sur une base de données Exist (où sont donc stockés des fichiers .xml).


J'ai une page .php dans laquelle je souhaite, quand un utilisateur poste un commentaire :
  • ajouter le commentaire dans la base
  • mettre à jour le nombre de points de l'utilisateur (quand il poste un commentaire, on lui donne 5 points).



Mes deux requêtes Xquery fonctionnent bien séparément. (si je commente la 2ème requête, l'ajout de commentaire dans la base fonctionne ; si je commente la 1ère requête, la mise à jour du nombre de points marche).

Mon problème : Quand je veux exécuter mes 2 requêtes, la 2ème n'est pas exécutée et j'ai une fatal error :
Fatal error: Call to a member function children() on a non-object in C:\wamp\www\Macaronissime\Scripts\Utilisateur\ficheProduit.php on line 89

La ligne 89 est :
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
$nbPoints = $object2->children()->points + 5;

Mon code PHP :
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
37
38
39
40
41
42
43
/* si l'utilisateur a poste un commentaire */
if(isset($_POST['commentaire'])) {
    $pseudo = $_POST['pseudo'];
    $commentaire = $_POST['commentaire'];
 
 
    /* on insere le commentaire */
    /* requete qui recherche l'id max parmis les commentaires */
    $query0 = '<id><idMax>{let $idComm := document("macaronissime/base.xml")//commentaire/@idComm return max($idComm)}</idMax></id>';
    $result0 = $db->xquery($query0);
    $object0 = simplexml_load_string($result0["XML"]);
 
    /* on incremente l'id */
    $idComm = $object0->children()->idMax + 1;
 
    /* on insere le commentaire en BD */
    $query1 = 'for $commentaires in document("macaronissime/base.xml")/macaronissime/commentaires
        return update insert
        <commentaire idComm=\''.$idComm.'\'>
        <categorie>'.$idCategorie.'</categorie>
        <pseudo>'.$pseudo.'</pseudo>
        <contenu>'.$commentaire.'</contenu>
        </commentaire> into $commentaires';
    $db->xquery($query1);
 
 
    /* on augmente de 5 points l'utilisateur a chaque commentaire */
    /* requete qui recherche le nombre de points de l'utilisateur */
    $query2 = 'for $clients in document("macaronissime/base.xml")/macaronissime//client[@idClient="'.$idClient.'" ]
          return <nombre>{$clients/points}</nombre>';
    $result2 = $db->xquery($query2);
    $object2 = simplexml_load_string($result2["XML"]);
 
 
    /* on augmente de 5 points */
 $nbPoints = $object2->children()->points + 5;
 
    /* on met a jour le nombre de points de l'utilisateur */
    $b = 'for $p in document("macaronissime/base.xml")/macaronissime//client[@idClient="'.$idClient.'"]/points
                return update replace $p with <points>'.$nbPoints.'</points>';
    $db->xquery($b);
 
}

Quelqu'un aurait une idée ? Cela fait plusieurs jours que je recherche, et je dois avouer que je sèche ..

Merci d'avance