8797 sujets

Développement web côté serveur, CMS

Pages :
Je me permets de venir vers vous car je rencontre une petite coquille dans le création de mon formulaire de contact.
Je viens de créer un formulaire permettant aux internautes de m'envoyer quelques informations :
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
        <meta http-equiv="Content-Type" content="text/plain; charset=UTF-8" />
</head>
<?PHP
if (get_magic_quotes_gpc())
{
    $nom = stripslashes($_POST['nom']);
    $email = stripslashes($_POST['email']);
    $nation = stripslashes($_POST['nation']);
    $prenom = stripslashes($_POST['prenom']);
    $telephone = stripslashes($_POST['telephone']);
    $adresse = stripslashes($_POST['adresse']);
    $profession = stripslashes($_POST['profession']);
    $statut = stripslashes($_POST['statut']);
    $interet = stripslashes($_POST['interet']);
    $message = stripslashes($_POST['message']);  
}
else
{  
    extract($_POST,EXTR_OVERWRITE);
   
   
/* Destinataire (votre adresse e-mail) */
$to = 'monadresse@mail.com';
// Subject
$subject = 'Demande informations concernant monsite.com';
/////voici la version Mine
$headers = "MIME-Version: 1.0\r\n";

$headers .='Content-Type: text/plain; charset="utf-8"'." ";
$headers .='Content-Transfer-Encoding: 8bit';
/* Construction du message */
$msg  = 'Bonjour,'."\r\n\r\n";
$msg .= 'Ce mail a été envoyé depuis le site monsite.com par '.$nom.' '.$prenom."\r\n\r\n";
$msg .= 'Voici le message qui vous est adressé :'."\r\n";
$msg .= '***************************'."\r\n";
$msg .= 'Le nom est :'.$nom."\r\n\r\n";
$msg .= 'Le prénom est :'.$prenom."\r\n\r\n";
$msg .= 'La nationalité est :'.$nation."\r\n\r\n";
$msg .= 'Le numéro de téléphone est :'.$telephone."\r\n\r\n";
$msg .= 'L adresse email est :'.$email."\r\n\r\n";
$msg .= 'L adresse de domiciliation est :'.$adresse."\r\n\r\n";
$msg .= 'Sa profession est :'.$profession."\r\n\r\n";
$msg .= 'Son statut est :'.$statut."\r\n\r\n";
$msg .= 'Son intérêt est :'.$interet."\r\n\r\n";
$msg .= 'Son message est :'.$message."\r\n\r\n";
$msg .= '***************************'."\r\n\r\n";
 
$headers = 'From: '.$nom.' '.$prenom.' <'.$expediteur.'>'."\r\n\r\n";
/* Envoi de l'e-mail */
mail($to, $subject, utf8_decode($msg), utf8_decode ($headers));
// la fonction de redirection ------------
function redir($url){
echo "<script language=\"javascript\">";
echo "window.location='$url';";
echo "</script>";
}
// Utiliser la redirection ---------------
redir("http://www.monsite.com");
}?>
</html>

La fonction mail fonctionne, sans trop de problèmes
Maintenant je cherche une fonctionnalité permettant de vérifier que les champs ne sont pas vide.
J'ai fais plusieurs recherches en partenariat avec mon ami Google, les solutions trouvées sont trop complexe à mon goût
(ex: vérifier qu'il y a bien des chiffre et des lettres, vérifier que le tél est bien composé de 10 numéros, vérifier que le @ est bien placé, etc....)

Pour ma part je cherche juste une solution permettant de vérifier que les champs ne sont pas vide et si c'est le cas avoir une petite fenêtre pop-up qui dit "veillez remplir tous les champs, merci"

J'ai regarder la fonction empty, car apparemment c'est celle qui correspond le mieux à mon besoin:
$headers = 'From: '.$nom.' '.$prenom.' <'.$expediteur.'>'."\r\n\r\n";
/* Envoi de l'e-mail */
if (empty($nom))
{
print ("Veuillez rentrer toutes les informations")
}
if (empty($email))
{
print ("Veuillez rentrer toutes les informations")
}
if (empty($nation))
{
print ("Veuillez rentrer toutes les informations")
}
if (empty($prenom))
{
print ("Veuillez rentrer toutes les informations")
}
if (empty($telephone))
{
print ("Veuillez rentrer toutes les informations")
}
if (empty($adresse))
{
print ("Veuillez rentrer toutes les informations")
}
if (empty($profession))
{
print ("Veuillez rentrer toutes les informations")
}

mail($to, $subject, utf8_decode($msg), utf8_decode ($headers));

// la fonction de redirection ------------
function redir($url){
echo "<script language=\"javascript\">";
echo "window.location='$url';";
echo "</script>";
}
// Utiliser la redirection ---------------
redir("http://www.monsite.com");
}?>
</html>


J'ai essayé de faire un bout de code mais je dois avouer que ça fonctionne pas des masses.
Si vous avez la possibilité me donner une direction de recherche............ c cool
Bonne fin de journée Smiley langue
les vérifications de champs de formulaires doivent toujours, pour des raisons de sécurité, se faire côté serveur. On peut aussi les faire en Javascript (donc côté client) mais toujours en les couplant avec une verif côté serveur.

