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

Langage PHP Discussion :

encodage de $_POST


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de tigunn
    Homme Profil pro
    Développeur de bug
    Inscrit en
    Janvier 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    Par défaut encodage de $_POST
    Bonjour,
    J'ai un petit souci auquel je n'entend rien malheureusement.
    Sur une page php j'ai deux formulaires:
    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
    <script  type="text/javascript">
    /*	Pour ajouter un item	*/
    	/*		$('new-item').addEvent() est definit hors de window.addEvent('domready',function(){})
    	car, sinon, l'ajout des item ne se fait pas;
    	du coup, cela génère une erreur JS	*/
    	$('new-item').addEvent('submit', function(e) {
    		new Event(e).stop();
    		var url = this.getProperty('action');
    		var method = this.getProperty('method');
    		new Request.HTML ({
    			url: url,
    			method: method,
    			update: $('debug'),
    			onComplete: function() {
    				$('new-item').reset();
    				tree.reload({
    					url: 'data_plan.php?json=yesplease&idp=<?php echo $id_plan?>'
    				});
    			}
    		}).post(this);
    	});
    </script><?php//	cadre d'ajout d'un nouvel item
    echo '<fieldset>
    	<legend>'.gettext('Ajouter un nouveau terme').'</legend>
    	<form id="new-item" method="post" action="save_plan.php">
    			<input type="hidden" name="idp" value="'.$id_plan.'"/>
    			<input type="hidden" name="idu" value="'.$id_user.'"/>
    			<input type="text" name="name" />
    			<input type="submit" value="Ajouter" name="addItem" />
    	</form>
    </fieldset>';
    //	cadre pour ajouter un nouvel item
    echo '<fieldset>
    	<legend>'.gettext("Liste des termes").'</legend><div id="form_ajout_termes">
    	<div id="bloc_liste_termes">';
    	?>
    <script type="text/javascript">
    // Mise en page du tableau des termes
    dom.query(document).ready(function() {
        dom.query('#datatable').dataTable( {
            "bJQueryUI": true,
            "sPaginationType": "full_numbers",
            "sDom": 'T<"clear">lfrtip',
            "oLanguage": {
                "sUrl": "jscripts/datatable/media/js/fr_FR.txt"
            }
        } );
    } );
    </script> 
    <?php
    //	definitions
    $termes=ClasseTerme::getTabAssocAllTermesAllType();
    //	affichage
    echo '<form id="form_add_terme" method="post" action="save_plan.php">
    <input type="hidden" name="node" value="plan"/>
    <input type="hidden" name="mode" value="add_terme"/>
    <input type="hidden" name="idp" value="'.$id_plan.'"/>
    <input type="hidden" name="idu" value="'.$id_user.'"/>
    <input type="hidden" name="addTerme" value="true"/>
    <table cellpadding="0" cellspacing="0" id="datatable">
    	<thead>
    		<tr>
    			<th class="col_icone">&nbsp;</th>
    			<th>'.gettext('Termes').'</th>
    		</tr>
    	</thead>
    	<tbody>';
    foreach ($termes as $id_terme => $term) {
    	echo '<tr>
    		<td class="col_icone"><input type="checkbox" name="add_term_'.$id_terme.'" id="add_term_'.$id_terme.'" /></td>
    		<td>'.$term['terme'].'</td>
    	</tr>';
    }
    echo '</tbody>
    </table>
    <span id="bloc_button_droite">
    	<input type="submit" value="Ajouter" name="add_term" />
    </span>
    </form>';
    echo '</div></fieldset>';
    Ses actions sont définis dans save_plan.php:
    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
    function addItem($title) {
    	$id_plan=$_REQUEST['idp'];
        $title = mysql_real_escape_string($title);
        //$title = filter_var($title, FILTER_SANITIZE_SPECIAL_CHARS);
        $id_user=$_REQUEST['idu'];
        if ($title != '') {
            $sql = "INSERT INTO plans_item SET `idPlan` = ".$id_plan.",`parentId` = 0, `order` = 0, name='".$title."', cuid='".$id_user."', muid='".$id_user."', ctime=NOW()";
            $result = mysql_query($sql) or die(mysql_error());
        }
    }
     
    function addTermes() {
    	$id_plan=$_REQUEST['idp'];
        $id_user=$_REQUEST['idu'];
        $nb_termes=0;
        // recup du nombre total de termes
        $sql = "SELECT MAX(ID) AS id_max FROM termes";
        $result = mysql_query($sql) or die(mysql_error());
        $row=mysql_fetch_assoc($result);
        if (isset($row['id_max'])) {
    	    $nb_termes=$row['id_max'];
        }
        unset($sql,$result);
        //	Boucle pour enregistrer tous les termes cochés
        for ($i=1; $i<=$nb_termes; $i++) {
        	if (isset($_POST['add_term_'.$i])) {
        		$sql2 = "SELECT ID, terme, type_terme, cote, num_frag, muid, mtime, cuid, ctime 
        					FROM termes 
        					WHERE ID = ".$i;
    		    $result2 = mysql_query($sql2) or die(mysql_error());
    		    $row2=mysql_fetch_assoc($result2);
    		    if (isset($row2['ID'])) {
    		    	$type_item = mysql_real_escape_string($row2['type_terme']);
    		    	$nom_item = mysql_real_escape_string($row2['terme']);
    		    	//$nom_item = filter_var($nom_item, FILTER_SANITIZE_SPECIAL_CHARS);
    		    	//$nom_item=htmlentities($row2['terme'], 'ENT_QUOTES', 'UTF-8');
    		    	$sql3 = "INSERT INTO plans_item SET 
            			`idPlan` = ".$id_plan.",
            			`parentId` = 0, 
            			`order` = 0, 
            			`name`='".$nom_item."',
            			`type_item`='".$type_item."',
            			`ideObjet`='".$row2['ID']."',
            			cuid='".$id_user."', 
            			muid='".$id_user."', 
            			ctime=NOW()";
            		$result3 = mysql_query($sql3) or die(mysql_error());
            		unset($sql3,$result3);
    		    }
    		    unset($sql2,$result2);
        	}
        }
    }
     
    if (isset($_POST['m']) ) {
        $aMenu = (array) json_decode(stripslashes($_POST['m']));
        saveList(0, $aMenu);
        die();
    }elseif (isset($_POST['addItem'])) {
        // add item
        if ((isset($_POST['name'])) && ($_POST['name']!='')) {
        	addItem($_POST['name']);
        }
        header('Location: plan.php?node=plan&mode=update&idp='.$id_plan);
    }
    if (isset($_POST['addTerme'])) {
    	addTermes();
    	header('Location: plan.php?node=plan&mode=update&idp='.$id_plan);
    }
    Le résultat, et mon problème, c'est que si j'utilise le formulaire "new-item" j'enregistre dans ma bdd: "bruyère" pour "bruyère" (et tout va bien car j'affiche "bruyère"); par contre avec le formulaire form_add_terme, j'enregistre "bruyère" dans la bdd mais l'affichage donne "bruy" - aucun caractère après l'accent n'est affiché.
    Je voudrais surtout comprendre pourquoi l'un donne dans ma base "bruyère" et l'autre "bruyère" ?

  2. #2
    Membre éclairé Avatar de tigunn
    Homme Profil pro
    Développeur de bug
    Inscrit en
    Janvier 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    Par défaut
    Je me répond et rapporte une réponse tirée de ce sujet:
    il suffit d'utiliser utf8_encode sur mes variables avant l'INSERT et tout va pour le mieux.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $nom_item = utf8_encode($row2['terme']);

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

Discussions similaires

  1. [PHP 5.3] probléme d'encodage des _POST
    Par Invité dans le forum Langage
    Réponses: 1
    Dernier message: 08/10/2011, 16h27
  2. Encodage de cd en fichier mp3
    Par clovis dans le forum Applications et environnements graphiques
    Réponses: 4
    Dernier message: 08/04/2004, 01h13
  3. [ENCODAGE][JAVA]Afficher correctement des accents
    Par kornelius dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 17/02/2004, 16h37
  4. Encodages DOS et Windows
    Par Aramis dans le forum Langage
    Réponses: 5
    Dernier message: 09/11/2003, 17h55
  5. [VB6] fonction d' encodage URL en VB
    Par jeanseb dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 14/01/2003, 11h16

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