8791 sujets

Développement web côté serveur, CMS

Bonjour à tous,

Je débute en php et je souhaite coder un formulaire pour un dépôt d'annonce.

Le formulaire a une action vers un echo ($_SERVER['PHP_SELF']); et j'ai fait un isset dans la même page pour récupérer tous les $_POST dont j'ai besoin.

Sur la même page, j'ai créé un formulaire identique avec pour les input text : value="<?php echo $MaVariable?>" et pour les select : chaque option a son <?php echo(($MaVariable=="ValeurVariableDeL'option") ? " selected=\"selected\"" : null); ?>

Il y a des vérifications qui se font et si les données sont incorrectes, des messages d'erreur apparaissent en haut de la page.

Après le premier submit, si certaines valeurs sont incorrectes, j'ai bien mon formulaire qui contient les valeurs entrées.
Volontairement, je ne corrige pas les erreurs et je fais le second submit. Et la, les champs select ne contiennent plus les données.

Comment faire pour conserver les données à chaque submit, sachant que l'utilisateur peut faire plusieurs submit avant d'avoir correctement rempli le formulaire.

(Mon code fait 1000 ligne donc je ne l'ai pas posté. Si vous le souhaitez, je peux le faire).

Merci pour votre aide.

Wetete
Salut,
je ne sais pas si j'ai bien tous compris à ce que tu veux faire mais je pense que tu devrais enregistrer les informations dans $_SESSION (comme ça tu conserve les infos quelle que soit la page) ou alors tu peux passé par $_GET (faire passer les infos par l'url).

+++
Hello wetete,

un petit exemple dans ce post.


Edit : en relisant je me rends compte que ta question portait plutôt sur les éléments SELECT...
<?php
// fonctions d'affichage
function titreErreur($tab=1) {
	global $erreurs;
	if($erreurs) {
		echo str_repeat("\t", $tab).'<p class="mefiage"><strong>Le formulaire n\'a pas pu être validé. Veuillez corriger '.(count($erreurs) > 1 ? 'les erreurs signalées' : 'l\'erreur signalée').'.</strong></p>'."\n";
	}
}
function checkError($id) {
	global $erreurs;
	if(!empty($erreurs[$id])) echo ' class="erreur"';
}
function spanError($id, $tab=3) {
	global $erreurs;
	if(!empty($erreurs[$id])) echo str_repeat("\t", $tab).'<span>'.$erreurs[$id]."</span>\n";
}
function afficherTableau($array) {
	echo '<pre>';
	print_r($array);
	echo '</pre>';
}


// Liste des films
$films = array(
	'1'	=>	'Apocalypse Now',
	'2'	=>	'Avatar',
	'3'	=>	'Bienvenue chez les Ch\'tis',
	'4'	=>	'Forrest Gump',
	'5'	=>	'Autre...'
);

// Liste des chansons
$chansons = array(
	'Disco'		=>	array('I will survive (Gloria Gaynor)', 'Saturday night fever (The Bee Gees)', 'YMCA (Village People)'),
	'Varietes'	=>	array("C'est le week-end (Lorie)", 'Ouvrez la cage aux oiseaux (Pierre Perret)', 'Place des grands hommes (Patrick Bruel)', 'Tirelipimpon sur le chihuahua (Carlos)'),
	'Autre'		=>	array('Autre...')
);

// On remet le tableau chansons en 2 dimensions pour simplifier l'affichage et les tests
$chansons_2 = array();
foreach($chansons as $categorie=>$array) {
	foreach($array as $key=>$value) {
		$chansons_2[$categorie.'_'.$key] = $value;
	}
}
// Initialisation ou récupération des variables 
$film = !empty($_POST['film']) && array_key_exists($_POST['film'], $films) ? $_POST['film'] : '0';
$chanson = !empty($_POST['chanson']) && array_key_exists($_POST['chanson'], $chansons_2) ? $_POST['chanson'] : '0';

$erreurs = array();
$tout_est_ok = false;

if($_SERVER['REQUEST_METHOD']=='POST') {
	// film obligatoire
	if(empty($film)) {
		$erreurs['film'] = 'Champ requis';
	}
	// chanson obligatoire
	if(empty($chanson)) {
		$erreurs['chanson'] = 'Champ requis';
	}
	// Aucune erreur...
	if(empty($erreurs)) {
		$tout_est_ok = true;
	}
}

$title = "SELECT : exemple d'utilisation";
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><?php
echo $title;
if(!empty($erreurs)) echo ' - Erreur dans la saisie';
?></title>
<style type="text/css">
.erreur {
	color: #ad0627;
}
</style>

</head>
<body>
<div id="global">
<?php 
// Afficher les tableaux ?
afficherTableau($_POST);
//afficherTableau($films);
//afficherTableau($chansons);
//afficherTableau($chansons_2);
?>
<?php
if($tout_est_ok) :
?>
<div id="listing">
	<p>Les données on été correctement reçues et sont exploitables.</p>
	<p><strong>Film préféré :</strong> <?php echo $films[$film]; ?></p>
	<p><strong>Chanson préférée :</strong> <?php echo $chansons_2[$chanson]; ?></p>
</div>
<p class="liens"><a href="<?php echo $_SERVER['SCRIPT_NAME']; ?>">Réafficher le formulaire</a></p>
<?php else : ?>
<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="post" id="select">
	<h1><?php echo $title; ?></h1>
<?php titreErreur(); ?>
	<p class="advice">Tous les champs sont obligatoires.</p>
	<fieldset>
		<legend>Personnel</legend>
		<p<?php checkError('film') ?>>
			<label for="film">Quel est votre film préféré ?&nbsp;</label>
			<select name="film" id="film">
				<option value="0"<?php if(empty($film)) echo ' selected="selected"' ?>>&nbsp;</option>
<?php
	foreach($films as $value=>$libelle) {
		$selected = $film == $value ? ' selected="selected"' : '';
		echo "\t\t\t\t".'<option value="'.$value.'"'.$selected.'>'.$libelle."</option>\n";
	}
?>
			</select>
<?php spanError('film'); ?>            
		</p>
		<p<?php checkError('chanson') ?>>
			<label for="chanson">Quel est votre chanson préférée ?&nbsp;</label>
			<select name="chanson" id="chanson">
				<option value="0"<?php if(empty($chanson)) echo ' selected="selected"' ?>>&nbsp;</option>
<?php
	$categorie_en_cours = '';
	foreach($chansons_2 as $key=>$value) {
		$split = explode('_', $key);
		if($categorie_en_cours != $split[0]) {
			echo "\t\t\t\t".(empty($categorie_en_cours) ? '' : '</optgroup>'."\n\t\t\t\t").'<optgroup label="'.$split[0].'">'."\n";
			$categorie_en_cours = $split[0];
		}
		$selected = $chanson == $key ? ' selected="selected"' : '';
		echo "\t\t\t\t\t".'<option value="'.$key.'"'.$selected.'>'.$value."</option>\n";
	}
?>
				</optgroup>
			</select>
<?php spanError('chanson'); ?>
		</p>
	</fieldset>
	<p>
		<input type="submit" id="submit" value="Valider" />
	</p>
</form>
<?php endif; ?>
</div>
</body>
</html>

Modifié par Heyoan (02 Feb 2013 - 12:06)
En fait, je viens de me rendre compte que les variables que je perds sont affectées par un script javascript.

Au final, pas de souci avec les select, c'est javascript qui ne s'initialise plus une fois que j'ai fait le premier submit.

Savez-vous comment je peux y remédier?

Merci.

Wetete