Aller au contenu
sandrinoo

Remplacer en php un élément d'un champs mysql

Noter ce sujet :

Recommended Posts

Bonjour,



Ci-joint, un fichier php qui fonctionne et fait bien le remplacement des accents sur la table que tu as indiqué sur la page précédente.



Test et dis moi.




Portekoi


test.php

Partager ce message


Lien à poster
Partager sur d’autres sites

Donne moi ton mail en message privé, je vais te l'envoyer.



Le but étant que tu utilises mon fichier.


Partager ce message


Lien à poster
Partager sur d’autres sites

Le bug de téléchargement a été corrigé, il me semble !

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut les gars et merci beaucoup.



1/ J'ai pu télécharger le fichier mais il me fait un message d'erreur :



Warning: mysqli::mysqli() [mysqli.mysqli]: (HY000/2002): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)



2/ c'était pas ce que je voulais : j'arrive maintenant à changer les accents au coup par coup avec des replaces imbriqués dans le select;



Ce que je souhaitais : c'était utiliser dans le select la fonction Iconv() pour supprimer tous les accents d'un seul coup.



C'est possible ou pas ?



Je sais je commence à être pénible la...


Partager ce message


Lien à poster
Partager sur d’autres sites

Re,

1 - Pour l'erreur : "Warning: mysqli::mysqli() [mysqli.mysqli]: (HY000/2002): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)"

A toi de mettre les bons paramètres de connexion.

2 - Tu as posté au sujet d'un problème d'accent. Stéphane en Stephane.

Question : Est-ce qu'avec le fichier que je t'ai envoyé, Stéphane devient bien Stephane, comme sur mon ordinateur?

3 - Tu veux maintenant remplacer tous les accents dans un champ donné via la fonction IConv.
iConv est une fonction php et non Mysql. Comme l'a dit Captain, tu ne peux pas l'utiliser dans ta requête directement.

Portekoi

Partager ce message


Lien à poster
Partager sur d’autres sites

1 et 2/ Oui le fichier test.php fonctionne chez moi. Merci encore Portekoi.


3/ j'ai enfin compris que iconv() ne peut pas être placé dans un select. Je sais je suis pas rapide :(



Merci Dan, Portekoi et captain_torche !



Une dernière chose : en fait ce que je voulais simplement savoir c'est :



Est-il possible de mettre dans le select un code qui supprime tous les accents d'un seul coup


ou suis-je obligée de faire dans le select des imbrications de replace pour tous les accents à traiter (ce qui me paraît un peu lourd) ?



Merci de bien vouloir répondre à cette dernière question...


Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour,



Mysql n'est pas fait pour cela donc pour moi, non. Tu dois faire un select "normal" de ton champ puis remplacer les accents via PHP.



Passer par Mysql pour cela serait comme d'utiliser une 2Cv sur un circuit de F1.




Portekoi


Partager ce message


Lien à poster
Partager sur d’autres sites

Et surtout : pourquoi vouloir absolument supprimer les accents dans ta BDD ? C'est un besoin spécifique, ou c'est pour pallier à un comportement non voulu ?


Partager ce message


Lien à poster
Partager sur d’autres sites

A Portekoi :



Tu dois faire un select "normal" de ton champ puis remplacer les accents via PHP.


En fait il me faut vraiment remplacer les accents dans le select, pas après.



Ou alors :


1/ dans un premier temps : supprimer les accents via php du champ "prenom"


2/ puis, dans un deuxième, temps faire le select avec les valeurs sans accent du champ "prenom"



mais je crains que cela ne soit pas possible.



A Captain_Torche :



En fait je suis sûre que n'étant pas douée naturellement pour la programmation, je me complique la vie.



Je cherche à comparer l'url à un champ de BDD pour générer ou non des 404


en gros si valeur du champ (non accentuée) = url (non accentuée) >> on affiche la page sinon 404



