par
BeRoots » 30 nov. 2006, 00:26
pour plus d'info voici un exemple de formulaire:
<?php
// initialisation de la session
session_start();
// on inclus les variables xhtlm head et foot
include("includes/xhtml.php");
// on inclus les parametres de cryptage (iv, mode, cle, et algo)
include ("includes/secret_crypt.php");
// on recupere en session si existante les variable du formulaire sinon on les initialise
$list_variable = array('champ1', 'champ2', 'champ3', 'champ4');
foreach($list_variable as $nom_var)
{
if(isset($_SESSION["${nom_var}"]) && $_SESSION["${nom_var}"] != '')
{
${"${nom_var}"} = $_SESSION["${nom_var}"];
}
else
{
${"${nom_var}"} = '';
}
}
echo $xhtml_head; // envoi du head xhtml
if(isset($_POST['envoi'])) // SI CLIQUE SUR ENVOI
{
/* Récupération des données du formulaire */
$champ1 = isset($_POST['champ1']) ? trim($_POST['champ1']) : "";
$champ2 = isset($_POST['champ2']) ? trim($_POST['champ2']) : "";
$champ3 = isset($_POST['champ3']) ? trim($_POST['champ3']) : "";
$champ4 = isset($_POST['champ4']) ? trim($_POST['champ4']) : "";
// Traitement de vérification des champs vides
if ($champ1 == '' || $champ2 == '' || $champ3 == '' || $champ4 == '')
{
// ICI ON GERE LES MESSAGE D'ERREUR
// ensuite on rebalance le formulaire avec les infos déja saisies
?>
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post">
<input type="text" name="champ1" maxlength="20" value="<?php echo $champ1 ?>" /><br />
<input type="text" name="champ2" maxlength="20" value="<?php echo $champ2 ?>" /><br />
<input type="text" name="champ3" maxlength="20" value="<?php echo $champ3 ?>" /><br />
<input type="text" name="champ4" maxlength="20" value="<?php echo $champ4 ?>" /><br />
<input type="submit" name="envoi" value="Envoyer" />
</form>
<?php
}
else
{
// Si aucun des champs obligatoire n'est vide:
// Traitement des données
// on definie une variable de session specifique au formulaire pour contrôle de l'existance en session de donnée de formulaire
$_SESSION['form1'] = 'on';
// on sauve les variables en session pour retour vers le formulaire
$list_variable = array('champ1', 'champ2', 'champ3', 'champ4');
foreach($list_variable as $nom_var)
{
if(${"${nom_var}"} != '')
{
$_SESSION["${nom_var}"] = ${"${nom_var}"};
}
else
{
$_SESSION["${nom_var}"] = '';
}
}
// Affichage du message final des informations reçues
?>
<h1>Merci ! Voici les informations fournies</h1>
<p>ici le contenu du champ1: <?php echo $champ1 ; ?></p>
<p>ici le contenu du champ2: <?php echo $champ2 ; ?></p>
<p>ici le contenu du champ3: <?php echo $champ3 ; ?></p>
<p>ici le contenu du champ4: <?php echo $champ4 ; ?></p>
<p>Si vous souhaitez modifier ces informations, cliquez <a href="form1.php" title="Retour vers le formulaire">ICI</a></p>
<hr>
<p>Validation des informations</p>
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post">
<input type="submit" name="sauve" value="S'enregistrer" />
</form>
<?php
}
}
elseif(isset($_POST['sauve'])) // SI CLIQUE SUR SAUVE
{
// cryptage du champ1 et du champ2 pour enregistrement en db
$champ1_crypt = mcrypt_encrypt($algo, $cle, $champ1, $mode, $iv);
$champ1_crypt = base64_encode($champ1_crypt);
$champ2_crypt = mcrypt_encrypt($algo, $cle, $champ2, $mode, $iv);
$champ2_crypt = base64_encode($champ2_crypt);
//connexion au serveur MySQL
include ("includes/sql_connection.php");
$connexion = mysql_connect($hostdb, $userdb, $passdb) or die('Erreur SQL !<br />'.$connexion.'<br />'.mysql_error());
//sélection de la BDD
$db = mysql_select_db($usedb,$connexion) or die('Erreur SQL !<br />'.$db.'<br />'.mysql_error());
// insertion des données recuperer dans la table
$sql = "INSERT INTO table1 (champ1, champ2, champ3, champ4 VALUES('$champ1_crypt', '$champ2_crypt', '$champ3', '$champ4')";
$result = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
// déconnection avec MySQL
mysql_close();
?>
<h3>Merci! Vos coordonnées ont bien été enregistrées.</h3>
<?php
// on efface les variables de session du formulaire
$list_variable = array('champ1', 'champ2', 'champ3', 'champ4', 'form1');
foreach($list_variable as $nom_var)
{
unset($_SESSION["${nom_var}"]);
}
}
}
// Si cette page s'ouvre pour la première fois sans que envoi ou sauve n'ait
// été cliqué, alors on affiche le formulaire normalement
else
{
?>
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post">
<input type="text" name="champ1" maxlength="20" value="<?php echo $champ1 ?>" /><br />
<input type="text" name="champ2" maxlength="20" value="<?php echo $champ2 ?>" /><br />
<input type="text" name="champ3" maxlength="20" value="<?php echo $champ3 ?>" /><br />
<input type="text" name="champ4" maxlength="20" value="<?php echo $champ4 ?>" /><br />
<input type="submit" class="verif" name="envoi" tabindex="14" value="Envoyer" />
</form>
<?php
}
echo $xhtml_foot; // envoi du foot xhtml
?>
si je crypt une variable de post dans la boucle "envoi", le resultat differt du cryptage de la même variable mais récuperer en session dans la boucle "sauve"
pourtant les tests m'assure que cette variable post contient bien la même chose que sa correspondante récuperé en session...
et la j'en perd mon latin1 iso-8859-1
la seul chose que je vois serai une difference entre les jeux de caractère de POST et de SESSION mais rien de sur...
j'espère en tout cas que quelqu'un aura une idée sur le pourquoi du problème

