Projet

Général

Profil

Anomalie #22746

La limitation du varchar à 150 caractères dans le champ url de la table url pose problème

Ajouté par Renaud Dussol il y a plus de 6 ans. Mis à jour il y a environ 6 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
Début:
16/01/2018
Echéance:
% réalisé:

100%

Distribution:

Description

Sur une url très longue (186 caractères), issue de poshprofil

Comme l'alimentation de la table url des applis poshprofil est automatique lors des connexions utilisateurs, cette url est insérée automatiquement dans la table, mais tronquée à son maximum (150).
Lorsqu'un utilisateur disposant de cette application se connecte par la suite, le ApiController cherche si l'url (de 186 caractères) est présente dans la base. Il ne la trouve pas, ce qui est normal (vu qu'il n'a que la version tronquée)
Il tente donc d'insérer à nouveau cette url dans la table, mais il la tronque de nouveau à son max de 150 car.
Cela génère une Duplicate Key error puisque l'url tronquée est déjà présente dans la base.
Le retour du POST RESSOURCES n'est pas bon car il ne contient pas le tableau JSON des applis mais l'erreur SQL générée par rb.

Cette url présente dans notre poshprofil est une exception que nous avons supprimée, néanmoins le fait que cela fasse planter le retour du APiController est problématique.

Pour éviter cela sans avoir à augmenter indéfiniment la taille du varchar, il faudrait, dans le code, tronquer la variable $url récupérée de $entry à 150 caractères (ou au nombre de caractères que l'on aura défini si on décide de l'augmenter). Ainsi le ApiController comparerait l'url tronquée avec ce qui est présent dans la base et la trouverait, évitant ainsi une nouvelle tentative d'insertion.

Par exemple :
au lieu de :

$eUrl=\R::findOne( 'url', 'url = ?', array($url));

Mettre :

$eUrl=\R::findOne( 'url', 'url = ?', array(substr($url,0,150)));

Peut-être y a-t-il une autre solution ? A voir

Révisions associées

Révision 592752cb (diff)
Ajouté par Unknown il y a environ 6 ans

fixes #22746 La limitation du varchar à 150 caractères posaient problème

Historique

#1 Mis à jour par Renaud Dussol il y a plus de 6 ans

  • Tracker changé de Demande à Anomalie

#2 Mis à jour par Nicolas Penot il y a environ 6 ans

Effectivement, j'ai le même soucis.

2 de mes applis ont exactement les mêmes 150 caractères dans l'URL.. huhu
Du coup, j'ai le message Duplicate Key Error.

Dans la base edispatcher, table url, le champ URL est limité à 150 caractères.
Hors, j'ai 2 applications récupérées depuis posh-profil qui font respectivement 191 et 207 caractères.

Du coup, cela tronque la fin de l'URL en BDD. Pour éviter cela, j'avais augmenté le varchar du champs url de la table url de edispatcher à 255.
Mais je viens de faire la maj sur mon preprod, et je viens de voir que le varchar est redescendu à 150, tronquant sans sommation la fin de mon url :(

mysql> describe url;
+-----------------+------------------+------+-----+---------+----------------+
| Field           | Type             | Null | Key | Default | Extra          |
+-----------------+------------------+------+-----+---------+----------------+
| id              | int(11) unsigned | NO   | PRI | NULL    | auto_increment |
| url             | varchar(150)     | YES  | UNI | NULL    |                |
mysql> select url from url where id=2294;
+--------------------------------------------------------------------------------------------------------------------------------------------------------+
| url                                                                                                                                                    |
+--------------------------------------------------------------------------------------------------------------------------------------------------------+
| https://xxxxxxxx.ac-caen.fr/xxxxppxxxx/direct/ggg.php?f=TTTTTT_XXXXXXXX%2FFonctionnement%20Rrrrrrrr%2FInformations%20pratiques%2FGuide%20d%27impressio |
+--------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

Alors que la fin devrait être : Guide%20d%27impression%20UAI%2FWebXprint%20guide%20utilisateur.pdf

Cela te permettra peut être de faire avancer ta réflexion ;)

#3 Mis à jour par Nicolas Penot il y a environ 6 ans

Je me suis aperçu que le reconfigure virait la valeur que j'avais affecté à 255 sur ma colonne url.

Du coup, j'ai trouvé que c'était dans utils/createStructure.php, ligne 176 :

\R::exec("ALTER TABLE  `url` CHANGE  `url`  `url` VARCHAR( 150 );");

Que Christophe écrasait notre valeur par la sienne.
Y'a t-il une raison de cela ?

Pour ma part, j'ai modifié ce fichier en affectant VARCHAR à 255 sinon cela produisait des erreurs dans la console de mon navigateur (erreur duplicate key quand on essayait d'aller sur /api/ressources).

En attendant que Christophe nous donne son avis sur le sujet.

Nicolas.

#4 Mis à jour par Christophe LEON il y a environ 6 ans

  • Statut changé de Nouveau à Accepté

Solution passage a la longueur max possible d'une url (cf RFC)

#5 Mis à jour par Anonyme il y a environ 6 ans

  • Statut changé de Accepté à Résolu
  • % réalisé changé de 0 à 100

#6 Mis à jour par Christophe LEON il y a environ 6 ans

  • Version cible mis à Envole 5.8

#7 Mis à jour par Arnaud FORNEROT il y a environ 6 ans

  • Statut changé de Résolu à Fermé

Formats disponibles : Atom PDF