Page 1 sur 1

Structure d'un script

Posté : 30 nov. 2008, 14:50
par Alain78
Bonjour,

J'ai besoin de vos lumières pour m'aider à résoudre ce problème que je pense être liée à la structure de mon script, mais je ne sais pas pourquoi.

Mon script est simple. Il comprend :
- un formulaire avec des champs de saisie de types différents dont l'action est $_SERVER['PHP_SELF']
- après le formulaire une vérification des données saisies
- après la vérification, si tout est ok une insertion des données dans table concernée.

Tout fonctionne correctement sauf que lorsqu'une condition de validité n'est pas remplie, je signale par un message l'erreur à l'utilisateur MAIS le script enegistre à chaque fois les données dans la table.
Pourtant j'ai pris la précaution de n'accéder à la zone de vérification que lorsque le bouton submit est actionné.
Je vous soumet la structure de mon script ci dessous. Si vous voyez l'erreur, je vous en remercie d'avance.

form action=$_SERVER['PHP_SELF']
input 1
input 2
......... input n
input type= submit name=valid
/form

si isset valid
si 1
condition 1 à vérifier (les conditions à vérifier sont les valeurs saisies non acceptées)
sinon
si 2
condition 2 à vérifier
sinon
si n
condition...n à vérifier
sinon
enregistrement dans la table
fin si 1
fin si2
fin si n
fin isset valid




:roll:

Posté : 30 nov. 2008, 15:11
par djtec
Il faut faire
<?php
if(empty($valid)) 
{
	if($input1 == '')
	{
		echo 'input 1 vide';
	}
	elseif($input2 == '')
	{
		echo 'input 2 vide';
	}
	elseif($input3 == '')
	{
		echo 'input 3 vide';
	}
	else
	{
		// ta requete sql
	}
}
?>
Ton shéma etait bon

Posté : 30 nov. 2008, 15:36
par Alain78
OK merci. J'ai modifié et cela fonctionne bien mais le problème est qu'après l'enregistrement dans la table, les données restent affichées dans les champs. Si par malheur l'utilisateur appuie à nouveau sur le champ submit, elles sont à nouveau enregistrées créant ainsi un doublon.

J'ai pensé à une redirection via un header mais la solution n'est pas valable
- au plan fonctionnel (l'utilisateur doit pouvoir saisir autant de fois qu'il veut de nouvelles données
sans être obligé de réafficher le formulaire)
- ni au plan PHP car dans le script il y a de nombreux echo.

L'idéal est de réinitialiser les variables à blanc. J'ai essayé un unset des variables POST, cela ne fonctionne pas. Il conserve la variable POST et son contenu.
J'ai essayé de donner la valeur "" aux variables. Cela ne fonctionne pas non plus.

Je cherche mais j'ai du mal à comprendre pourquoi un unset ne fonctionne pas ni une réaffectation des variables à blanc.

A suivre.... 8-)

Posté : 30 nov. 2008, 15:46
par djtec
Avant un nouvel enregistrement regarde si les données existe déjà dans ta base pour éviter les doublons.

Sinon moi quand je fais:
<?php
if(!empty($_POST["valid"])) 
{
	if($_POST["input1"] == '')
	{
		echo 'input 1 vide';
	}
	elseif($_POST["input2"] == '')
	{
		echo 'input 2 vide';
	}
	elseif($_POST["input3"] == '')
	{
		echo 'input 3 vide';
	}
	else
	{
		// ta requete sql
	}
}
?>

<form method="post">
<input type="text" name="input1" /><br>
<input type="text" name="input2" /><br>
<input type="text" name="input3" /><br>
<input type="submit" value="ok" />
</form>
Tout mes input sont vide après l'enregistrement.

Posté : 30 nov. 2008, 16:00
par Alain78
OK cela fonctionne. Cela demande tout de même l'intervention de l'utilisateur qui doit clicker sur OK. Mais je vais associer cet OK à un message adapté.

J'ai remplacé le type 'text' pour les champs des variables à réinitialiser par un type 'hidden'.
Comme cela l'utilisateur ne voit que le bouton OK

Meric et bonne journée.