sandrinoo Posté 12 Mars 2014 Auteur Posté 12 Mars 2014 Nicolas, non, il me le faudrais dans le select...
Portekoi Posté 12 Mars 2014 Posté 12 Mars 2014 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
sandrinoo Posté 12 Mars 2014 Auteur Posté 12 Mars 2014 Portekoi merci beaucoup, mais je n'ai pas la permission, semble-t-il, pour télécharger ton fichier test.php
Portekoi Posté 12 Mars 2014 Posté 12 Mars 2014 Donne moi ton mail en message privé, je vais te l'envoyer. Le but étant que tu utilises mon fichier.
sandrinoo Posté 13 Mars 2014 Auteur Posté 13 Mars 2014 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...
captain_torche Posté 13 Mars 2014 Posté 13 Mars 2014 Non, iconv est une fonction PHP, pas une fonction MySQL.
Portekoi Posté 13 Mars 2014 Posté 13 Mars 2014 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
sandrinoo Posté 13 Mars 2014 Auteur Posté 13 Mars 2014 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...
Portekoi Posté 13 Mars 2014 Posté 13 Mars 2014 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
captain_torche Posté 13 Mars 2014 Posté 13 Mars 2014 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 ?
sandrinoo Posté 13 Mars 2014 Auteur Posté 13 Mars 2014 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 ?
Dan Posté 13 Mars 2014 Posté 13 Mars 2014 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 ?
sandrinoo Posté 13 Mars 2014 Auteur Posté 13 Mars 2014 Non Dan car je voudrais conserver le champ "prenom" pour pouvoir l'utiliser autre part sur la page.
captain_torche Posté 13 Mars 2014 Posté 13 Mars 2014 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.
Nicolas Posté 13 Mars 2014 Posté 13 Mars 2014 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.
captain_torche Posté 13 Mars 2014 Posté 13 Mars 2014 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.
Portekoi Posté 13 Mars 2014 Posté 13 Mars 2014 Je pense qu'il y a surtout un problème d'algorithme dans ce que tu veux faire sandrinoo.
Nicolas Posté 13 Mars 2014 Posté 13 Mars 2014 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.
sandrinoo Posté 14 Mars 2014 Auteur Posté 14 Mars 2014 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 ?
captain_torche Posté 14 Mars 2014 Posté 14 Mars 2014 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.
sandrinoo Posté 14 Mars 2014 Auteur Posté 14 Mars 2014 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" ?
sandrinoo Posté 14 Mars 2014 Auteur Posté 14 Mars 2014 Désolée, compris Captain. Merci vivement à Nicolas, Portekoi, Captain_torche... Discussion résolue.
Nicolas Posté 14 Mars 2014 Posté 14 Mars 2014 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.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant