Une requête mal écrite !

Réduire
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • [RÉGLÉ] Une requête mal écrite !

    Bonjour,

    J'ai besoin d'aide !

    Comme je l'ai dit dans une autre discussion, je suis en train de mettre en place un formulaire complexe de création de compte utilisateur avec un formulaire Convert Forms, qui permettra à un gestionnaire de créer depuis le site des comptes utilisateurs en définissant le groupe, en ajoutant des infos de profil et en spécifiant la catégorie et le niveau d'accès de la fiche de contact associée.
    Je bute sur la mise à jour de la fiche de contact.

    Ce code plante alors que les variables sont correctes, c'est donc la syntaxe qui est en cause et je ne trouve pas où, j'ai essayé diverses solutions sur le positionnement des guillemets, sans succès :
    Code:
    $db->setQuery('UPDATE '.
    $db->quoteName('#__contact_details') . ' SET "catid" = ' . $cat_id . ' , "access" = ' . $access . ' WHERE "user_id" = ' . $user_id );
    En direct sur phpMyAdmin son équivalent fonctionne :
    Code:
    UPDATE `d8mpn_contact_details` SET `catid` = 10, `access` = 11 WHERE `user_id` =194
    Les valeurs des variables sont parfaitement renseignées, mais curieusement, je n'ai plus eu d'erreurs en mettant des guillemets doubles autour des deux derniers noms de champs ici, quand les deux premiers passaient avec des simples, les autres déclenchaient une erreur bloquante.
    $email = $submission->params['email'];
    $groups = $submission->params['groups'];
    $cat_id = $submission->params["contact_cat"];
    $access = $submission->params["contact_level"];
    Merci de vos conseils !
    Dernière édition par RobertG à 19/01/2023, 19h38
    "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
    MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

  • #2
    Hello.

    Code PHP:
    $db->quoteName 
    générè pour mysql et mariadb les guillemets obliques qui doivent encadrer les noms des tables et aussi ceux des rubriques.
    et
    Code PHP:
    $db->quote 
    génère les guillemets simples qui doivent entourer les valeurs pour éviter les injections sql (si les valeurs proviennent d'un formulaire html), mais il est conseillé de l'utiliser systématiquement..

    Il te faut donc faire :
    Code PHP:
    $db->quoteName('catid').' = '.$db->quote($cat_id) . ' , ' $db->quoteName('access').' = '.$db->quote($access)... 
    A noter que tu peux utiliser un array pour mettre tes couples rubrique => valeur

    Voir https://docs.joomla.org/Inserting,_U...g_JDatabase/fr
    Dernière édition par roland_d_alsace à 19/01/2023, 16h32
    A tous les utilisateurs de Joomla du très Grand Est de la France et du Jura suisse
    Rejoignez le Joomla Users Groupe Alsace...
    roland_d_alsace va-t-il devenir roland_du_grand_est ?

    Commentaire


    • #3
      Merci Roland !

      Entre tes explications et le fait que Tassos, l'auteur de Convert Forms, me donne quelques conseils, je devrais m'en sortir.
      Mais pour le moment, je fais une pause, mes yeux ont du mal et du coup, je rate des caractères ou en mets en trop, ce qui me fait trop perdre de temps et m'oblige à énormément forcer pour trouver mes erreurs. Du coup, la partie de code qui faisait tout jusqu'à cette mise à jour des contacts ne créer plus l'utilisateur. Je risque de devoir revenir à une version antérieure et recommencer.

      Je dirai ici où j'en suis.
      "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
      MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

      Commentaire


      • #4
        Je viens de faire la modification. Si la partie mise à jour du contact est désactivée, l'utilisateur est bien créé, ses données de profil et la fiche automatique de contact ajoutées, .
        Mais si je l'active, alors que j'ai une ligne $db = JFactory::getDbo(); dans la fonction (elle y est aussi dans une autre fonction plus haut), la validation du formulaire me renvoie un message d'erreur
        syntax error, unexpected variable "$db"
        Le code de la fonction me paraît pourtant correct :
        Code:
        function setUserContactData($user_id, $cat_id,$access)
        {
        try {
        $db = JFactory::getDbo();
        $query = ('UPDATE '.
        $db->quoteName('#__contact_details') . ' SET ' $db->quoteName('catid').' = '.$db->quote($cat_id) . ' , ' . $db->quoteName('access').' = '.$db->quote($access) . ' WHERE ' $db->quoteName('user_id')= ' . $db->quote($user_id ));
        
        $db->setQuery($query);
        $db->execute();
        } catch (Exception $e) {
        Factory::getApplication()->enqueueMessage($e->getMessage(), 'error');
        }
        }
        setUserContactData($user_id, $cat_id, $access);
        Quelque chose en trop ou en pas assez ?
        "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
        MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

        Commentaire


        • #5
          Hourra, je l'ai eu !

          J'avais oublié des points après SET et WHERE !
          herve aime ceci.
          "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
          MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

          Commentaire

          Annonce

          Réduire
          Aucune annonce pour le moment.

          Partenaire de l'association

          Réduire

          Hébergeur Web PlanetHoster
          Travaille ...
          X