[php]Probleme affichage formulaire et tests [Résolu/Fermé]

Signaler
-
Messages postés
5374
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
-
Bonjour,

J'ai un leger soucis avec mon formulaire en php, en effet la première occurrence ne s'affiche pas, j'ai essayé plusieurs codes différents mais rien n'y fait, j'aimerais bien comprendre ce qu'il se passe.
Voici mon code et donc le champ prévu pour le jour ne s'affiche pas.

echo '
<form method="post" action="recapitulatif.php" enctype="multipart/form-data>
Date de naissance : <input type="text" name="jour" size="2"
maxlength="2" value="JJ"/> / <input type="text" name="mois" size="2"
maxlength="2" value="MM"/> / <input type="text" name="annee" size="4"
maxlength="4" value="AAAA"/></p>';
echo'<br />
<p>Nom: <input type="text" name="num_anccarte" size="16" maxlength="16"
value=""/></p>';

echo'<br />
<p>Code postal: <input type="text" name="num_compte" size="5" maxlength="5"
onSubmit=testNumCompte(this.value) value=""/></p>
</form>';

Si vous pouviez m'aider à résoudre ce soucis, par ailleurs dans mon formulaire j'ai plusieurs valeur à tester sur leur longueur, mon script de test est prêt mais je ne sais pas trop comment faire et quoi utiliser pour que les tests soient effectués lorsque j'appuies sur valider et que l'envoi ne se fasse qui si les tests sont valides (car le onSubmit que j'ai ici ne doit pas se placer là je suppose et si je le met dans le formulaire d'envoi je ne pourrais pas prendre la longueur spécifique des champs à tester).

Merci pour l'aide!

9 réponses

Messages postés
5374
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
873
lorsque j'appuies sur valider et que l'envoi ne se fasse qui si les tests sont valides

<html>
<head>
<script type="text/javascript">
function testNumCompte(){
	var obj=documentGetElementById('num_compte'); //on attenit l'objet par son id
	//verification
	if(obj.value la tu fais ton test ) {
		//si pas ok
		alert('Saisie CP incorrecte');
		return false; //ainsi le formulaire ne sera pas envoyé
	}
//tu en mets autant que tu veux pour chaque champ à tester
//en partant du principe que le return fait quitter la fonction
return true; // sipas d'anomalie le formulaire sera posté
}
</script>
</head>
<body>
<form method="post" action="recapitulatif.php" onSubmit="return testNumCompte();" >
<!-- au moment de la soumission du formulaire par le bouton submit on attend le return de la fonction
si false ça part pas, si true ça part -->
Date de naissance : 
	<input type="text" name="jour" id="jour" size="2" maxlength="2" value="JJ"/> /
	<input type="text" name="mois" id="mois"size="2" maxlength="2" value="MM"/> /
	<input type="text" name="annee" id="annee" size="4" maxlength="4" value="AAAA"/></p>';
<br />
<p>
Nom: 
<input type="text" name="num_anccarte" size="16" maxlength="16" value=""/>
</p>';

<br />
<p>
Code postal:
 <input type="text" name="num_compte" id="num_compte" size="5" maxlength="5"  value=""/></p>
 <input type="submit" name="envoyer" value="Envoyer" />
</form>
</body>
</html>
D'accord je te remercie donc je vais pouvoir récupérer ainsi les valeur pour chaque champ que je veux tester, parfait!

Sinon je me posais une petit question, en fait comme le javascript est exécute coté client, il est donc possible de le désactiver et ainsi d'envoyer des formulaires où les erreurs de saisies pourraient être nombreuses, ce n'est pas possible de faire une équivalence en php ou de faire en sorte que les tests soient exécutes coté serveur?

Je débute donc je me pose la question, par ailleurs tu ne sais pas pourquoi le premier champ ne s'affiche pas avec les echo?

Merci en tout cas.
Messages postés
5374
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
873
Si bien sur il est même fortement conseillé de faire un test en php côté serveur

une solution, (il y en a surement d'autres c'est un e, question de gout ou de principes)

<?php

$valid=false; //init

if(isset($_POST['jour']) AND $_POST['jour'] !==""){
	if($_POST['jour'].......) { //ton test
		$valid=true;
	}else{
		$valid=false;
	}
}else{
	echo "Veuiilez saisir le jour !";
}

if(isset($_POST['mois']) AND $_POST['mois'] !==""){
	if($_POST['mois'].......) { //ton test
		$valid=true;
	}else{
		$valid=false;
	}
}else{
	echo "Veuiilez saisir le mois !";
}

if($valid==true){
	//la tu acceptes de traiter ton formulaire

}
C'est probablement mieux de procéder ainsi, par ailleurs mon formulaire renvoi vers une seconde page avec un résumé des données saisies, pour pouvoir faire ces tests il va falloir que je renvois le formulaire vers la page où il se trouve et ensuite si la saisie est correcte faire une redirection vers la page de résumé grâce aux sessions, ou penses-tu qu'il y a plus malin à faire ou qu'en procedant ainsi ça ne fonctionnera pas?

En fait ce que je souhaite quand ce sera fini c'est que mon formulaire soit testé puis renvoi vers un résumé des entrées avec en parallèle ajout des données dans une BDD.

Mais avec ton code je comprend le principe, mais admettons tout les premiers tests sont faux donc $valid reste a false mais le dernier est bon, $valid ne va pas passer à true et valider le formulaire?

Je dois mettre tout le formulaire ici?
if($valid==true){
//la tu acceptes de traiter ton formulaire

}

Merci pour toutes ces explications, c'est sympa!
Messages postés
5374
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
873
Ce qui va bien c'est que le formulaire s'appelle lui même action ="" ou action="<?php echo $_SERVEUR['PHP_SELF']; ?>"

ainsi en cas de problème de saisie le formulaire se réaffiche et tu y mets les value

il faut au début du script

<?php

if(isset($_POST['champ1']){$champ1=$_POST['champ1'];} else{$champ1="";}

?>

et plus bas dans ton formulaire tu mets

<input type="texte name='champ1' value="<?php echo $champ1; ?>" />

et si tout ok tu peux stocker tout dans des variables de session

et appeler une autre page par
Header('Location:page_suivante.php');
mais attention avant ça il ne doit rien avoir d'envoyé au navigateur pas de HTML etc..
Voici la page que j'ai actuellement, j'ai testé les conditions avec les echo et ça semble retourner les resultats que j'attends des tests, cependant dans le if ($valid == true) ou if ($valid == false) selon la preference je mets quoi dedans qui va permettre de bloquer l'envoi du formulaire?

Car si je fais l'entrée dans la BDD dans la seconde page qui sera donc appelée que si les tests sont passé avec succès je suppose que ça va marcher comme je souhaite mais ça fait certainement un peu trop "bricolage" enfin je ne sais pas ce que tu en penses?

Sinon, si j'ai bien compris les codes que tu as mis aussi dessus, ils permettent d'afficher le "message d'erreur" dans le champ ou il ya une erreur?

<?php
if(isset($_POST['envoyer']))
{
$valid=true; //init

if(strlen($_POST['CP']) == 5)
{ //ton test

}
else
{
$valid=false;
echo "numero de compte incorect!";
}

if(strlen($_POST['annee']) == 4)
{ //ton test

}else
{
$valid=false;
echo "Le numero de l'ancienne carte incorrect !";
}

if ( $valid == true )
{
echo 'formulaire envoyé';
Header('Location:resumeSaisie.php');
}

echo '
<form method="post" action="saisie.php" enctype="multipart/form-data>
Date de naissance : <input type="text" name="jour" size="2"
maxlength="2" value="JJ"/> / <input type="text" name="mois" size="2"
maxlength="2" value="MM"/> / <input type="text" name="annee" size="4"
maxlength="4" value="AAAA"/></p>';

echo'<br />
<p>Nom: <input type="text" name="nom" value=""/></p>';
echo'<br />
<p>Code postal: <input type="text" name="CP" value=""/></p>';
echo'
<input type="submit" name="envoyer" value="envoyer" />
</form>';
?>
Messages postés
5374
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
873
<?php
if(isset($_POST['envoyer']))
{
	$valid=false; //init à false, on part du  principe que c'est pas bon et on met bon que si tout ok

	if(strlen($_POST['CP']) == 5)
	{ //ton test
	$valid=true;
	}
	else
	{
	$valid=false;
	echo "numero de compte incorect!";
	}

	if(strlen($_POST['annee']) == 4)
	{ //ton test
	$valid=true;
	}else
	{
	$valid=false;
	echo "Le numero de l'ancienne carte incorrect !";
	}

	if ( $valid == true )
	{
	//echo 'formulaire envoyé';  //si tu met cet echo tu ne pouras pas mettre le header ligne d'après, de plus tu n'auras pas le temps de le voir puisque la page est redirigée
	session_start();
	$_SESSION['CP']=$_POST['CP']; //memo des valeurs dans les variables de session pour utilisation page suivante
	//etc..

	//puis
	Header('Location:resumeSaisie.php');
	}
}
?>

<form method="post" action="saisie.php" enctype="multipart/form-data" >
Date de naissance : <input type="text" name="jour" size="2"
maxlength="2" value="JJ"/> / <input type="text" name="mois" size="2"
maxlength="2" value="MM"/> / <input type="text" name="annee" size="4"
maxlength="4" value="AAAA"/></p>';

<br />
<p>Nom: <input type="text" name="nom" value=""/></p>';
<br />
<p>Code postal: <input type="text" name="CP" value=""/></p>';

<input type="submit" name="envoyer" value="envoyer" />
</form>
On est d'accord, seulement dès que je mets un sessions start plein d'erreurs arrivent.*

<?php
session_start();

echo 'Code Postal :' .$_SESSION['CP'] . '<br />';

?>

Warning: session_start() [function.session-start.html]: open(C:\WINDOWS\TEMP\\...) failed: Permission denied (13) in D:.. on line 2

Warning: Unknown: open(C:\WINDOWS\TEMP\...) failed: Permission denied (13) in Unknown on line 0

Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct () in Unknown on line 0

Sans le session_start pas d'erreur mais pas possible de récuperer les valeurs...
Des erreurs semblables arrivent sur la page du formulaire aussi.
Messages postés
5374
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
873
pour le php de session, vas voir dans ton php.ini à la section [sessions]

si je comprend bien tu es en local

les variables de sessions sont stockées dans un dossier temp

qui doit être défini par session.save_path=C:\ProgrammeFile\Easy_php\tmp (chez moi ç'est comme ça parce que j'ai Easy Php