peut-être y-a-t-il un moyen plus simple de faire cela ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Pour quelle raison veux-tu un SELECT ? Parce que si tu veux éditer tous ces champs dans ta base, il faudrait plutôt un UPDATE, non ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Comment crées-tu tes urls ? SI possible, il faudrait simplement les associer à tes pages.


Parce que les accents ne sont pas les seuls obstacles que tu pourrais avoir : que fais-tu des espaces ? Des majuscules ? Des caractères de ponctuation ? (Etc).



Dans l'idéal, il faudrait que ta table contienne un champ url à un bon format, et c'est sur ce champ que tu ferais la correspondance.



De même, tu auras des correspondances à afficher vers une seule table, ou plusieurs ? Si c'est plusieurs, il faudrait envisager une table intermédiaire.



Si tu le souhaites, j'ai écrit un article pour la transformation d'un texte en url.


Partager ce message


Lien à poster
Partager sur d’autres sites

Perso j'ai toujours pas compris pourquoi tu voulais absolument faire un select (ou mettre à jour la base de données) ;-)



Tu peux très bien lire le champ prénom de ta base de données. Mettre la valeur dans une variable puis appliquer à cette variable une fonction de traitement (celle de Captain Torche par exemple).


Et ensuite faire une comparaison de ta variable avec l'url.



Perso je créé un champ slug pour avoir une url personnalisée avec des règles de validation pour éviter la saisie de caractères non autorisés.


Partager ce message


Lien à poster
Partager sur d’autres sites

Le problème survient surtout quand tu veux faire l'opération inverse : retrouver une entrée de la BDD en fonction de son url, que surviennent les problèmes.


D'où la nécessité d'ajouter un champ url dans la table.


Partager ce message


Lien à poster
Partager sur d’autres sites

Je pense qu'il y a surtout un problème d'algorithme dans ce que tu veux faire sandrinoo.


Partager ce message


Lien à poster
Partager sur d’autres sites

Je le pense aussi. Il faut bien mettre à plat ce que tu veux faire et surtout voir si il n'y a pas d'autres solutions plus logiques.


Partager ce message


Lien à poster
Partager sur d’autres sites

Oui Captain c'est ça :



Le problème survient surtout quand tu veux faire l'opération inverse : retrouver une entrée de la BDD en fonction de son url, que surviennent les problèmes.

Je vois pas comment je pourrais faire autrement. Je suis obligé de retrouver dans la BDD une valeur de mon champ suivant l'url affichée, non ?


Vous voyez un autre moyen ?



Car Nicola :



Tu peux très bien lire le champ prénom de ta base de données. Mettre la valeur dans une variable

c'est pas possible cela car comment sortir juste la valeur adéquate de la BDD ?


Partager ce message


Lien à poster
Partager sur d’autres sites

Si tu n'as qu'une seule table dans ta BDD à laquelle correspondent des urls :


- Ajoute un champ "url" (Ou slug, comme te le dit nicolas)


- Effectue un script pour générer une url pour les données existantes


- Ajoute l'url à chaque ajout de ligne



Si tu as plusieurs tables, une table intermédiaire sera nécessaire, avec comme colonnes :


- Une url unique


- Le nom de la table concernée


- L'id de l'élément dans la table concernée.


Partager ce message


Lien à poster
Partager sur d’autres sites

Oui Captain,



c'est ce que je vais faire : créer un champs supplémentaire URL au bon format (slug).



Par contre pas compris "Ajoute l'url à chaque ajout de ligne" ?


Partager ce message


Lien à poster
Partager sur d’autres sites

Pas de soucis ;-)



Juste pour dire qu'avec un Framework il suffit de mettre dans le beforeSave du modèle un test si un slug a été saisi sinon on le génère avec une fonction déjà implémentée dans le FW.


Ca prend environ 6 lignes ;-) De plus la fonction de génération de slug fonctionne bien. On ne réinvente pas la roue et le code contient uniquement la logique. Les fonctions de bases testées XXXX fois sont dans les libs (coeur du FW).



Mais avant d'utiliser un FW il faut maîtriser les bases du PHP.


Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant

×