retour page précédente en gardant les données

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : retour page précédente en gardant les données

Re: retour page précédente en gardant les données

par ghost5922 » 30 mai 2013, 11:31

Bonjour,

oui le plus simple et d'avoir le formulaire et la vérification sur la même page mais si cela n'est pas possible, il est possible de mettre sur la page de vérification un formulaire retour
<?php
echo'<form action="index.php" method="post">';
foreach($_POST as $name =>$value){
echo '<input name="'.$name.'" value="'.$value.'" type="hidden" />';
}
echo'<input type="submit" value="Retour" /></form>';
?> 
et sur la page du formulaire dans les valeurs un if(isset($_POST['title'])){echo $_POST['title'];}

Re: retour page précédente en gardant les données

par liuyelian » 30 mai 2013, 11:24

En effet la méthode la plus simple serait de placer la vérification du formulaire sur la même page que celui-ci.

Re: retour page précédente en gardant les données

par Paull87 » 29 mai 2013, 23:04

merci ! encore merci

Re: retour page précédente en gardant les données

par J-oxi » 29 mai 2013, 13:22

Dans la page france.php
// résultats ( correct )
    while($donnees = $resultat->fetch(PDO::FETCH_ASSOC)) {
        // je remplis un tableau et mettant l'id en index (que ce soit pour les régions ou les départements)
        $json[$donnees['id']][] = $donnees['nom'];
    }
Cette ligne :
$json[$donnees['id']][] = $donnees['nom'];
utf8_encode($donnees['nom']);
Il est de trop.

Re: retour page précédente en gardant les données

par Paull87 » 29 mai 2013, 12:52

C'est encore moi avec mes pb.
Tout fonctionne bien, à part un problème d'affichage avec les accents et les circonflexes.
j'ai essayé ça:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
et ça
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252" />
dans le head, ça ne change rien, que faire?

Re: retour page précédente en gardant les données

par Paull87 » 29 mai 2013, 12:42

Comme je n'ai pas crée de fichier jquery.js
j'avais juste oublié ça
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
et maintenant ça marche NICKEL
encore et encore merci ++++
maintenant je passe au tests type captcha.
si j'ai des problèmes, il vaut mieux que je crée un nouveau post
à suivre donc

Re: retour page précédente en gardant les données

par J-oxi » 29 mai 2013, 12:21

