Gestion des doublons

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

  • Gestion des doublons

    Hello toutes tous.
    Je développe un composant en utilisant comme base le composant weblinks. Ce composant est une base de données qui répertorie des CD DVD liés à l'opéra. Or, il existe des dizaines d'enregistrements ayant le même titre. Le module weblinks interdit l'entrée de doublons.

    Le morceau de code suivant semble gérer la recherche de doublons. Si je le commente, quelle conséquences cela peut-il avoir ?

    Code:
    if ($xid && $xid != (int) $this->id)
            {
                $this->setError(JText::_('COM_ABCDVDS_ERR_TABLES_NAME'));
    
                return false;
            }
            }
    Dernière édition par ikvat à 26/04/2018, 14h37

  • #2
    Dans Joomla!, c'est en principe la gestion des alias qui interdit les doublons, il suffit donc qu'à la saisie, si on ne l'a pas fait dans le titre, on introduise un terme complémentaire pour éviter un tel problème.
    Les IDs sont normalement automatiquement gérées par un champ en autoincrément, pas par le code PHP, donc si ta table est bien structurée, ce n'est a priori pas cette partie de code qui doit intervenir.
    "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


    • #3
      Envoyé par RobertG Voir le message
      Dans Joomla!, c'est en principe la gestion des alias qui interdit les doublons, il suffit donc qu'à la saisie, si on ne l'a pas fait dans le titre, on introduise un terme complémentaire pour éviter un tel problème.
      Les IDs sont normalement automatiquement gérées par un champ en autoincrément, pas par le code PHP, donc si ta table est bien structurée, ce n'est a priori pas cette partie de code qui doit intervenir.
      Et bien si, le module weblinks qui me sert de base gère effectivement les doublons au niveau des alias, mais également au niveau des titres. En supprimant (commentant) la ligne, les doublons pour le titre ne sont plus un problème. Je voulais savoir si cela posait un problème de sécurité ou autre (même si je n'y crois pas trop).

      Au passage, mon module est ici

      Commentaire


      • #4
        Je suppose que tu as trouvé ces lignes dans la classe dérivé de Jtable et certainement dans la méthode check().

        Si c'est le cas, ce bout de code vérifie juste que si ce n'est pas une création, xid est bien identique à l'id de l'enregistrement courant.

        Reste à voir comment xid est trouvé.
        Il doit bien y avoir une lecture de la table sur un autre critère au préalable.

        C'est donc bien un contrôle pour éviter la création d'un doublon, mais c'est une sécurité, car ce cas ne devrait pas se produire en arrivant dans cette méthode qui précède juste la méthode store().

        Si tu es développeur tu dois savoir qu'une gestion de doublon ne peut en aucun cas se résumer à 2 lignes de code...
        Dernière édition par roland_d_alsace à 26/04/2018, 18h38
        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


        • #5
          Envoyé par roland_d_alsace Voir le message
          Je suppose que tu as trouvé ces lignes dans la classe dérivé de Jtable et certainement dans la méthode check().

          Si c'est le cas, ce bout de code vérifie juste que si ce n'est pas une création, xid est bien identique à l'id de l'enregistrement courant.

          Reste à voir comment xid est trouvé.
          Il doit bien y avoir une lecture de la table sur un autre critère au préalable.

          C'est donc bien un contrôle pour éviter la création d'un doublon, mais c'est une sécurité, car ce cas ne devrait pas se produire en arrivant dans cette méthode qui précède juste la méthode store().

          Si tu es développeur tu dois savoir qu'une gestion de doublon ne peut en aucun cas se résumer à 2 lignes de code...
          Je ne suis hélas pas à proprement parlé un "développeur". Disons que je bricole, voir bidouille, au petit bonheur la chance.
          Effectivement, c'est bien check pour Jtable.
          Ce qui m'a laissé pensé que c'était la méthode de vérification des doublons pour le titre, c'est le commentaire préalable à cette partie du code.
          En fait, le code en entier est

          Code PHP:
                  // Check for existing name
                  
          $db $this->getDbo();

                  
          $query $db->getQuery(true)
                      ->
          select($db->quoteName('id'))
                      ->
          from($db->quoteName('#__MatableDeBricolo'))
                      ->
          where($db->quoteName('oeuvre') . ' = ' $db->quote($this->oeuvre))
                      ->
          where($db->quoteName('catid') . ' = ' . (int) $this->catid);
                  
          $db->setQuery($query);

                  
          $xid = (int) $db->loadResult();

                  if (
          $xid && $xid != (int) $this->id)
                  {
                      
          $this->setError(JText::_('COM_ABCDVDS_ERR_TABLES_NAME'));

                      return 
          false;
                  } 

          Commentaire


          • #6
            Envoyé par ikvat Voir le message
            Et bien si, le module weblinks qui me sert de base gère effectivement les doublons au niveau des alias, mais également au niveau des titres. En supprimant (commentant) la ligne, les doublons pour le titre ne sont plus un problème. Je voulais savoir si cela posait un problème de sécurité ou autre (même si je n'y crois pas trop).

            Au passage, mon module est ici
            Généralement c'est dans la même méthode check() que l'alias est calculé.
            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


            • #7
              Envoyé par ikvat Voir le message

              Je ne suis hélas pas à proprement parlé un "développeur". Disons que je bricole, voir bidouille, au petit bonheur la chance.
              Effectivement, c'est bien check pour Jtable.
              Ce qui m'a laissé pensé que c'était la méthode de vérification des doublons pour le titre, c'est le commentaire préalable à cette partie du code.
              En fait, le code en entier est

              Code PHP:
               // Check for existing name
              $db $this->getDbo();

              $query $db->getQuery(true)
              ->
              select($db->quoteName('id'))
              ->
              from($db->quoteName('#__MatableDeBricolo'))
              ->
              where($db->quoteName('oeuvre') . ' = ' $db->quote($this->oeuvre))
              ->
              where($db->quoteName('catid') . ' = ' . (int) $this->catid);
              $db->setQuery($query);

              $xid = (int) $db->loadResult();

              if (
              $xid && $xid != (int) $this->id)
              {
              $this->setError(JText::_('COM_ABCDVDS_ERR_TABLES_NAME'));

              return 
              false;

              Là effectivement la méthode vérifie s'il n'existe pas déjà un enregistrement ayant la même valeur du champ "œuvre" dans la même catégorie.

              Mais en général on attend pas le check pour rejeter, car c'est un peu "tard" c'est juste une sécurité.
              Il y a des contrôles de suite à la saisie (client side validation et server side validation).
              Voir :

              et
              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


              • #8
                Envoyé par roland_d_alsace Voir le message

                Là effectivement la méthode vérifie s'il n'existe pas déjà un enregistrement ayant la même valeur du champ "œuvre" dans la même catégorie.

                Mais en général on attend pas le check pour rejeter, car c'est un peu "tard" c'est juste une sécurité.
                Il y a des contrôles de suite à la saisie (client side validation et server side validation).
                Voir :

                et
                https://docs.joomla.org/Server-side_form_validation
                Merci, c'est gentil.

                Commentaire

                Annonce

                Réduire
                Aucune annonce pour le moment.

                Partenaire de l'association

                Réduire

                Hébergeur Web PlanetHoster
                Travaille ...
                X