IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

trim ne fonctionne pas ni en mysql ni en php [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 144
    Par défaut trim ne fonctionne pas ni en mysql ni en php
    Bonjour,

    J'ai dans une base mysql des données qui contiennent des espaces en début de chaîne. J'ai donc tenté un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE `ma_table`
    SET `champ_a_corr`= TRIM(`champ_a_corr`)
    Mais ça n'a pas marché

    J'ai essayé avec une fonction PHP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    $TxtReq = "SELECT `id`, `champ_a_corr`
      FROM `ma_table`
    ";
    $res_req = mysql_query($TxtReq);
    while(list($id, $nom) = mysql_fetch_row($res_req)) {
      $TxtReq2 = "UPDATE `ma_table`
        SET `champ_a_corr` = '" . trim($nom) . "'
        WHERE `id` = $id
      ";
      $res_req2 = mysql_query($TxtReq2);
    }
    ?>
    Je précise que j'ai vérifié que les espaces n'étaient pas des caractères d'affichage d'espace (comme &nbsp; par ex.), que la collation est en latin1_swedish_ci, et que j'ai essayé de la passer aussi en UTF8, mais que ça ne change rien, et enfin qu'un traitement manuel champ par champ avec phpmyadmin marche.

    Je bloque vraiment, je ne comprends pas ce qui ne va pas (et pourtant je me débrouille bien d'habitude à la fois en PHP et en MySql)

    Merci à vous pour vos idées

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 322
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 322
    Billets dans le blog
    17
    Par défaut
    Poste ici un extrait d'export de la BdD.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 144
    Par défaut
    Voilà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    -- phpMyAdmin SQL Dump
    -- version 3.4.9
    -- http://www.phpmyadmin.net
    --
    -- Host: localhost
    -- Generation Time: Apr 01, 2012 at 05:09 PM
    -- Server version: 5.5.20
    -- PHP Version: 5.3.9
     
    SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
    SET time_zone = "+00:00";
     
     
    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8 */;
     
    --
    -- Database: `lc`
    --
     
    -- --------------------------------------------------------
     
    --
    -- Table structure for table `pb_trim`
    --
     
    CREATE TABLE IF NOT EXISTS `pb_trim` (
      `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `champ_a_corr` varchar(127) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
     
    --
    -- Dumping data for table `pb_trim`
    --
     
    INSERT INTO `pb_trim` (`id`, `champ_a_corr`) VALUES
    (1, '**Mme**Jeanne-Claude**CANISSE'),
    (2, '**M.**Michel**SILVANY'),
    (3, '**Mme**Albertine**FERNANDEZ'),
    (4, '**M.**Bernard**JEANSAUME'),
    (5, '**M.**Joël**TROJAR');
    Ce qui est bizarre, c'est que lorsque je fais un aperçu là maintenant avant de poster le message, ce qui apparait est en rouge avec des ** à la place des espaces...
    Idem sans la balise code : (1, '**Mme**Jeanne-Claude**CANISSE')

    Sous Geany (mon éditeur), j'ai des espaces à l'écran.
    Sous Bluefish (autre éditeur), j'ai des caractères spéciaux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (1, 'Â*Â*MmeÂ*Â*Jeanne-ClaudeÂ*Â*CANISSE'),
    Sous vi j'ai également des espaces.

    (Ça fait des années que je suis sous linux, et des années que je programme, et ça ne m'a jamais fait ça)

    Je pense qu'il doit exister des caractères alternatifs aux espaces (quel codage ?) et que ce sont eux qu'il faut remplacer.

    C'est vraiment bizarre, merci pour vos idées

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 144
    Par défaut
    J'ai essayé de remplacer ces "faux" espaces par des vrais (boucle if qui suit le while):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    while(list($id_cand, $nom) = mysql_fetch_row($res_req)) {
      if($nom[0] != 'M') {
        $esp_spec = $nom[0];
        $nom = str_replace($esp_spec, ' ', $nom);
        echo "<p>Espace special : $esp_spec (nom = $nom)</p>";
      }
      $TxtReq2 = "UPDATE `pb_trim`
        SET `champ_a_corr` = '" . trim($nom) . "'
        WHERE `id` = $id_cand
      ";
      $res_req2 = exe_req($TxtReq2);
    }
    Et là, ces espaces spéciaux sont reconnus, mais incomplètement remplacés. Affichage Html (balise echo) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Espace special : � (nom = �Mme � �Jeanne-Claude � �CANISSE)
    Et un aperçu dans la base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ?Mme ? ?Jeanne-Claude ? ?CANISSE
    (Le trim marche puisqu'il efface l'espace précédent le point d'interrogation)

    Mais là encore je ne comprends pas bien pourquoi le str_replace ne fonctionne qu'incomplètement, en rajoutant le caractère spécial � (correspond à l'écran au losange noir avec un point d'interrogation à l'intérieur)

  5. #5
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 322
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 322
    Billets dans le blog
    17
    Par défaut
    Tu as sûrement enregistré du UTF-8 alors que ta BdD est en ISO-8859-1.
    Cf. les fonctions de conversions UTF-8 => ISO-8859-1 de PHP/MySQL.

  6. #6
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    l'espace est dans les 2 codages avec la même valeur... la valeur 32 ou 20 en hexa

    la question est donc avec quoi tu as saisi le contenu? un formulaire? csv?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD19] hchangeconnexion ne fonctionner pas avec base mysql
    Par ecoinfo dans le forum WinDev
    Réponses: 6
    Dernier message: 14/12/2014, 23h49
  2. La fonction "source" de MySQL ne fonctionne pas
    Par muad'dib dans le forum JDBC
    Réponses: 14
    Dernier message: 15/01/2007, 17h25
  3. Réponses: 3
    Dernier message: 02/12/2006, 16h10
  4. mysql rand() ne fonctionne pas
    Par renaud26 dans le forum Requêtes
    Réponses: 4
    Dernier message: 28/09/2006, 16h54
  5. Requete qui ne fonctionne pas sur toutes les versions de MySQL
    Par goldorax113 dans le forum Requêtes
    Réponses: 2
    Dernier message: 06/06/2006, 11h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo