vérification de champs

débutant
Invité n'ayant pas de compte PHPfrance

12 juin 2006, 16:27

Bonjour tout le monde, je fais un formulaire qui vérifie les champs qu'un utilisateur saisi pour voir s'ils sont vides ou pas. Je détecte bien l'erreur seulement, quand je renvoi vers la paage qui contiens le formulaire, tous les champs sont réinitialisés et j'aimerais éviter ceci. Comment faire?

Voici mon code :
	$nom=addslashes($_POST['nom_etudiant']);
	$prenom=addslashes($_POST['prenom_etudiant']);
	$adresse=addslashes($_POST['adresse_etudiant']);
	$email=addslashes($_POST['email_etudiant']);
	$intitule=addslashes($_POST['intitule']);
	$tel=$_POST['tel_etudiant'];
	$poste=addslashes($_POST['poste']);
	$demande=$_POST['demande'];
	$milieu_professionnel=$_POST['milieu_professionnel'];
	$_SESSION['demande']=$demande;
	
if ($poste == false)
{
echo "<p class=\"Texte\">Vous n'avez pas saisi le poste pour lequel vous postulez</p>";
}
elseif ($demande == 'stage')
{
$query = "INSERT INTO demandeVALUES ('','$nom, '$prenom, '$adresse, '$email, '$intitule', '$tel, '$poste', '', '')";

$result = mysql_query($query);

mysql_close($db);
}
elseif ($demande == false)
{
echo "<p class=\"Texte\">Vous n'avez pas spécifiez si votre annonce concerne un stage ou un emploi</p>"; 
}
else 
{
?>
Les champs obligatoires sont poste et demande

Mammouth du PHP | 1353 Messages

12 juin 2006, 16:34

Je vois 2 solutions :

Soit tu gère les erreurs en javascript au moment de la validation, ce qui évite le refresh donc la perte des données, soit comme ton formulaire rappelle la meme page tu récupère toutes les valeurs avec $_POST et tu remplis les champs, par exemple pour un input:
<input type="text" value="<?php if(isset($_POST["champ"])) echo $_POST["champ"];?>" name="champ">
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Invité
Invité n'ayant pas de compte PHPfrance

12 juin 2006, 16:43

mais mon formulaire n'est pas dans la meme page.
La page que j'ai mis dans mon premer post est la page vers laquelle le formulaire renvoie quand on clique sur le bouton valider. Ca change rien?

Mammouth du PHP | 1353 Messages

12 juin 2006, 16:45

si ca change tout. Cela signifie que tu dois récupérer toutes les valeurs dans ta page intermédiaire et les repasser à l'autre page.
Il serait peut etre plus facile de tout faire sur la meme page, quand la personne valide le formulaire la page se rafraichi et si elle detecte une valeur postée alors elle fait les vérifications.
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Invité
Invité n'ayant pas de compte PHPfrance

12 juin 2006, 16:48

en fait voila mes deux pages :

ma page depot.php :

<?php 
include("../../connexion.php");

$sql = "SELECT * FROM etudiant WHERE nom_etudiant='$_SESSION[nom]'"; 
$result = mysql_query($sql);
while ($row = mysql_fetch_array($result)) {
$adresse_etudiant = ($row['adresse_etudiant']);
$cp_etudiant = ($row['cp_etudiant']);
$ville_etudiant = ($row['ville_etudiant']);
$email_etudiant = ($row['email_etudiant']);
$tel_etudiant = ($row['tel_etudiant']);} ?>

		<form action="upload.php" method="post">
		<p class="Texte">
		Nom* : <br> <input name="nom_etudiant" type="text" size="20" value="<? echo $_SESSION['nom'] ?>" readonly><br><br>
		Prénom* : <br> <input name="prenom_etudiant" type="text" size="20" value="<? echo $_SESSION['prenom'] ?>" readonly><br><br>
		Adresse* : <br> <textarea name="adresse_etudiant" cols="30" rows="5" readonly><? echo $adresse_etudiant."\n".$cp_etudiant." ".$ville_etudiant; ?></textarea><br><br>
		Email* : <br> <input name="email_etudiant" type="text" size="20" value="<? echo $email_etudiant; ?>" readonly><br><br>
		Tél* : <br> <input name="tel_etudiant" type="text" size="20" value="<? echo $tel_etudiant; ?>" readonly><br><br>
		Poste recherché* : <br> <input name="poste" type="text" size="30" value="<?php if(isset($_POST["poste"])) echo $_POST["poste"];?>"><br>
		Dans quel milieu professionnel : <select name="milieu_professionnel">
			<option>Automobile</option>
			<option>Electricité</option>
			<option>Energétique</option>
			<option>Etude et définition de produits industriels</option>
			<option>Structure métallique</option>
			<option>Prothèse dentaire</option>
		</select><br><br>
		Votre demande concerne une demande <br>de stage <input name="demande" type="radio" value="stage"> d'emploi<input name="demande" type="radio" value="emploi"><br><br>
		Lettre de motivation* : <br> <textarea name="intitule" cols="60" rows="40">Ici votre lettre de motivation...</textarea>
		</p>
		<p class="Texte2">Vous pouvez, si vous le souhaitez, mettre votre cv en ligne : <br>
		    <br>Votre fichier doit etre au format .pdf <br><input type="file" name="file" size="50"><br></p>
		<center><input name="submit" type="submit" value="Enregistrer"><input name="reset" type="reset" value="Effacer"></center>
		</form><br>
		<center>
		<form action="../index.php" method="post">
		<input type="submit" value="Retour à l'espace étudiant">
		</form>
la page uploader.php (là ou les champs sont vérifiés et les actions vers la BDD effectuées) :
<?php
/*********************************************************************/
/*				  Ajout des informations dans la base			     */
/*********************************************************************/

include("../../connexion.php");


	$nom_etudiant=addslashes($_POST['nom_etudiant']);
	$prenom_etudiant=addslashes($_POST['prenom_etudiant']);
	$adresse_etudiant=addslashes($_POST['adresse_etudiant']);
	$email_etudiant=addslashes($_POST['email_etudiant']);
	$intitule=addslashes($_POST['intitule']);
	$tel_etudiant=$_POST['tel_etudiant'];
	$poste=addslashes($_POST['poste']);
	$demande=$_POST['demande'];
	$milieu_professionnel=$_POST['milieu_professionnel'];
	$_SESSION['demande']=$demande;
	
if ($poste == false)
{
echo "<p class=\"Texte\">Vous n'avez pas saisi le poste pour lequel vous postulez</p>";
}
elseif ($demande == 'stage')
{
$query = "INSERT INTO demande_stage VALUES ('','$nom_etudiant', '$prenom_etudiant', '$adresse_etudiant', '$email_etudiant', '$intitule', '$tel_etudiant', '$poste', '$milieu_professionnel', '')";

$result = mysql_query($query);

mysql_close($db);
}
elseif ($demande == 'emploi')
{
$query = "INSERT INTO demande_emploi VALUES ('','$nom_etudiant', '$prenom_etudiant', '$adresse_etudiant', '$email_etudiant', '$intitule', '$tel_etudiant', '$poste', '$milieu_professionnel', '')";

$result = mysql_query($query);

//mysql_query("INSERT INTO cv VALUES ('','','','','','1')");

mysql_close($db);
echo "<p class=\"Texte\"><br><br>Votre demande a bien été enregistrée.<br><br>";
}
elseif ($demande == false)
{
echo "<p class=\"Texte\">Vous n'avez pas spécifiez si votre annonce concerne un stage ou un emploi</p>"; 
}
else 
{
?>
<?php
include("../../connexion.php");

// ############################################################ //
//   Script pour Upload de fichier quelconque sur un serveur	//
// ############################################################ //

// Fonctionnement :												//
// ----------------												//
// 1. Test si l'utilisateur a choisi un fichier					//
// 2. Test si le fichier choisi est valide (si taille <> 0)		//
// 3. Test si le taille du fichier est inférieure à la taille	//
//    max														//
// 4. Test si l'extension est autorisée.						//
// ############################################################ //
// Paramètrage :												//
// -------------												//
// Ce script peut facilement être paramètré selon les besoins.	//
// Le paramètrage se fait principalement par la définition des	//
// variables globales. Voici les différentes variables :		//
//																//
//  - $DESTINATION_FOLDER : contient le répertoire dans lequel	//
//    le fichier sera uploadé. Il est par défaut récupéré du	//
//    formulaire, mais peut très bien être remplacé par un url	//
//    en dur.													//
//																//
//  - $MAX_SIZE : spécifie la taille maximale que le fichier à	//
//    uploader peut avoir. Attention, le taille est spécifiée	//
//    en octets.												//
//																//
//  - $RETURN_LINK : Récupère automatiquement l'url de la page	//
//    web qui appelle ce script. Ce lien sert à créer des liens	//
//    de retour, qui sont toujours utiles.						//
//																//
//  - $AUTH_EXT : Ce tableau contient toutes les extensions qui	//
//    peuvent être uploadées. On peut en rajouter ou en			//
//    supprimer si besoin est.									//
// ############################################################ //

// ############################################################ //
// Définition des variable globales, modifiables à volonté		//
// ############################################################ //

// Récupération du dossier dans lequel le fichier sera uploadé	//
$DESTINATION_FOLDER = "./cv/"		;							//
// Taille maximale de fichier, valeur en bytes					//

$MAX_SIZE = 5000000;											//
// Récupération de l'url de retour								//

//$RETURN_LINK = $_SERVER['HTTP_REFERER'];						//

// Définition des extensions de fichier autorisées (avec le ".")//
$AUTH_EXT = array(".pdf");											//


// Fonction permettant de créer un lien de retour automatique

function createReturnLink(){
	//global $RETURN_LINK;
	echo "<p class=\"Texte2\"><a href=\"../index.php\">Retour à l'espace etudiant</a><br></p>";
}

// Fonction permettant de vérifier si l'extension du fichier est
// autorisée.

function isExtAuthorized($ext){
	global $AUTH_EXT;
	if(in_array($ext, $AUTH_EXT)){
		return true;
	}else{
		return false;
	}
}

// On vérifie que le champs contenant le chemin du fichier soit
// bien rempli.

if(!empty($_FILES["file"]["name"])){
	
	// Nom du fichier choisi:
	$nomFichier = $_FILES["file"]["name"] ;
	// Nom temporaire sur le serveur:
	$nomTemporaire = $_FILES["file"]["tmp_name"] ;
	// Type du fichier choisi:
	$typeFichier = $_FILES["file"]["type"] ;
	// Poids en octets du fichier choisit:
	$poidsFichier = $_FILES["file"]["size"] ;
	// Code de l'erreur si jamais il y en a une:
	$codeErreur = $_FILES["file"]["error"] ;
	// Extension du fichier
	$extension = strrchr($nomFichier, ".");
	
	// Si le poids du fichier est de 0 bytes, le fichier est
	// invalide (ou le chemin incorrect) => message d'erreur
	// sinon, le script continue.
	if($poidsFichier <> 0){
		// Si la taille du fichier est supérieure à la taille
		// maximum spécifiée => message d'erreur
		if($poidsFichier < $MAX_SIZE){
			// On teste ensuite si le fichier a une extension autorisée
			if(isExtAuthorized($extension)){
				// Ensuite, on copie le fichier uploadé ou bon nous semble.
				$uploadOk = move_uploaded_file($nomTemporaire, $DESTINATION_FOLDER.$nomFichier);
				if($uploadOk and $_SESSION['demande']=='stage'){
					$query = "INSERT INTO cv VALUES ('','$nomFichier','$_SESSION[nom]','$_SESSION[prenom]','1','')";
					$result = mysql_query($query);
					mysql_close($db);
					echo("<p class=\"Texte\">L'upload a réussi !<br><br></p>");
					echo(createReturnLink());
				}
				elseif($uploadOk and $_SESSION['demande']=='emploi'){
					$query = "INSERT INTO cv VALUES ('','$nomFichier','$_SESSION[nom]','$_SESSION[prenom]','','1')";
					$result = mysql_query($query);
					mysql_close($db);
					echo("<p class=\"Texte\">Le téléchargement a réussi !<br><br></p>");
					echo(createReturnLink());
				}				
				else{
					echo("<p class=\"Texte\">Le téléchargement a échoué !<br><br></p>");
					echo(createReturnLink());
				}
			}else{
				echo ("<p class=\"Texte\">Les fichiers avec l'extension $extension ne peuvent pas être uploadés !<br></p>");
				echo (createReturnLink()."<br>");
			}
		}else{
			$tailleKo = $MAX_SIZE / 1000;
			echo("<p class=\"Texte\">Vous ne pouvez pas télécharger de fichiers dont la taille est supérieure à : $tailleKo Ko.<br></p>");
			echo (createReturnLink()."<br>");
		}		
	}else{
		echo("<p class=\"Texte\">Le fichier choisi est invalide !<br></p>");
		echo (createReturnLink()."<br>");
	}
}else{
	echo("<p class=\"Texte\">Vous n'avez pas choisi de télécharger de fichier !<br></p>");
	echo (createReturnLink()."<br>");
}
}?>
Comment faire pour réunir les deux?

Désolé de mettre un post aussi long, mais c'est peut etre plus clair

Mammouth du PHP | 1353 Messages

12 juin 2006, 16:50

Avant de tenter ça est ce que tu as considéré l option du javascript ou non ?

Car soit tu ne peux/veux pas auquel cas il faudra trouver autre chose, mais sinon ca te fait 2 lignes a rajouter et ca empeche par exemple l utilisateur de valider tant que tel ou tel champ est vide...
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Invité
Invité n'ayant pas de compte PHPfrance

12 juin 2006, 16:52

ca me dérange pas de faire du javascript, mais je ne connais absolument aucune ligne de commande...

Mammouth du PHP | 1353 Messages

12 juin 2006, 17:07

Alors procédons par étape...

La premiere chose a faire est peut etre un tour sur ce site

Il va falloir donner un nom à ton formulaire quand tu le déclares :
<form name="nom" method="post">

Ensuite sur il va falloir associer au bouton submit une fonction de verification en javascript qui avant de valider et de passer sur l autre page vérifie la valeur de poste de de demande.

<input name="submit" type="submit" value="Enregistrer" onclick="verif()">

Enfin il faut créer la fonction de vérification entre les balises <head> et </head> de ta page, qui en gros sera :

Code : Tout sélectionner

<script language="javascript"> function verif() { if(document.forms["nom"].demande.value==""||document.forms["nom"].poste.value=="") { //alors un des deux éléments est vide, on affiche un message alert("merci de compléter le formulaire avant de valider"); } else { //dans le cas contraire window.location="upload.php" } } </script>
Bon je suis pas très bon en javascript donc y a peu etre quelques erreurs mais l idée est la :)

tu dois trouver pas mal de tutos sur le net pour faire ca sinon :)
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Invité
Invité n'ayant pas de compte PHPfrance

12 juin 2006, 17:18

come ca c'est bon aussi ?

Code : Tout sélectionner

<script language="JavaScript1.2"> function couleur(obj) { obj.style.backgroundColor = "grey"; } function check() { var msg = ""; //ici nous vérifions si le champs poste est vide, changeons la couleur du champs et définissons un message d'alerte if (document.depot.poste.value == "") { msg += "Veuillez saisir le poste pour lequel vous postulez\n"; document.depot.poste.style.backgroundColor = "#F3C200"; } //Si aucun message d'alerte a été initialisé on retourne TRUE if (msg == "") return(true); //Si un message d'alerte a été initialisé on lance l'alerte else { alert(msg); return(false); } } </script>

Mammouth du PHP | 1353 Messages

13 juin 2006, 09:10

come ca c'est bon aussi ?
C'est à toi de me dire si ca marche ou pas ;)

A priori ca m a l air correct.
Tu as des messages d erreurs ? Ca ne fonctionne pas correctement ?
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Invité
Invité n'ayant pas de compte PHPfrance

13 juin 2006, 09:15

si comme ca ca marche, seulement je n'ai pas réussi avec uns cript à vérifier que des boutons radios étaient bien cochés alors du coup j'en ai séléectionné un par défaut. Pas bien grave