Se connecter

Informatique

Programmation

Sujet : Comment créer un Champ unique comme sur ce forum ??
1
raaga
Niveau 7
29 mai 2020 à 19:52:16

Salut, je suis en train de coder mon site en Symfony et je me demandais comment créer un champ unique comme sur ce forum ??

Quand on clique sur un sujet y'a des chiffres puis après y'a le titre. Par exemple pour le sujet que je viens de poser:
jeuxvideo.com/forums/42-30-63200892-1-0-1-0-comment-creer-un-champ-unique-comme-sur-ce-forum.htm

Je peux réaliser ça comment pour mon site ? car si je mets seulement le titre après le "/" ça ne fonctionnera pas vu que si deux personnes mettent le même titre dans leur sujet ça retournera vers le même lien...

Merci d'avance

_ZawaZawaZawa_
Niveau 9
29 mai 2020 à 20:50:22

ils ont bien un id en bdd tes topics ?

raaga
Niveau 7
29 mai 2020 à 21:51:41

Le 29 mai 2020 à 20:50:22 _ZawaZawaZawa_ a écrit :
ils ont bien un id en bdd tes topics ?

Oui mais on m'a toujours dit de ne pas mettre l'id car c'est dangereux

fanof_banni
Niveau 10
29 mai 2020 à 22:16:31

Le 29 mai 2020 à 21:51:41 Raaga a écrit :
Oui mais on m'a toujours dit de ne pas mettre l'id car c'est dangereux

C'est débile.
Un ID sert justement à identifier un élément de ta base de données.
Le gros chiffres que tu vois dans l'url (63202714) c'est l'ID du topic, tu remarqueras que tu peux changer le titre dans l'url, tu seras quand même re-dirigé vers ton topic.
Tu pourrais créer un autre champ unique, mais ça n'apporterait rien de plus.

_ZawaZawaZawa_
Niveau 9
30 mai 2020 à 00:11:42

Le 29 mai 2020 à 21:51:41 Raaga a écrit :

Le 29 mai 2020 à 20:50:22 _ZawaZawaZawa_ a écrit :
ils ont bien un id en bdd tes topics ?

Oui mais on m'a toujours dit de ne pas mettre l'id car c'est dangereux

bof c'est des topics hein pas des données sensibles ça concerne pas les profils des utilisateurs par exemple

pour moi le seul souci c'est que si dans le futur tu migres ta bdd toutes les URL peuvent casser. Mais bon c'est surtout pour que tu vois l'idée, au pire tu refais un champ avec un autre "id" qui ne sera pas techiquement celui de la base mais celui exprès pour le slug, doctrine a probablement des annotations pour spécifier que ça doit être unique

TheRealMarco
Niveau 10
30 mai 2020 à 14:41:18

Le 30 mai 2020 à 00:11:42 _ZawaZawaZawa_ a écrit :

Le 29 mai 2020 à 21:51:41 Raaga a écrit :

Le 29 mai 2020 à 20:50:22 _ZawaZawaZawa_ a écrit :
ils ont bien un id en bdd tes topics ?

Oui mais on m'a toujours dit de ne pas mettre l'id car c'est dangereux

bof c'est des topics hein pas des données sensibles ça concerne pas les profils des utilisateurs par exemple

pour moi le seul souci c'est que si dans le futur tu migres ta bdd toutes les URL peuvent casser. Mais bon c'est surtout pour que tu vois l'idée, au pire tu refais un champ avec un autre "id" qui ne sera pas techiquement celui de la base mais celui exprès pour le slug, doctrine a probablement des annotations pour spécifier que ça doit être unique

Pourquoi si on migre la BDD les URL peuvent casser ?

_kilian_
Niveau 10
30 mai 2020 à 14:59:04

Il faut savoir que c'est bien l'ID qui est utilisé sur JVC et cela peut effectivement représenter une faille de sécurité (Forced Browsing Attack).

Une bonne méthode c'est d'ajouter un champ dans ta BDD qui correspond à ce numéro unique, qui lui sera bien généré totalement aléatoirement à la création du topic.

TheRealMarco
Niveau 10
30 mai 2020 à 15:13:29

Le 30 mai 2020 à 14:59:04 _kilian_ a écrit :
Il faut savoir que c'est bien l'ID qui est utilisé sur JVC et cela peut effectivement représenter une faille de sécurité (Forced Browsing Attack).