merci d'avance
pour plus d'info voici un exemple de formulaire:
[php]<?php
// initialisation de la session
session_start();
// on inclus les variables xhtlm head et foot
include("includes/xhtml.php");
// on inclus les parametres de cryptage (iv, mode, cle, et algo)
include ("includes/secret_crypt.php");
// on recupere en session si existante les variable du formulaire sinon on les initialise
$list_variable = array('champ1', 'champ2', 'champ3', 'champ4');
foreach($list_variable as $nom_var)
{
if(isset($_SESSION["${nom_var}"]) && $_SESSION["${nom_var}"] != '')
{
${"${nom_var}"} = $_SESSION["${nom_var}"];
}
else
{
${"${nom_var}"} = '';
}
}
echo $xhtml_head; // envoi du head xhtml
if(isset($_POST['envoi'])) // SI CLIQUE SUR ENVOI
{
/* Récupération des données du formulaire */
$champ1 = isset($_POST['champ1']) ? trim($_POST['champ1']) : "";
$champ2 = isset($_POST['champ2']) ? trim($_POST['champ2']) : "";
$champ3 = isset($_POST['champ3']) ? trim($_POST['champ3']) : "";
$champ4 = isset($_POST['champ4']) ? trim($_POST['champ4']) : "";
// Traitement de vérification des champs vides
if ($champ1 == '' || $champ2 == '' || $champ3 == '' || $champ4 == '')
{
// ICI ON GERE LES MESSAGE D'ERREUR
// ensuite on rebalance le formulaire avec les infos déja saisies
?>
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post">
<input type="text" name="champ1" maxlength="20" value="<?php echo $champ1 ?>" /><br />
<input type="text" name="champ2" maxlength="20" value="<?php echo $champ2 ?>" /><br />
<input type="text" name="champ3" maxlength="20" value="<?php echo $champ3 ?>" /><br />
<input type="text" name="champ4" maxlength="20" value="<?php echo $champ4 ?>" /><br />
<input type="submit" name="envoi" value="Envoyer" />
</form>
<?php
}
else
{
// Si aucun des champs obligatoire n'est vide:
// Traitement des données
// on definie une variable de session specifique au formulaire pour contrôle de l'existance en session de donnée de formulaire
$_SESSION['form1'] = 'on';
// on sauve les variables en session pour retour vers le formulaire
$list_variable = array('champ1', 'champ2', 'champ3', 'champ4');
foreach($list_variable as $nom_var)
{
if(${"${nom_var}"} != '')
{
$_SESSION["${nom_var}"] = ${"${nom_var}"};
}
else
{
$_SESSION["${nom_var}"] = '';
}
}
// Affichage du message final des informations reçues
?>
<h1>Merci ! Voici les informations fournies</h1>
<p>ici le contenu du champ1: <?php echo $champ1 ; ?></p>
<p>ici le contenu du champ2: <?php echo $champ2 ; ?></p>
<p>ici le contenu du champ3: <?php echo $champ3 ; ?></p>
<p>ici le contenu du champ4: <?php echo $champ4 ; ?></p>
<p>Si vous souhaitez modifier ces informations, cliquez <a href="form1.php" title="Retour vers le formulaire">ICI</a></p>
<hr>
<p>Validation des informations</p>
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post">
<input type="submit" name="sauve" value="S'enregistrer" />
</form>
<?php
}
}
elseif(isset($_POST['sauve'])) // SI CLIQUE SUR SAUVE
{
// cryptage du champ1 et du champ2 pour enregistrement en db
$champ1_crypt = mcrypt_encrypt($algo, $cle, $champ1, $mode, $iv);
$champ1_crypt = base64_encode($champ1_crypt);
$champ2_crypt = mcrypt_encrypt($algo, $cle, $champ2, $mode, $iv);
$champ2_crypt = base64_encode($champ2_crypt);
//connexion au serveur MySQL
include ("includes/sql_connection.php");
$connexion = mysql_connect($hostdb, $userdb, $passdb) or die('Erreur SQL !<br />'.$connexion.'<br />'.mysql_error());
//sélection de la BDD
$db = mysql_select_db($usedb,$connexion) or die('Erreur SQL !<br />'.$db.'<br />'.mysql_error());
// insertion des données recuperer dans la table
$sql = "INSERT INTO table1 (champ1, champ2, champ3, champ4 VALUES('$champ1_crypt', '$champ2_crypt', '$champ3', '$champ4')";
$result = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
// déconnection avec MySQL
mysql_close();
?>
<h3>Merci! Vos coordonnées ont bien été enregistrées.</h3>
<?php
// on efface les variables de session du formulaire
$list_variable = array('champ1', 'champ2', 'champ3', 'champ4', 'form1');
foreach($list_variable as $nom_var)
{
unset($_SESSION["${nom_var}"]);
}
}
}
// Si cette page s'ouvre pour la première fois sans que envoi ou sauve n'ait
// été cliqué, alors on affiche le formulaire normalement
else
{
?>
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post">
<input type="text" name="champ1" maxlength="20" value="<?php echo $champ1 ?>" /><br />
<input type="text" name="champ2" maxlength="20" value="<?php echo $champ2 ?>" /><br />
<input type="text" name="champ3" maxlength="20" value="<?php echo $champ3 ?>" /><br />
<input type="text" name="champ4" maxlength="20" value="<?php echo $champ4 ?>" /><br />
<input type="submit" class="verif" name="envoi" tabindex="14" value="Envoyer" />
</form>
<?php
}
echo $xhtml_foot; // envoi du foot xhtml
?>[/php]
si je crypt une variable de post dans la boucle "envoi", le resultat differt du cryptage de la même variable mais récuperer en session dans la boucle "sauve" :-k
pourtant les tests m'assure que cette variable post contient bien la même chose que sa correspondante récuperé en session...
et la j'en perd mon latin1 iso-8859-1 :lol:
la seul chose que je vois serai une difference entre les jeux de caractère de POST et de SESSION mais rien de sur...
j'espère en tout cas que quelqu'un aura une idée sur le pourquoi du problème ;)
merci d'avance