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

Eléphant du PHP | 56 Messages

26 mai 2013, 16:10

Quelques pistes pour le traitement des données dans le code.
Mets tes balises html en minuscules,
et pour les régions, regarde de ce coté la : http://chez-syl.fr/2012/02/jquery-rempl ... tre-liste/
<?php
if(isset($_POST['Deposit_form']) && !empty($_POST['Deposit_form'])){
extract($_POST);
$Valid = true;
// Traitement
if($Type != "P" && $Type != "R"){
	// On vérifie si le type est recherche ou proposition
	$Valid = false;
	$Notification = array('Class'=>'Error','Content'=>'Vous devez choisir le type de recherche.');
}
if(empty($Category)){
	// On vérifie si la catégorie a été choisie.
	$Valid = false;
	$Notification = array('Class'=>'Error','Content'=>'Vous devez choisir la catégorie.');
}
/* Verification régions */
// http://chez-syl.fr/2012/02/jquery-remplir-une-liste-deroulante-selon-une-autre-liste/
if(strlen($PostalCode) > 5){
	// vérification du nombre de characteres.
	$Valid = false;
	$Notification = array('Class'=>'Error','Content'=>'Le code postal est trop long.');
}
if(!is_numeric($tel)){
	$Valid = false;
	$Notification = array('Class'=>'Error','Content'=>'Le telephone est invalide.');
}
if($Valid){
// Connexion db;
// Insertion db;
$Notification = array('Class'=>'Success','Content'=>'Formulaire correct.');

}// end valid

} // end post



