Aller au contenu

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


sandrinoo

Sujets conseillés

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...


Lien vers le commentaire
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

Lien vers le commentaire
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...


Lien vers le commentaire
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


Lien vers le commentaire
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 ?

Lien vers le commentaire
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 ?

Lien vers le commentaire
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.


Lien vers le commentaire
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.


Lien vers le commentaire
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.


Lien vers le commentaire
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 ?


Lien vers le commentaire
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.


Lien vers le commentaire
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.


Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...