Une bonne méthode c'est d'ajouter un champ dans ta BDD qui correspond à ce numéro unique, qui lui sera bien généré totalement aléatoirement à la création du topic.

Le problème c'est d'utiliser un id qui n'est pas généré aléatoirement ? Pas de devoir utilisé deux id.

_ZawaZawaZawa_
Niveau 9
30 mai 2020 à 15:45:03

Le 30 mai 2020 à 14:41:18 TheRealMarco a écrit :

Le 30 mai 2020 à 00:11:42 _ZawaZawaZawa_ a écrit :

Le 29 mai 2020 à 21:51:41 Raaga a écrit :

Le 29 mai 2020 à 20:50:22 _ZawaZawaZawa_ a écrit :
ils ont bien un id en bdd tes topics ?

Oui mais on m'a toujours dit de ne pas mettre l'id car c'est dangereux

bof c'est des topics hein pas des données sensibles ça concerne pas les profils des utilisateurs par exemple

pour moi le seul souci c'est que si dans le futur tu migres ta bdd toutes les URL peuvent casser. Mais bon c'est surtout pour que tu vois l'idée, au pire tu refais un champ avec un autre "id" qui ne sera pas techiquement celui de la base mais celui exprès pour le slug, doctrine a probablement des annotations pour spécifier que ça doit être unique

Pourquoi si on migre la BDD les URL peuvent casser ?

ça dépend de comment il implémente et de comment il migrerait les données, mais si il fait pas gaffe ça peut faire changer les id

bon il aurait qu'à faire gaffe, mais mieux vaut un max de précaution, moi je ferais un champ dédié au cas où, genre "code_topic" ou jsais pas quoi comme ça si il change d'avis sur le moindre détail il n'est pas fortement couplé à un champ de bas niveau géré entièrement par le SGBD

imagine il y a eu un énorme problème et il a reset pour avoir une base "vierge" sur laquelle se sont créés 20 topics récents, et il a un backup avec 200 topics anciens mais pas les récents, maintenant il veut restaurer le backup mais y ajouter les récents sur lesquels les utilisateurs discutent. Les 20 premiers id ils sont en double : il peut soit changer ces id ce qui casse des liens vers les nouveaux, soit virer les 20 plus vieux ce qui casse les liens vers les vieux.
Alors qu'avec un champ dédié avec un code exprès, on dépend pas autant du fonctionnement interne de la bdd et de ses id. Un tel code peut se générer à partir de l'id et d'un timestamp par exemple

Ou alors RIP les 20 topics, ça arrive même à des multinationales comme twitter d'en avoir rien à foutre et "d'oublier" 15 minutes d'activité

TheRealMarco
Niveau 10
30 mai 2020 à 16:05:44

imagine il y a eu un énorme problème et il a reset pour avoir une base "vierge" sur laquelle se sont créés 20 topics récents, et il a un backup avec 200 topics anciens mais pas les récents, maintenant il veut restaurer le backup mais y ajouter les récents sur lesquels les utilisateurs discutent. Les 20 premiers id ils sont en double : il peut soit changer ces id ce qui casse des liens vers les nouveaux, soit virer les 20 plus vieux ce qui casse les liens vers les vieux.

Alors qu'avec un champ dédié avec un code exprès, on dépend pas autant du fonctionnement interne de la bdd et de ses id. Un tel code peut se générer à partir de l'id et d'un timestamp par exemple

Le problème c'est d'utiliser un id autogénéré plutôt qu'un id basé sur un guid, non ?

_ZawaZawaZawa_
Niveau 9
30 mai 2020 à 22:20:55

guid c'est quoi déjà ? le timestamp × le nom du truc × un random ?

raaga
Niveau 7
31 mai 2020 à 00:38:16

j'ai trouvé justement merci, c'était un UID avec la librairie ramsey/uuid qui génère des id unique qu'on peut utiliser comme lien

TheRealMarco
Niveau 10
31 mai 2020 à 09:02:48

Le 30 mai 2020 à 22:20:55 _ZawaZawaZawa_ a écrit :
guid c'est quoi déjà ? le timestamp × le nom du truc × un random ?

Je voulais dire UUID. Peut importe l'implémentation, un id généré aléatoirement avec une probabilité suffisamment forte pour qu'il n'y ait pas deux ids égaux.

1
Sujet : Comment créer un Champ unique comme sur ce forum ??
   Retour haut de page
Consulter la version web de cette page