?><!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>Formulaire de Dépôt</title>
<link rel="stylesheet" href="css/style.css" type="text/css" media="screen" />
<style>
.spacer-15{height : 15px;}
.spacer-20{height : 20px;}
.spacer-25{height : 25px;}
.title{font-weight:bold;font-size:24px;}
.b{ font-weight:bold;}
.Selectbg{background-color:#dcdcc3;}
.Error{background-color:#966;color:#900;}
.Success{background-color:#9F9;color:#090;}
</style>
<script language="JavaScript"> 
<!-- script select regions -->
</script>
</head>

<body>
<div class="spacer-15"></div>
	<?php if(isset($Notification)){ ?>
    <div class="<?php echo $Notification['Class'];?>"><?php echo $Notification['Content'];?></div>
	<div class="spacer-15"></div>
	<?php } ?>
<form name="Deposit_form" action="formulaire.php" method="post">
	<table  border="5" align="center" cellpadding="1" cellspacing="4" class="table_n">
    	<tr> 
  			<td align="center" bgcolor="#009900"><div><span class="title">Déposez votre annonce...</span>
            <span class="b">Vous proposez, vous recherchez ?*</span>
            <select name="Type" class="eingabe">
            <option value="" class="Selectbg" disabled="disabled" selected="selected">Sélectionnez</option>
            <option value="P" <?php if(isset($Type)&&$Type == "P") echo 'selected="selected"';?>>je propose</option>
            <option value="R" <?php if(isset($Type)&&$Type == "R") echo 'selected="selected"';?>>je recherche</option>
            </select></div>
  			</td >
		</tr>  
	</table>
<div class="spacer-25"></div>
	<table align="center">   
		<tr> 
			<td align="center">   
            <span class="b">Quelle catégorie*</span>
            <select name="Category" class="cat">
            <option value="" class="Selectbg" disabled="disabled"<?php if(!isset($Category)) echo 'selected="selected"';?>>Choix de la catégorie</option>
            <option value="Cardio" <?php if(isset($Category)&&$Category == "Cardio") echo 'selected="selected"';?>>Cardiologie</option>
            <option value="Pneumo" <?php if(isset($Category)&&$Category == "Pneumo") echo 'selected="selected"';?>>Pneumologie</option>
            <option value="Derma" <?php if(isset($Category)&&$Category == "Derma") echo 'selected="selected"';?>>Dermatologie</option>
            <option value="Hema" <?php if(isset($Category)&&$Category == "Hema") echo 'selected="selected"';?>>Hématologie</option>
            </select>
			</td>
		</tr>
	</table>
<div class="spacer-25"></div>
    <table align="center">
        <tr>
			<td align="center">
            <span class="b">Région*</span>
            <select id="regions" name="regions" >
            <option value="" class="Selectbg">-- Régions --</option>
            <option value="Alsace">Alsace</option>
            <option value="Aquitaine">Aquitaine</option>
            <option value="Bourgogne">Bourgogne</option>
            <option value="Bretagne">Bretagne</option>
            <option value="Centre">Centre</option>
            <option value="Champagne Ardenne">Champagne Ardenne</option>
            </select>
            <span class="b">Département*</span>
            <select id="departements" name="departements">
            <option value="">-- Départements--</option>
            </select>
			<span class="b">Code Postal</span> <em>(facultatif)</em> <input type="text" name="PostalCode" size="7" placeholder="ex : 75000" value="<?php if(isset($PostalCode)) echo $PostalCode;?>" />
			</td>
		</tr>
	</table>
<div class="spacer-25"></div>
	<table border="2" align="center" cellpadding="3" cellspacing="3">
    	<tr>
            <td align="center"><span class="b">Titre de l'article*</span></td>
            <td><input type="text" name="Article_title" size="65" value="<?php if(isset($Article_title)) echo $Article_title;?>" required="required" /></td>
		</tr>
        <tr> 
    		<td align="center"><span class="b">Descriptif de l'article*</span></td>
			<td><textarea name="Detail" rows="5" cols="50" required="required"><?php if(isset($Detail)) echo $Detail;?></textarea></td>
		</tr> 
	</table>
<div class="spacer-25"></div>
<table border="2"align="center">
    <tr>
    	<td align="center" style="border-right:none;" rowspan="2"><span class="b">Vous êtes*:</span></td>
    	<td style="border-left:none;"><input type="radio" name="Statut" value="Pro" <?php if(isset($Statut)&&$Statut == "Pro") echo 'selected="selected"';?> />un professionnel<br />
			<input type="radio" name="Statut" value="Part" <?php if(isset($Statut)&&$Statut == "Part") echo 'selected="selected"';?> /> un particulier</td>
    </tr>
</table>
<div class="spacer-25"></div>
<table border="2" align="center" cellpadding="4" cellspacing="3">
	<tr>
		<td><span class="b">Nom*</span> <em>(ou pseudo)</em> <input type="text" name="pseudo" size="15" required="required" value="<?php if(isset($pseudo)) echo $pseudo;?>" />
   			<span class="b">Email*</span>
			<input type="email" name="mail"size="35" required="required" value="<?php if(isset($mail)) echo $mail;?>"/>
			<span class="b">Tel</span> <em>(facultatif, visible si entré )</em>
			<input type="tel" name="tel" size="11" value="<?php if(isset($tel)) echo $tel;?>"/>
		</td>
	</tr>
</table>
<div class="spacer-25"></div>
<table border="5" align="center" cellpadding="1" cellspacing="4">
	<tr>
		<td align="center" bgcolor="#009900"><input type="submit" name="Deposit_form" value="Envoyer">
    	<input type="reset" name="reset" value="Effacer" /></td>
	</tr>
</table>
</form>
</body>
</html>

Paul87
Invité n'ayant pas de compte PHPfrance

26 mai 2013, 21:58

Merci pour tes conseils ++
j'ai testé, mais les tests non remplis pour les obliagtoires ne marchent pas.
je testerai le tutoriel pour les régions départements par la suite, quand le reste marchera
j'ai changé le nom du form, j'ai remis partout "FormA"
mais je ne sais pas pourquoi ça ne marche pas!!
encore merci
<?php
if(isset($_POST['FormA']) && !empty($_POST['FormA'])){
extract($_POST);
$Valid = true;
// Traitement
if($Type != "P" && $Type != "R"){
        // On vérifie si le type est recherche ou proposition
        $Valid = false;
        $Notification = array('Class'=>'Error','Content'=>'Vous devez choisir le type de recherche.');
}
if(empty($Category)){
        // On vérifie si la catégorie a été choisie.
        $Valid = false;
        $Notification = array('Class'=>'Error','Content'=>'Vous devez choisir la catégorie.');
}
/* Verification régions */
// http://chez-syl.fr/2012/02/jquery-rempl ... tre-liste/
if(strlen($PostalCode) > 5){
        // vérification du nombre de characteres.
        $Valid = false;
        $Notification = array('Class'=>'Error','Content'=>'Le code postal est trop long.');
}
if(!is_numeric($tel)){
        $Valid = false;
        $Notification = array('Class'=>'Error','Content'=>'Le telephone est invalide.');
}
if($Valid){
// Connexion db;
// Insertion db;
$Notification = array('Class'=>'Success','Content'=>'Formulaire correct.');

}// end valid

} // end post



?><!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>Formulaire de Dépôt</title>
<link rel="stylesheet" href="css/style.css" type="text/css" media="screen" />
<style>
.spacer-15{height : 15px;}
.spacer-20{height : 20px;}
.spacer-25{height : 25px;}
.title{font-weight:bold;font-size:24px;}
.b{ font-weight:bold;}
.Selectbg{background-color:#dcdcc3;}
.Error{background-color:#966;color:#900;}
.Success{background-color:#9F9;color:#090;}
</style>
<script language="JavaScript"> 
<!--
function Choix(form) {
i = form.reg.selectedIndex;
if (i == 0) {
  for (i=0;i<4;i++) {
    form.dep.options[i].text="";
    }
  return;
  }
form.dep.selectedIndex = 0;
switch (i) {
case 1 : var txt = new Array ('','Bas-Rhin','Haut-Rhin'); break;
case 2 : var txt = new Array ('Dordogne','Gironde','Landes','Lot-et-Garonne','Pyrénées-Atlantiques'); break;
case 3 : var txt = new Array ('Allier','Cantal','Haute-Loire','Puy-de-Dôme'); break;
}
form.dep.options[0].text="Département";
for (i=0;i<4;i++) {
  form.dep.options[i+1].text=txt[i];
  }
} 
// -->
</script>
</head>

<body>
<div class="spacer-15"></div>
        <?php if(isset($Notification)){ ?>
    <div class="<?php echo $Notification['Class'];?>"><?php echo $Notification['Content'];?></div>
        <div class="spacer-15"></div>
        <?php } ?>
<form name="FormA" action="formulaire.php" method="post">
        <table  border="5" align="center" cellpadding="1" cellspacing="4" class="table_n">
        <tr> 
                        <td align="center" bgcolor="#009900"><div><span class="title">Déposez votre annonce...</span>
            <span class="b">Vous proposez, vous recherchez ?*</span>
            <select name="Type" class="eingabe">
            <option value="" class="Selectbg" disabled="disabled" selected="selected">Sélectionnez</option>
            <option value="P" <?php if(isset($Type)&&$Type == "P") echo 'selected="selected"';?>>je propose</option>
            <option value="R" <?php if(isset($Type)&&$Type == "R") echo 'selected="selected"';?>>je recherche</option>
            </select></div>
                        </td >
                </tr>  
        </table>
<div class="spacer-25"></div>
        <table align="center">   
                <tr> 
                        <td align="center">   
            <span class="b">Quelle catégorie*</span>
            <select name="Category" class="cat">
            <option value="" class="Selectbg" disabled="disabled"<?php if(!isset($Category)) echo 'selected="selected"';?>>Choix de la catégorie</option>
            <option value="Cardio" <?php if(isset($Category)&&$Category == "Cardio") echo 'selected="selected"';?>>Cardiologie</option>
            <option value="Pneumo" <?php if(isset($Category)&&$Category == "Pneumo") echo 'selected="selected"';?>>Pneumologie</option>
            <option value="Derma" <?php if(isset($Category)&&$Category == "Derma") echo 'selected="selected"';?>>Dermatologie</option>
            <option value="Hema" <?php if(isset($Category)&&$Category == "Hema") echo 'selected="selected"';?>>Hématologie</option>
            </select>
                        </td>
                </tr>
        </table>
<div class="spacer-25"></div>
    <table align="center">
        <tr>
				  <td align="center">
				          <strong>Région*</strong>
			   			  <SELECT NAME="reg" onChange='Choix(this.form)'>
							<option value="">Choisissez</option>
							<option value="Alsace" <?php if(isset($_POST['reg']) && $_POST['reg'] == 'Alsace') echo 'selected';?>>Alsace</option>
							<option value="Aquitaine" <?php if(isset($_POST['reg']) && $_POST['reg'] == 'Aquitaine') echo 'selected';?>>Aquitaine</option>

							</select>

				   
				  
				  	<align="center">
			   			  <strong>Département*</strong>
                          <SELECT NAME="dep">
							<option value="">Choisissez</option>
							<OPTION></OPTION>
							<OPTION></OPTION>
							<OPTION></OPTION>
							<OPTION></OPTION>
							<OPTION></OPTION>
							</SELECT>
                        <span class="b">Code Postal</span> <em>(facultatif)</em> <input type="text" name="PostalCode" size="7" placeholder="ex : 75000" value="<?php if(isset($PostalCode)) echo $PostalCode;?>" />
                        </td>
                </tr>
        </table>
<div class="spacer-25"></div>
        <table border="2" align="center" cellpadding="3" cellspacing="3">
        <tr>
            <td align="center"><span class="b">Titre de l'article*</span></td>
            <td><input type="text" name="Article_title" size="65" value="<?php if(isset($Article_title)) echo $Article_title;?>" required="required" /></td>
                </tr>
        <tr> 
                <td align="center"><span class="b">Descriptif de l'article*</span></td>
                        <td><textarea name="Detail" rows="5" cols="50" required="required"><?php if(isset($Detail)) echo $Detail;?></textarea></td>
                </tr> 
        </table>
<div class="spacer-25"></div>
<table border="2"align="center">
    <tr>
        <td align="center" style="border-right:none;" rowspan="2"><span class="b">Vous êtes*:</span></td>
        <td style="border-left:none;"><input type="radio" name="Statut" value="Pro" <?php if(isset($Statut)&&$Statut == "Pro") echo 'selected="selected"';?> />un professionnel<br />
                        <input type="radio" name="Statut" value="Part" <?php if(isset($Statut)&&$Statut == "Part") echo 'selected="selected"';?> /> un particulier</td>
    </tr>
</table>
<div class="spacer-25"></div>
<table border="2" align="center" cellpadding="4" cellspacing="3">
        <tr>
                <td><span class="b">Nom*</span> <em>(ou pseudo)</em> <input type="text" name="pseudo" size="15" required="required" value="<?php if(isset($pseudo)) echo $pseudo;?>" />
                        <span class="b">Email*</span>
                        <input type="email" name="mail"size="35" required="required" value="<?php if(isset($mail)) echo $mail;?>"/>
                        <span class="b">Tel</span> <em>(facultatif, visible si entré )</em>
                        <input type="tel" name="tel" size="11" value="<?php if(isset($tel)) echo $tel;?>"/>
                </td>
        </tr>
</table>
<div class="spacer-25"></div>
<table border="5" align="center" cellpadding="1" cellspacing="4">
        <tr>
                <td align="center" bgcolor="#009900"><input type="submit" name="FormA" value="Envoyer">
        <input type="reset" name="reset" value="Effacer" /></td>
        </tr>
</table>
</form>
</body>
</html>

Eléphant du PHP | 56 Messages

26 mai 2013, 22:10

<form name="FormA" action="formulaire.php" method="post">
Pour action, il s'agit du nom de la page ou seront traiter les infos. en l'occurence la même page que ta form. elle se nomme Formulaire.php chez toi?

Paul87
Invité n'ayant pas de compte PHPfrance

26 mai 2013, 22:32

et bien, comme j'ai choisi que tout soit sur le meme formulaire, je n'ai maintenant qu'un seul formulaire qui s'appelle 'FormA.php"
et si submit est ok sans champs obligatoires vides, affichage ok demande enregistrée et retour sur ma page index.php

Eléphant du PHP | 56 Messages

26 mai 2013, 23:33

Donc tu as bien cela pour le début de ton formulaire?
<form name="FormA" action="FormA.php" method="post">
et non pas:
<form name="FormA" action="formulaire.php" method="post">
comme il y'a sur le dernier code que tu as montrer?

Paul87
Invité n'ayant pas de compte PHPfrance

26 mai 2013, 23:41

j'ai ça maintenant et ça marche !! les tests ..ok
<form name="FormA" action="FormA" method="post">
par contre comment faire pour à la fin du code connexion/ajout pour avoir un message de confirmation et retour sur index.php
encore merci..on touche au but !!

Eléphant du PHP | 56 Messages

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>

Paul87
Invité n'ayant pas de compte PHPfrance

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

Eléphant du PHP | 56 Messages

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();
}
?>

Paul87
Invité n'ayant pas de compte PHPfrance

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]

Eléphant du PHP | 56 Messages

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>

Paull87
Invité n'ayant pas de compte PHPfrance

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

Eléphant du PHP | 56 Messages

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.

Paull87
Invité n'ayant pas de compte PHPfrance

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

Eléphant du PHP | 56 Messages

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);
?>