Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/10/2011, 11h27   #1
Membre expérimenté
 
Avatar de tigunn
 
Homme
Développeur de bug
Inscription : janvier 2003
Messages : 520
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 31
Localisation : France

Informations professionnelles :
Activité : Développeur de bug

Informations forums :
Inscription : janvier 2003
Messages : 520
Points : 536
Points : 536
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 :
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 :
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" ?
__________________
"le rhume distillation - L’estomac est la cucurbite, le cerveau le chapiteau, & le nez le réfrigérant par lequel s’écoule goutte à goutte le produit de la distillation."
de Avicenne

Le monde se divise en deux: ceux qui utilisent le tag et les autres.

Un problème? venez en découdre!
tigunn est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2011, 11h52   #2
Membre expérimenté
 
Avatar de tigunn
 
Homme
Développeur de bug
Inscription : janvier 2003
Messages : 520
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 31
Localisation : France

Informations professionnelles :
Activité : Développeur de bug

Informations forums :
Inscription : janvier 2003
Messages : 520
Points : 536
Points : 536
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 :
$nom_item = utf8_encode($row2['terme']);
__________________
"le rhume distillation - L’estomac est la cucurbite, le cerveau le chapiteau, & le nez le réfrigérant par lequel s’écoule goutte à goutte le produit de la distillation."
de Avicenne

Le monde se divise en deux: ceux qui utilisent le tag et les autres.

Un problème? venez en découdre!
tigunn est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h04.


 
 
 
 
Partenaires

Hébergement Web