Javascript ça se désactive...
Bonjour,

Il me semble qu'il faut vérifier si l'un des tes champs est vide avant de préparer ton email puis, le cas échéant, renvoyer vers le formulaire pour que le champ soit complété. Ton script affiche peut-être le message d'avertissement mais envoie tout de même l'email !
Une possibilité est d'inclure le formulaire avec ton script de traitement d'email. Tu affiches le formulaire si un champ est vide, sinon tu postes le mail et tu rediriges vers une page de ton site.
Sinon utiliser "empty" est tout indiqué...
Modifié par ArnoldM (22 Jun 2012 - 00:37)
okono251 a écrit :
IL faut le faire en javascript

Le problème initial, vérifier qu'un champ est vide, si oui afficher une boite de dialogue. A ma connaissance les boites de dialogue c'est en javascript.
Effectivement, tout dépend de ce que l'on veut faire... Mais dans ce cas le mail ne doit pas être envoyé, il faut donc réafficher le formulaire, sinon je ne vois pas l'intérêt de signaler le champ manquant.
Salut, la question posée par paikan est la suivante :
"paikan" a écrit :
Maintenant je cherche une fonctionnalité permettant de vérifier que les champs ne sont pas vide.
Cela doit se faire en javascript (ou jquery) avant de valider le formulaire. Pour ce faire, il faut tester chaque champs et vérifier s'il y a autre chose que du vide. Voici un exemple de vérification :
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<title>Vérification des champs d'un formulaire</title>

<script type="text/javascript">
function verifier ()
{
	erreur = document.getElementsByName("mess")[0];
	test   = document.getElementsByName("champs");

	for (var z=0; z<test.length; z++)
	{
		if (test[z].value == "")
		{
			erreur.value = "Ce champs doit être renseigné !";
			test[z].style.backgroundColor = "red";
			return false;
		}
		else
		{
			test[z].style.backgroundColor = "white";
		}
	}

	erreur.value = "";

	return true;
}
</script>
</head>

<body>
	<form action="envoie.php" method="post" onsubmit="return verifier();">
		Champs numero 1 : <input type="text" name="champs" value="" size="20" /><br />
		Champs numero 2 : <input type="text" name="champs" value="" size="20" /><br />
		Message d'erreur : <input type="text" name="mess" disabled="disabled" value="" size="50" /><br />
		<input type="submit" value="envoyer" />
	<form>
</body>
</html>
tournikoti a écrit :
Salut, la question posée par paikan est la suivante : Cela doit se faire en javascript (ou jquery) avant de valider le formulaire. Pour ce faire, il faut tester chaque champs et vérifier s'il y a autre chose que du vide.


Jamais on ne fait de vérification d'un formulaire uniquement côté client. C'est une des règles de base du développement Web.

Dans le cas présent empty est bien la méthode à utiliser pour vérifier si un champ est vide.
jmlapam a écrit :
Moi je partirais plutôt sur un if !empty et des || pour regrouper l'ensemble des conditions.


Quand tu as beaucoup de valeurs d'un même tableau à tester, utiliser une boucle (for/foreach sont tes amis). Smiley cligne
Modifié par jb_gfx (22 Jun 2012 - 21:46)
jb_gfx a écrit :
Jamais on ne fait de vérification d'un formulaire uniquement côté client.

Ou as-tu vu que je disais que l'on devait vérifier uniquement du côté client ?

Vérifier qu'un formulaire est correctement rempli se fait bien du côté client. Cela permet de décharger le travail du serveur.

Le Contrôle de la conformité de la saisie et sa validation se fait bien, par contre, du coté serveur. Comme le transfert d'un formulaire est couteux en temps d'exécution, il faut mieux faire un maximum de vérification du côté client.

Sinon comment programmes-tu que la saisie d'un champs est obligatoire ?
Modifié par tournikoti (23 Jun 2012 - 00:22)
tournikoti a écrit :
Vérifier qu'un formulaire est correctement rempli se fait bien du côté client. Cela permet de décharger le travail du serveur.


Non, toutes les vérifications effectuées coté client doivent être refaites coté serveur, les donnée peuvent avoir été modifiés entre temps ou le controle JS bypassé.
Modifié par JJK801 (23 Jun 2012 - 00:24)
jb_gfx a écrit :


Quand tu as beaucoup de valeurs d'un même tableau à tester, utiliser une boucle (for/foreach sont tes amis). Smiley cligne


Oui mais à partir de 7/8 au moins.
Bonjour,

moi ce que je fais c'est la chose suivante :

par convention, je nomme mes champs de formulaire préfixé de la lettre"o" s'ils sont obligatoires et je vais un peu plus loin, je rajoute au début du nom une lettre pour indiquer le type de données attendues (t = text, m = mail, f = float etc).
ce qui fait que je vais avoir des champs de type :

