Le but de mon complet de mon code que j'ai mis dans mon 1er post
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 44
|
/* 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);
} |
- insérer un commentaire entré par un utilisateur
- mettre à jour le nombre de points de cet utilisateur en l'augmentant de 5 points.
$query0 : recherche l'id du dernier commentaire
$query1 : insere le commentaire (avec id+1)
$query2 : recherche le nombre de points de l'utilisateur qui insère le commentaire
$b : met à jour le nombre de points de l'utilisateur (+5)
Résumé du problème :
Si je commente $query1, alors $b est exécuté (l'utilisateur a donc 5 points de plus, mais le commentaire n'est pas inséré)
Si je ne commente pas $query1, alors j'ai l'erreur (le commentaire est inséré, mais le nombre de points de l'uilisateur n'est pas mis à jour) :
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 :
$nbPoints = $object2->children()->points + 5;
On peut surement réduire le nombre de requêtes, mais c'est des requêtes de base .. pourquoi n'arriverait-on pas le faire (alors qu'en SQL cela me prendrait 2 minutes) ?
Partager