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 :

caractere spéciaux ! [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 210
    Par défaut caractere spéciaux !
    Bonjour à tous
    voici mon souci, des caractères invisible ce rajoutent à certaines de mes variables :
    J'appelle une page ( modification facture) qui va chercher ses info dans phpmyadmin.
    champs [ Tva ] [ Quant ] [ ht unitaire ] [ HT ] et [TTC] qui s'affichent comme il faut, je fait un test avec strlen et le retour est correct. dans ma bdd aussi !
    Je rajoute des lignes supplémentaires, donc de nlles valeurs [ Tva ] [ Quant ] [ ht unitaire ] [ HT ] et [TTC]
    je valide avec un POST...ET la réception des valeurs [ HT ] et [TTC] ce retrouvent avec pas moins de 6 caractères vides en fin de chaine !
    c'est à dire [500.00] devient [500.00+6espaces] qui n'en sont pas d’ailleurs ,et ça,ma BDD n'en veut pas,
    car elle attend un chiffre avec 2 décimal (Incorrect décimal value: '500 ' for column 'ht') idem pour TTC
    MAIS seulement sur les valeurs qui ont étaient piochées dans la BDD , c'est à dire , pas de blème avec mes nouvelle sommes !
    Je devrais donc voir les erreurs dés la première page si ça vient du passage Base => php !
    j'ai essayé tout les str_replace et semblable: ça ne marche pas, supprimer après réception les 6 derniers caractères, mais c'est pas un solution !
    Pour info mes pages sont en utf8 et mes tables sont en utf8 général ci !
    j'utilise un peu de JS pour les calculs automatique, mais il est hors de cause car je m'en sert pour la CRÉATION de facture et je n'ai pas ce problème.
    Ma question est : comment analyser plus minutieusement ces données qui transitent ?
    Voici une copie du var_dump , en bas j'ai affiché la valeur concernée caractère par caractère :

    Nom : Capture.JPG
Affichages : 280
Taille : 56,3 Ko



    Là des losanges apparaissent ! Mais pas sur la valeur 40 qui fait partie des nlles entrées !
    .
    .
    Voilou... merci de votre aide

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Ces caractères n'apparaissent pas "par magie".
    Mais vu que tu ne montres aucun code d'affichage / récupération en Bdd / calcul JS / ......... on ne peut rien dire de plus.

    Méthode :
    • affiche la données A CHAQUE ETAPE du processus
    • re-vérifie en bdd

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 210
    Par défaut
    Voici le code :
    reception des info et ecriture : => affichage et vérification pour test de la ligne 17 à 23 visible sur la capture en bas de post
    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    $sql = 'SELECT * FROM `lgnfact` WHERE `NumFact`= '.$numfact.' ORDER BY `id` ASC ';
     
    			$result = $bdd->query($sql);
     
    			$resultat=$result->fetchAll(PDO::FETCH_ASSOC);		
     
    		foreach ($resultat as $row) 
     
    			{	$a++;
     
    			  $id=$row['id'];
     
    			  $designa=$row['designa'];
     
    			   $tax=$row['taxe'];
     
    			   echo  $htunit=$row['htunit'];
     
    			  echo  '|'.$ht=trim($row['ht']);
     
    			  echo  '['.strlen($row['ht']).']';
     
    			 echo   $ttc=trim($row['ttc']);
     
    			 echo  '['.strlen($row['ttc']).']';
     
    			   $q=$row['q'];
     
     
    	echo'
     
    <textarea style="display:block" onkeyup="verif(this,1)" cols="40" rows="1" class="input1 xcolor" id="area_'.$a.'"  name="designa'.$a.'">'.$designa.' </textarea> 
     
    <input class="span2 xcolor1"   style="display:block" name="taxe'.$a.'" value="'.$tax.'" type="text"   id="tva_'.$a.'" onChange="calcul('.$a.');" >	
     
    <input class="span2_2 xcolor3" style="display:block" name="q'.$a.'"  value="'.$q.'" type="text"   id="q_'.$a.'"   onChange="calcul('.$a.');" > 
     
    <input class="span3 xcolor2"  style="display:block" name="htunit'.$a.'" value="'.$htunit.'" type="text"   id="htunit_'.$a.'"onChange="calcul('.$a.');" >
     
    <input class="span3 xcolor2"  style="display:block" name="htaxe'.$a.'"   value="'.$ht.'&nbsp;&nbsp;&nbsp;" type="text"  id="ht_'.$a.'"  >	
     
    <input class="span4 xcolor" style="display:block" name="taxec'.$a.'"   value="'.$ttc.'&nbsp;&nbsp;&nbsp;" type="text" id="ttc_'.$a.'" > 
     
    <input class="input5" style="display:block;border-radius:5px;cursor:pointer;" id="btn_efface_'.$a.'" value="X" type="button" onClick=\'erase('.$a.','.$nbr_lgnJS.','.$nbr_lgnJS.');\' >';
     
     
     
    	}
     
     
    ?>
     
     
     
    <script type='text/javascript'>
     
    /*calcultoto();*/
     
    var nlignes = <?php echo $nbr_lgnJS ;?>;
     
     
     
    function Ajouter(){
     
    nlignes++;
     
    saisies1.insertAdjacentHTML('BeforeEnd','<textarea onkeyup="verif(this,1)" cols="40" rows="1" class="input1 xcolor" id="area_'+nlignes+'"  name="designa'+nlignes+'"></textarea> <select class="span2 xcolor1" name="taxe'+nlignes+'" id="tva_'+nlignes+'"  onChange="calcul('+nlignes+');" > <option value="0.00">0.00</option>  <option value="1.10">&nbsp;&nbsp;10</option><option value="1.20">20</option></select><input class="span2_2 xcolor3" name="q'+nlignes+'" value="" type="text"  id="q_'+nlignes+'" onChange="calcul('+nlignes+');" > <input class="span3 xcolor2" name="htunit'+nlignes+'" value="" type="text"  id="htunit_'+nlignes+'" onChange="calcul('+nlignes+');" ><input class="span3 xcolor2" name="htaxe'+nlignes+'" value="" type="text"  id="ht_'+nlignes+'" onChange="calcul('+nlignes+');" >	<input class="span4 xcolor" name="taxec'+nlignes+'" type="text"  id="ttc_'+nlignes+'" value="" onChange="calcul2('+nlignes+');" ><input class="input5" style="display:block;border-radius:5px;cursor:pointer;" id="btn_efface_'+nlignes+'" value="X" type="button" onClick="erase(nlignes,nlignes);"> ');};
     
     
     
    </script>
     
     
     
    <div id="saisies1"> </div>
     
     
     
    </div><!--centre_2-->
     
     
     
    <!--***************************************************-->
     
     
     
    <div  class="cont_basfact">  
     
     
    		<!-- ===== TOTAL input HT ET TTC  ================== -->
     
     
    		<span class="input1 span1_2" >&nbsp;</span> 
     
    		<span class="span3 span1_2">&nbsp;</span>
     
    		<input   class="span2 xbackground" id=""  type="text"  size=""  value=""  >
     
    		<input class="span2_2 xbackground" id=""  type="test"  size=""  value=""  > 
     
    		<input class="span3 xcolor2" id="totHT"  type="text" name ="totHT" size=""   value="<?php echo $totht; ?> &euro;" > 
     
    		<input class="span4 xcolor" id="totTTC" type="text"  name ="totTTC" size=""  value="<?php echo $totttc ; ?> &euro;"  >
     
     
    		<!-- ===== Champ ACOMPTE  ================== -->
     
     
    		<span class="input1 span1_2" >&nbsp;</span> 
     
    		<span class="span3 span1_2">&nbsp;</span>
     
    		<input   class="span2 xbackground" id=""  type="text"  size=""  value=""  >
     
    		<input class="span2_2 xbackground" id=""  type="test"  size=""  value=""  >
     
    		<input class="span3 xcolor2" id=""  type="text" name ="" size=""   value="<?php echo 'Acompte =>'; ?>" > 
     
    		<input class="span4 xcolor" id="ac" type="text"  onChange="calcultotoac();" name ="acompte" size=""  value=""  >
     
     
    		<!-- ===== Champ TOTAL - ACOMPTE   Reste A Regler ================== -->
     
     
    		<span class="input1 span1_2" >&nbsp;</span> 
     
    		<span class="span3 span1_2">&nbsp;</span>
     
    		<input   class="span2 xbackground" id=""  type="text"  size=""  value=""  >
     
    		<input class="span2_2 xbackground" id=""  type="test"  size=""  value=""  > 
     
    		<input class="span3 xcolor2" id=""  type="text" name ="" size=""   value="<?php echo 'Reste à Régler : '; ?> &euro;" > 
     
    		<input  class="span4 xcolor" id="rar" type="text"  name ="rar" size=""  value="<?php echo $ttc; ?>&euro; "   > 
     
     
    	 <div class="contener_btnPageModif ">
     
    		<!-- boutonns fin ================== -->
     
     
            <a class="btn_factdev"   title="Supprimer" href="list_fact.php?numfactsup=<?php echo $numfact; ?>" onclick="return confirm('Supprimer la facture ?');">Supprimer facture</a>
     
            <input name="annul"  type="button"  class="btn_factdev"  onclick="location.href='list_fact.php'"   value="Annuler" >
     
    		<input name="modif" type="submit" class="btn_factdev"   value="Enreg.Modif">
     
     
          </div><!-- contener_btnPageModif -->
       </div><!--cont_basfact-->
    </form>
    le JS :

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    /============== calcul auto des totaux sans acompte ============================//
     
    function calcultoto() {
     
    	var totht=0;
    	var totttc=0;
    	var t;	
    	for (t=1;t < 100 ;t++) //nombre arbitraire => 100
    	{
     
    	  var xht='ht_'+t;
    	  var xttc='ttc_'+t;
     
    	  var ht= document.getElementById(xht);
     
    	  if(ht) 
    		   {  
    		   ht=ht.value;
     
    		   var ttc = document.getElementById(xttc).value;
    		   totht=totht + Number(ht);
    		   totttc=totttc + Number(ttc);
    		   }
     
    	}
    	totht= totht.toFixed(2);
    	totttc= totttc.toFixed(2);
     
    	document.getElementById('totHT').value=totht;
    	document.getElementById('totTTC').value=totttc;
     
        var ac=document.getElementById('ac').value;
    	var totttc=document.getElementById('totTTC').value;
     
    	var totar=totttc - Number(ac);
     
    	totar=totar.toFixed(2);
     
    		document.getElementById('rar').value=totar;
     
     
    }
     
    //============== calcul auto des totaux ============================//
     
    function calcultotoac() {
     
    	var ac=document.getElementById('ac').value;
     
     
    	var totttc=document.getElementById('totTTC').value;
     
    	var totar=totttc - ac;
     
    	totar=totar.toFixed(2);
     
    	//totar=isNAN(totar);
     
    		document.getElementById('rar').value=totar;
     
     
     
    }
    Voila à quoi ça ressemble , on peut voir que la reception des données est correct :
    .
    Nom : Capture2.JPG
Affichages : 408
Taille : 109,7 Ko
    .
    Merci de votre aide
    .

  4. #4
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    c'est mal embarqué : si tu dois aller nettoyer tes données en base avant de les afficher c'est qu'il y un gros souci avec l'écriture en base et/ou la récupération des valeurs saisies dans tes formulaires.
    Il faut aller dépiauter cette partie du code.

    Ensuite tes symboles sont liés à un problème d'encodage.
    Pour que tout fonctionne sans aucune prise de tête tu dois être homogène au niveau des encodages sur toute la ligne, c'est-à-dire même encodage pour :
    - la base de données (UTF-8)
    - la connexion à la base de données (UTF-8)
    - encodage des fichiers PHP (UTF-8 sans BOM)
    - rendu HTML (UTF-8) avec sécurisation de toutes les données renvoyées via : htmlspecialchars()

    Ainsi tu resteras relax et penser à utiliser les fonctions compatibles UTF-8 commençant toutes par mb_xxx

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 210
    Par défaut

    j'ai honte....très honte.......

    dire que ça fait 2 jours que je suis la dessus

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <input class="span3 xcolor2"  style="display:block" name="htaxe'.$a.'"   value="'.$ht.'&nbsp;&nbsp;&nbsp;" type="text"  id="ht_'.$a.'"  >	
     
    <input class="span4 xcolor" style="display:block" name="taxec'.$a.'"   value="'.$ttc.'&nbsp;&nbsp;&nbsp;" type="text" id="ttc_'.$a.'" >
    je ne sais plus pourquoi j'ai mis ces espaces (ce programme à 3 ans)

    je mérite d’être fouetté en place public

    C'est tjrs pareil, une fois que l'on post, on trouve aussi la solution !

    Désolé de vous avoir dérangé ... et merci de votre attention

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

Discussions similaires

  1. afficher caracteres spéciaux
    Par Mousk dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 15/03/2006, 13h28
  2. [XML] Probleme de caracteres spéciaux
    Par Azonec dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 13/12/2005, 15h48
  3. remplacer les caracteres spéciaux
    Par roninou dans le forum Langage
    Réponses: 2
    Dernier message: 02/11/2005, 15h26
  4. Analyseur XML : extraction des caracteres spéciaux
    Par abdou.sahraoui dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 19/07/2005, 15h07
  5. [DB2] supprimer les caractere spéciaux
    Par guin dans le forum DB2
    Réponses: 1
    Dernier message: 17/01/2005, 16h34

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