ot_nom (attend du texte et est obligatoire)
m_mail (pas obligatoire)
of_montant etc etc

(vous noterez que le _ sert de séparateur entre le nom du champ et la ou les deux lettres de vérif)

ensuite je me suis créé une fonction qui va vérifier la validité du formulaire. Elle renvoie true si tout est bon, false dans le cas contraire
de sorte que si ma fonction s'appelle CheckForm($arr), il me suffit de faire :


if(CheckForm($_POST)){
//traitement
}
else
{
echo "merci de vérifier votre formulaire";
}


(à la base j'avais scindé ma fonction en deux pour dire si le problème venait d'une donnée vide ou d'une donnée inattendu, mais j'ai préféré délégué cela à javascript (comme le fait tournikoti), ce qui simplifie encore plus l'appel à ma vérification.

Une fois que la fonction est faite, pour tes développements futurs, il te suffit de nommer correctement tes formulaires, ce qui fait vraiment gagner du temps.
(je te laisse coder la fonction hein, si tu arrives pas je te la donnerai Smiley smile )
JJK801 a écrit :
Non, toutes les vérifications effectuées coté client doivent être refaites coté serveur, les donnée peuvent avoir été modifiés entre temps ou le controle JS bypassé.


"sanchodellavega" a écrit :
(à la base j'avais scindé ma fonction en deux pour dire si le problème venait d'une donnée vide ou d'une donnée inattendu, mais j'ai préféré délégué cela à javascript (comme le fait tournikoti), ce qui simplifie encore plus l'appel à ma vérification.

Ne me faite pas dire ce que je n'ai pas dit. Smiley eek

Tout le travail de vérification (genre champs obligatoire, analyse de la syntaxe ou je ne sais quoi) que l'on fait en Javascript doit se faire aussi en Php. Je sais très bien que l'on peut désactiver le javascript dans le navigateur. Nous sommes bien d'accord sur ces deux points.

Mais je ne parle pas de cela. Je dis simplement que si l'on peut éviter de faire des allez-retour pour rien, c'est quand même plus performant que de laisser seulement le serveur tout faire.
oula désolé je me suis mal exprimé.
a écrit :

(à la base j'avais scindé ma fonction en deux pour dire si le problème venait d'une donnée vide ou d'une donnée inattendu, mais j'ai préféré déléguer cela à javascript (comme le fait tournikoti), ce qui simplifie encore plus l'appel à ma vérification.


en fait je voulais dire que ma fonction php renvoie une erreur sans détail (ex : "merci de remplir le formulaire correctement") et c'est javascript qui va détailler d'où vient précisément le problème (d'ou la référence à ton message tournikoti Smiley smile ).
Bonjour à tous, je vous remercie tous pour votre aide.
Vos postes m'ont bien aidés dans mes recherches.

Je me suis tourné du côté de CheckFrom
J'ai essayé de comprendre comment le processus fonction et j'ai essayé mon petit bout de code, mais forcement, ça ne m’étonne pas de moi, ça marche pas.
Le mail est envoyé sans vérification des champs.

<script type="text/javascript" src="../js/CheckForm.js"></script>

<script type="text/javascript"><!--
var check1;
function maFunctionCheck(){
	check1 = new CheckForm("form");
check1.addReg("nom","prenom","nation","email","telephone","adresse","profession","Veuillez taper un nom de 3 à 30 caractères maximum ",[3,30]);
//--></script>


if(CheckForm($_POST))
{
mail($to, $subject, utf8_decode($msg), utf8_decode ($headers));
}
else
{
echo "Veuillez remplir tous les champs"
}


Je pense que vous avez compris que j'étais un peu nulos en php/Js.
J'ai également cru comprendre que la vérification côté client n’était pas la meilleur solution
Je vais continuer mes recherches sur empty en parallèle
Ouep, ta fonction CheckForm est du JavaScript, si tu l'appelles dans ton PHP ça ne peut pas fonctionner.
merci
Comme tu me la conseillé je vais retourner du côté de empty, ça à l'aire plus simple
Tiens voilà un exemple d'utilisation de empty pour vérifier que tous les champs sont remplis. Je t'ai fait un squelette, t'as plus qu'a rajouter ton code d'envoi du formulaire au bon endroit :


$champs_obligatoires = Array('nom', 'email', 'nation', 'prenom', 'telephone', 'adresse', 'profession');

/**
 * Vérifie si les champs obligatoires ne sont pas vides.
 * 
 * @param array $array Tableau contenant les noms de champs à vérifier
 * @return boolean
 */
function verif_champs_obligatoires($array) {
  foreach ($array as $nom) {
   if (empty($_POST[$nom])) {
     return false;
   }
  }
  return true;
}

/**
 * Si le formulaire à été envoyé 
 */
if (!empty($_POST)) {
  if (verif_champs_obligatoires($champs_obligatoires) === true) {
   // ici on envoi le mail 
  } else {
   // un des champs n'a pas été rempli, on stocke l'erreur pour l'afficher dans le formulaire.
   $error = 'Merci de remplir tous les champs';
  }
}
Pages :