Project

General

Profile

Anomalie #22746

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

Added by Renaud Dussol over 6 years ago. Updated about 6 years ago.

Status:
Fermé
Priority:
Normal
Assigned To:
Target version:
Start date:
01/16/2018
Due date:
% Done:

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

Associated revisions

Revision 592752cb (diff)
Added by Unknown about 6 years ago

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

History

#1 Updated by Renaud Dussol over 6 years ago

  • Tracker changed from Demande to Anomalie

#2 Updated by Nicolas Penot over 6 years ago

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 Updated by Nicolas Penot over 6 years ago

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 Updated by Christophe LEON over 6 years ago

  • Status changed from Nouveau to Accepté

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

#5 Updated by Anonymous about 6 years ago

  • Status changed from Accepté to Résolu
  • % Done changed from 0 to 100

#6 Updated by Christophe LEON about 6 years ago

  • Target version set to Envole 5.8

#7 Updated by Arnaud FORNEROT about 6 years ago

  • Status changed from Résolu to Fermé

Also available in: Atom PDF