bon bon, J'ai tester à nouveau.
Tu as bien penser d'ajouter le fichier jquery.js pour ton fichier FormA.php?
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
$(document).ready(function() {
        var $regions = $('#regions');
        var $departements = $('#departements');
        
        <!-- Suite.... --> 
ou
<script src="jquery.js"></script>
<script>
$(document).ready(function() {
        var $regions = $('#regions');
        var $departements = $('#departements');
        
        <!-- Suite.... --> 
avec le fichier js à coté.
A récupéré -> http://jquery.com/

Page france.php, il manquait un simple quote pour le User, je suppose qu'il a disparu lors du remplacement des identifiants par les **
<?php
try {
  $Engine = 'mysql:host=localhost;dbname=tests';$User = 'tests';$Pass = 'tests';$Opt = array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8");
  $GenCo = new PDO($Engine,$User,$Pass,$Opt);
} catch ( Exception $e ) {
        echo  "Erreur de connexion mysql.";
  die();
}
 if(!isset($_GET['go'])) {
        $requete = "SELECT id, nom FROM regions ORDER BY nom";
    }
if(isset($_GET['go']) || isset($_GET['id_region'])) {
 
    $json = array();
     
    if(isset($_GET['go'])) {
        // requête qui récupère les régions
        $requete = "SELECT id, nom FROM regions ORDER BY nom";
    } else if(isset($_GET['id_region'])) {
        $id = htmlentities(intval($_GET['id_region']));
        // requête qui récupère les départements selon la région
        $requete = "SELECT id, nom FROM departements WHERE id_region = ". $id ." ORDER BY nom";
    }
}
    
    
    // exécution de la requête
    $resultat = $GenCo->query($requete) or die(print_r($GenCo->errorInfo()));
     
    // résultats
    while($donnees = $resultat->fetch(PDO::FETCH_ASSOC)) {
        // je remplis un tableau et mettant l'id en index (que ce soit pour les régions ou les départements)
        $json[$donnees['id']][] = utf8_encode($donnees['nom']);
    }
     
    // envoi du résultat au success
    echo json_encode($json);
?>

Re: retour page précédente en gardant les données

par Paull87 » 29 mai 2013, 11:22

bonjour, voçi mon code. les seules mofifications que j'ai fait par rapport au tien, ce sont les paramètres de connexion base on line chez mon hébergeur dans la page france.php
Pour la page formulaire FormA.php
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans titre</title>
<style>body {
        font-family:"Helvetica Neue",Helvetica,verdana,corbel;
        font-size: 13px;
        background-image: url('../images/bg.png');
        textshadow: 0 1px 0 rgba(255, 255, 255, 0.7),0 1px 2px rgba(255, 255, 255, 0.5);
        color: rgba(0, 0, 0, 0.75);
}
select {
        width: 200px;
        margin: 4px;
        box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.75);
}</style>
<script src="jquery.js"></script>
<script>
$(document).ready(function() {
        var $regions = $('#regions');
        var $departements = $('#departements');
        
        // chargement des régions
        $.ajax({
                url: 'france.php',
                data: 'go', // on envoie $_GET['go']
                dataType: 'json', // on veut un retour JSON
                success: function(json) {
                        $.each(json, function(index, value) { // pour chaque noeud JSON
                                // on ajoute l'option dans la liste
                                $regions.append('<option value="'+ index +'">'+ value +'</option>');
                        });
                }
        });

        // à la sélection d'une région dans la liste
        $regions.on('change', function() {
                var val = $(this).val(); // on récupère la valeur de la région

                if(val != '') {
                        $departements.empty(); // on vide la liste des départements
                        
                        $.ajax({
                                url: 'france.php',
                                data: 'id_region='+ val, // on envoie $_GET['id_region']
                                dataType: 'json',
                                success: function(json) {
                                        $.each(json, function(index, value) {
                                                $departements.append('<option value="'+ index +'">'+ value +'</option>');
                                        });
                                }
                        });
                }
        });
});
</script>
</head>

<body>
        <h2>Alimenter une liste de départements selon la région sélectionnée avec jQuery et MySQL</h2>
        
        <form>
                <select id="regions" name="regions">
                        <option value="">-- Régions --</option>
                </select>
                 
                <select id="departements" name="departements">
                        <option value="">-- Départements--</option>
                </select>
        </form>
        
</body>
</html>
et pour la page france.php
<?php
try {
  $Engine = 'mysql:host=**;dbname=**';$User = '**;$Pass = '**';$Opt = array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8");
  $GenCo = new PDO($Engine,$User,$Pass,$Opt);
} catch ( Exception $e ) {
        echo  "Erreur de connexion mysql.";
  die();
}
 if(!isset($_GET['go'])) {
        $requete = "SELECT id, nom FROM regions ORDER BY nom";
    }
if(isset($_GET['go']) || isset($_GET['id_region'])) {
 
    $json = array();
     
    if(isset($_GET['go'])) {
        // requête qui récupère les régions
        $requete = "SELECT id, nom FROM regions ORDER BY nom";
    } else if(isset($_GET['id_region'])) {
        $id = htmlentities(intval($_GET['id_region']));
        // requête qui récupère les départements selon la région
        $requete = "SELECT id, nom FROM departements WHERE id_region = ". $id ." ORDER BY nom";
    }
}
    
    
    // exécution de la requête
    $resultat = $GenCo->query($requete) or die(print_r($GenCo->errorInfo()));
     
    // résultats
    while($donnees = $resultat->fetch(PDO::FETCH_ASSOC)) {
        // je remplis un tableau et mettant l'id en index (que ce soit pour les régions ou les départements)
        $json[$donnees['id']][] = utf8_encode($donnees['nom']);
    }
     
    // envoi du résultat au success
    echo json_encode($json);
?>
je ne comprends pas ce qui ne va pas

Re: retour page précédente en gardant les données

par J-oxi » 28 mai 2013, 21:40

étrange, les sources que j'ai ajouté dans le message précèdent fonctionne chez moi.
Postes le code de tes pages complète je jetterai un oeil au matin.

Re: retour page précédente en gardant les données

par Paull87 » 28 mai 2013, 21:29

je n'y comprends rien, ça ne marche pas.
j'ai bien mis les codes de connexion dans france
rien, meme pas un message d'erreur et les menus restent vides

Re: retour page précédente en gardant les données

par J-oxi » 28 mai 2013, 17:14

La page france.php modifié :
<?php
try {
  $Engine = 'mysql:host=localhost;dbname=test';$User = 'root';$Pass = '';$Opt = array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8");
  $GenCo = new PDO($Engine,$User,$Pass,$Opt);
} catch ( Exception $e ) {
	echo  "Erreur de connexion mysql.";
  die();
}
 if(!isset($_GET['go'])) {
        $requete = "SELECT id, nom FROM regions ORDER BY nom";
    }
if(isset($_GET['go']) || isset($_GET['id_region'])) {
 
    $json = array();
     
    if(isset($_GET['go'])) {
        // requête qui récupère les régions
        $requete = "SELECT id, nom FROM regions ORDER BY nom";
    } else if(isset($_GET['id_region'])) {
        $id = htmlentities(intval($_GET['id_region']));
        // requête qui récupère les départements selon la région
        $requete = "SELECT id, nom FROM departements WHERE id_region = ". $id ." ORDER BY nom";
    }
}
    
    
    // exécution de la requête
    $resultat = $GenCo->query($requete) or die(print_r($GenCo->errorInfo()));
     
    // résultats
    while($donnees = $resultat->fetch(PDO::FETCH_ASSOC)) {
        // je remplis un tableau et mettant l'id en index (que ce soit pour les régions ou les départements)
        $json[$donnees['id']][] = utf8_encode($donnees['nom']);
    }
     
    // envoi du résultat au success
    echo json_encode($json);
?>
et la page des select :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans titre</title>
<style>body {
	font-family:"Helvetica Neue",Helvetica,verdana,corbel;
	font-size: 13px;
	background-image: url('../images/bg.png');
	textshadow: 0 1px 0 rgba(255, 255, 255, 0.7),0 1px 2px rgba(255, 255, 255, 0.5);
	color: rgba(0, 0, 0, 0.75);
}
select {
	width: 200px;
	margin: 4px;
	box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.75);
}</style>
<script src="jquery.js"></script>
<script>
$(document).ready(function() {
	var $regions = $('#regions');
	var $departements = $('#departements');
	
	// chargement des régions
	$.ajax({
		url: 'france.php',
		data: 'go', // on envoie $_GET['go']
		dataType: 'json', // on veut un retour JSON
		success: function(json) {
			$.each(json, function(index, value) { // pour chaque noeud JSON
				// on ajoute l'option dans la liste
				$regions.append('<option value="'+ index +'">'+ value +'</option>');
			});
		}
	});

	// à la sélection d'une région dans la liste
	$regions.on('change', function() {
		var val = $(this).val(); // on récupère la valeur de la région

		if(val != '') {
			$departements.empty(); // on vide la liste des départements
			
			$.ajax({
				url: 'france.php',
				data: 'id_region='+ val, // on envoie $_GET['id_region']
				dataType: 'json',
				success: function(json) {
					$.each(json, function(index, value) {
						$departements.append('<option value="'+ index +'">'+ value +'</option>');
					});
				}
			});
		}
	});
});
</script>
</head>

<body>
	<h2>Alimenter une liste de départements selon la région sélectionnée avec jQuery et MySQL</h2>
	
	<form>
		<select id="regions" name="regions">
			<option value="">-- Régions --</option>
		</select>
		 
		<select id="departements" name="departements">
			<option value="">-- Départements--</option>
		</select>
	</form>
	
</body>
</html>

Re: retour page précédente en gardant les données

par Paul87 » 28 mai 2013, 15:56

Merci mais je testerais plus tard.!!
suis coincé avec les menus déroulants région/départements.
j'ai suivi le tuto : http://chez-syl.fr/2012/02/jquery-rempl ... tre-liste/
mais ça ne fonctionne pas..!!!
j'ai bien créé le 2 tables règions et départements seulement je les ai mises dans une base qui s'appelle "dbo12121214" dans laquelle j'ai une autre table "datas" ça ne pose pas de problème?
j'ai bien créé le france.php avec les bons paramètres de connexion,
par contre comme je ne connais pas bien jQuery je ne sais pas si j'ai bien posotionné le code, je l'ai mis dans le <head></head> voir ci dessous
Qu'est-ce qui ne va pas..?
[javascript]
<script src="jquery.js"></script>
<script>
$(document).ready(function() {
var $regions = $('#regions');
var $departements = $('#departements');

// chargement des régions
$.ajax({
url: 'france.php',
data: 'go', // on envoie $_GET['go']
dataType: 'json', // on veut un retour JSON
success: function(json) {
$.each(json, function(index, value) { // pour chaque noeud JSON
// on ajoute l'option dans la liste
$regions.append('<option value="'+ index +'">'+ value +'</option>');
});
}
});

// à la sélection d'une région dans la liste
$regions.on('change', function() {
var val = $(this).val(); // on récupère la valeur de la région

if(val != '') {
$departements.empty(); // on vide la liste des départements

$.ajax({
url: 'france.php',
data: 'id_region='+ val, // on envoie $_GET['id_region']
dataType: 'json',
success: function(json) {
$.each(json, function(index, value) {
$departements.append('<option value="'+ index +'">'+ value +'</option>');
});
}
});
}
});
});
</script>
</head>

<body>

<h2>Alimenter une liste de départements selon la région sélectionnée avec jQuery et MySQL</h2>

<form>
<select id="regions" name="regions">
<option value="">-- Régions --</option>
</select>

<select id="departements" name="departements">
<option value="">-- Départements--</option>
</select>
</form>

</body>

</html>
[/javascript]

Re: retour page précédente en gardant les données

par J-oxi » 27 mai 2013, 23:02

tu peux ajouter un champ masqué dans ton formulaire
<input type="hiden" name="key" value="" />
Lors du traitement tu vérifie s'il est toujours vide. quelque chose du style :
if(!empty($Key){
$Valid = false; // fin du traitement.
}
ça évitera déjà quelques bot's.

Après pour ta question secrète tu peux faire comme l'exemple ci-dessous, même principe pour tes calculs.
<?php
# Liste des questions avec leurs différentes réponses possibles
$liste_questions = array(
    'question1' => array(
        'question' => "Quelle est la couleur du cheval blanc ?",
        'reponses' => array('blanc', 'blanche', 'neige', 'clair')
    ),
    'question2' => array(
        'question' => "Combien font deux + quatre ?",
        'reponses' => array('6', 'six')
    )
);
 
# Activation des sessions (pour que PHP charge la session de l'utilisateur, via le cookie PHPSESSID)
# à placer impérativement avant tout affichage, car cette fonction a besoin d'envoyer des headers HTTP
session_start();
 
# Sélection d'une question à poser au hasard
$id_question_posee = array_rand($liste_question);
 
# Mémorisation de la question posée à l'utilisateur dans la session
$_SESSION['captcha']['id_question_posee'] = $id_question_posee;
 
# Affichage du formulaire HTML
?>
<form action="" method="post">
    <h3>Captcha</h3>
    Question : <?php echo $liste_questions[$id_question_posee]['question']); ?>
    Réponse  : <input type="text" name="captcha_reponse" value="" />
 
    <input type="submit" value="Envoyer le formulaire" />
</form>
avec son traitement
<?php
# Liste des questions avec leurs différentes réponses possibles
$liste_questions = array(
    'question1' => array(
        'question' => "Quelle est la couleur du cheval blanc ?",
        'reponses' => array('blanc', 'blanche', 'neige', 'clair')
    ),
    'question2' => array(
        'question' => "Combien font deux + quatre ?",
        'reponses' => array('6', 'six')
    )
);
 
# Activation des sessions (pour que PHP charge la session de l'utilisateur, via le cookie PHPSESSID)
# à placer impérativement avant tout affichage, car cette fonction a besoin d'envoyer des headers HTTP
session_start();
 
# On récupère l'identifiant (clé) de la question posée dans la session
$id_question_posee = $_SESSION['captcha']['id_question_posee'];
 
# On récupère la réponse de l'utlisateur
$reponse_utilisateur = $_POST['captcha_reponse'];
 
# Vérification de la réponse : si la réponse de l'utilisateur n'est pas dans la liste des réponses exactes, on affiche un message d'erreur
if( !in_array($reponse_utilisateur, $liste_questions[$id_question_posee]['reponses']) ){
    echo "Vous avez répondu $reponse_utilisateur à la question captcha, ce n'est pas une bonne réponse. Traitement annulé";
    die();
}
?>

Re: retour page précédente en gardant les données

par Paul87 » 27 mai 2013, 22:00

Grand merci, ça marche nickel maintenant.
je passe aux listes déroulantes avec le tutoriel que tu n'as passé.
Merci !!
de plus je souhaiterais ajouter à mon formulaire non pas une captcha, mais plutôt un test style "combien font 7 + 13 =?"
ceci afin d'éviter les robots.
si tu avais une idée ou un lien vers un tutoriel?
encore merci

Re: retour page précédente en gardant les données

par J-oxi » 27 mai 2013, 00:02

Tu peux renvoyer sur une page confirmation.php avec
header('Location:confirmation.php');
Sur cette page, tu fais quelques chose du genre
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Confirmation</title>
<meta http-equiv="Refresh" content="20; URL=index.php">
</head>

<body>
<h1>Votre formulaire a bien été envoyé.</h1>
Vous serez redirigez dans 20 secondes... Sinon cliquez <a href="index.php">ici</a>
</body>
</html>