× Aidez la recherche contre le COVID-19 avec votre ordi ! Rejoignez l'équipe PC Astuces Folding@home
 > Tous les forums > Forum des Webmasters
 Contrôle Formulaire PHP & JS (alert)Sujet résolu
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
Badr3am
  Posté le 02/10/2010 @ 22:21 
Aller en bas de la page 
Petit astucien

Bonsoir,

Je pose une question assez ridicule mais je suis dessus depuis quelques temps et je ne trouve pas de solutions ! J'ai un formulaire HTML associé à un script PHP qui vérifie les champs et me les adresse par mail. Or je ne parviens pas à générer des alerts en JavaScript lorsqu'un champ n'est pas rempli alors qu'il est obligatoire. Résultat pour l'instant ma solution c'est juste de générer une page qui liste les champs manquants. Il va de soit que ça ne me convient pas trop ...

J'ai sans cesse des problèmes de syntaxe quelle que soit ma rédaction du code ...

Je vous donne la page .php qui fonctionne parfaitement en débouchant sur une page de listing des "champs manquants".

Merci pour votre aide

<?php

//Définition variables
$msg_erreur = "Attention ! Les champs suivants doivent être obligatoirement remplis :<br/><br/>";
$msg_ok = "Votre demande a bien été prise en compte.";
$message = $msg_erreur;
$date = date("d-m-Y" );
$heure = date("H:i" );
$redirection = "redirection.html";

//Destinataire
define('MAIL_DESTINATAIRE','xxx@xxx.xx');
define('MAIL_SUJET','Demande de publication');

//Vérification champs
if (empty($_POST['Nom']))
$message .= "Nom<br/>";
if (empty($_POST['Prenom']))
$message .= "Prénom<br/>";
if (empty($_POST['Secteur']))
$message .= "Secteur<br/>";
if (empty($_POST['Centre']))
$message .= "Centre<br/>";
if (empty($_POST['Rubrique']))
$message .= "Rubrique<br/>";
if (empty($_POST['Sujet']))
$message .= "Sujet de la demande<br/>";
if (empty($_POST['Description']))
$message .= "Description de la demande<br/>";

//Message d'Erreur si un champ est vide
if (strlen($message) > strlen($msg_erreur)) {

echo $message;

}

//Sinon poursuite du code
else {

foreach($_POST as $index => $valeur) {
$$index = stripslashes(trim($valeur));
}

//Préparation de l'entête du mail
$mail_entete = "MIME-Version: 1.0\r\n";
$mail_entete .= "From: {$_POST['Nom']} ";
$mail_entete .= 'Content-Type: text/plain; charset="iso-8859-1"';
$mail_entete .= "\r\nContent-Transfer-Encoding: 8bit\r\n";
$mail_entete .= 'X-Mailer:PHP/' . phpversion()."\r\n";


//Préparation du corps du mail
$mail_corps = "DEMANDE DE VALIDATION DE RECHERCHE\n\n";
$mail_corps .= "Date : $date\n";
$mail_corps .= "Heure : $heure\n\n";
$mail_corps .= "------------------------------------------\n\n";
$mail_corps .= "Nom : $Nom\n";
$mail_corps .= "Prénom : $Prenom\n";
$mail_corps .= "Secteur-Centre : $Secteur, $Centre\n\n";
$mail_corps .= "------------------------------------------\n\n";
$mail_corps .= "Rubrique : $Rubrique\n";
$mail_corps .= "Intitulé de la demande : $Sujet\n";
$mail_corps .= "Description : $Description\n";

//Envoi du mail
if (mail(MAIL_DESTINATAIRE,MAIL_SUJET,$mail_corps,$mail_entete)) {

//Le mail est bien expédié
echo "<script language=\"javascript\">";
echo "window.location=('$redirection');";
echo "</script>";
} else {

//Le mail n'a pas été expédié
echo 'Une erreur est survenue lors de l\'envoi du formulaire par email';
}

}

?>

Publicité
Malcolm
 Posté le 06/10/2010 à 01:29 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

ton code php ne sert pas encore, puisque le JS est exécuté coté client.

il faut que sur ta balise <form> tu mettes un onsubmit="return VerifierFormulaire();"

et tu crées une fonction JS VerifierFormulaire qui dit (grosso modo) :

function VerifierFormulaire()

{

var retour = true;

if (document.getElementById('id_du_champ_prenom').value == '')

{ alert('Veuillez mettre votre prénom !'); retour = false; }

// ... pareil pour les autres champs

return $retour;

}

Voir un exemple plus détaillé : http://ressources.mediabox.fr/tutoriaux/javascript/divers/verifier_les_champs_formulaire_colorer_les_champs_faux

Badr3am
 Posté le 08/10/2010 à 11:34 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Bonjour Malcom,

En fait c'était on ne peut plus simple ...

Merci beaucoup !

ogd
 Posté le 10/11/2010 à 12:15 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Hello!

Je viens a la suite de ce poste car le sujet est le même et je me dit que c'est assez logique

Je voudrais pour ma part faire tout le traitement en php mais je doit passer à cote de quelque chose:

<form method="post" action="<?
if ($nom==0 || $prenom==0 || $entite==0 || tel==0 || $mail==0 || titreevt==0 || $ville==0 || $lieu==0 || $postal==0 || $dateevt==0 || $datefin==0 || $descrip==0) {
echo "accueil.php?page=includes/agenda/addagenda.php";
}
else {
echo "accueil.php?page=includes/agenda/validagenda.php";
}
?>
" enctype="application/x-www-form-urlencoded" name="formulaire">

<p><b><font color="#ff0000">*</font>Nom :<br></b></p>
<p>
<input type="text" name="nom" value="<? $_POST['nom'] ; ?>" maxlength="50" size="60"></td>
<?
if ($nom==0) {
echo "<font color='#FFFFFF'>Le nom est obligatoire.</font>";
}
?>
</p>


<p><b><font color="#ff0000">*</font>Prénom :<br></b></p>
<p>
<input type="text" name="prenom" value="<? $_POST ['prenom'] ; ?>" maxlength="50" size="60"></td>
<?
if ($prenom==0) {
echo "<font color='#FFFFFF'>Le nom est obligatoire.</font>";
}
?> </p>

<p><b><font color="#ff0000">*</font>Nom de l'entité (Part., sté ou asso) :<br></b></p>
<p>
<input type="text" name="entite" value="<? $_POST ['entite'] ; ?>" maxlength="50" size="60"></td>
<?
if ($entite==0) {
echo "<font color='#FFFFFF'>Le nom est obligatoire.</font>";
}
?> </p>

<p><b><font color="#ff0000">*</font>Téléphone :<br></b></p>
<p>
<input type="text" name="tel" value="<? $_POST ['tel'] ; ?>" maxlength="50" size="60"></td>
<?
if ($tel==0) {
echo "<font color='#FFFFFF'>Le nom est obligatoire.</font>";
}
?> </p>

<p><b><font color="#ff0000">*</font>E-mail :<br></b></p>
<p>
<input type="text" name="mail" value="<? $_POST ['mail'] ; ?>" maxlength="50" size="60"></td>
<?
if ($mail==0) {
echo "<font color='#FFFFFF'>Le nom est obligatoire.</font>";
}
?> </p>


<p><b><font color="#ff0000">*</font>Titre de l'évènement :<br></b></p>
<p>
<input type="text" name="titreevt" value="<? $_POST ['titreevt'] ; ?>" maxlength="50" size="60"></td>
<?
if ($titreevt==0) {
echo "<font color='#FFFFFF'>Le nom est obligatoire.</font>";
}
?> </p>

<p><b><font color="#ff0000">*</font>ville :<br></b></p>
<p>
<input type="text" name="ville" value="<? $_POST ['ville'] ; ?>" maxlength="50" size="60"></td>
<?
if ($ville==0) {
echo "<font color='#FFFFFF'>Le nom est obligatoire.</font>";
}
?> </p>

<p><b><font color="#ff0000">*</font>Lieu :<br></b></p>
<p>
<input type="text" name="lieu" value="<? $_POST ['lieu'] ; ?>" maxlength="50" size="60"></td>
<?
if ($lieu==0) {
echo "<font color='#FFFFFF'>Le nom est obligatoire.</font>";
}
?> </p>


<p><b><font color="#ff0000">*</font>Code postal :<br></b></p>
<p>
<input type="text" name="postal" value="<? $_POST ['postal'] ; ?>" maxlength="50" size="60"></td>
<?
if ($postal==0) {
echo "<font color='#FFFFFF'>Le nom est obligatoire.</font>";
}
?> </p>

<p><b><font color="#ff0000">*</font>Date de début de l'évènement :<br></b></p>
<p>
<input type="text" name="dateevt" class="mCalendar" value="<? $_POST ['dateevt'] ; ?>">
<script type="text/javascript" src="./sql/calendar/mCalandar.js"></script>
<?
if ($dateevt==0) {
echo "<font color='#FFFFFF'>Le nom est obligatoire.</font>";
}
?> </p>

<p><b><font color="#ff0000">*</font>Date de fin de l'évènement :<br></b></p>
<p>
<input type="text" name="datefin" class="mCalendar" value="<? $_POST ['datefin'] ; ?>">
<script type="text/javascript" src="./sql/calendar/mCalandar.js"></script>
<?
if ($datefin==0) {
echo "<font color='#FFFFFF'>Le nom est obligatoire.</font>";
}
?> </p>

<p><b><font color="#ff0000">*</font>Description :<br></b></p>
<p>
<textarea id="descrip" name="descrip" value="<? $_POST ['descrip'] ; ?>" rows="6" cols="50"></textarea></br>
<b>Il vous reste <font color="#ff0000"><span id="carac_reste_descrip"></span></font> caractères.</b>
<script type="text/javascript">
<!--
maxlength_textarea('descrip','carac_reste_descrip',750);
-->
</script>
<?
if ($descrip==0) {
echo "<font color='#FFFFFF'>Le nom est obligatoire.</font>";
}
?>
</p>

<input type="submit" name="submit" value="Envoyer">
</p>
</form>

3 soucis:

-meme si je remplis bien le formulaire, je reviens sur la page addagenda.php

-mes champs ne sont pas préremplis quand la page se recharge

-les champs vide ne font pas apparaitre le message d'erreur

Si vous pouviez m'aider?

Bonne journée, et merci d'avance

Malcolm
 Posté le 10/11/2010 à 21:52 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

$nom == 0 ??????

t'as l'habitude de rentrer un entier numérique dans le nom, toi ? {#}

pour les champs préremplis, j'ai longtemps cogité dessus, et j'en suis arrivé à une méthode, peut-être pas la meilleure, mais qui a le mérite de fonctionner (je cherche à l'optimiser d'ailleurs)

typiquement, tu fais le formulaire et son action sur la même page et dans cette page :

$nom = (isset($_POST['nom'])) ? $_POST['nom'] : ''; // ATTENTION c'est juste pour l'exemple, il faut sécuriser les variables bien sûr

$prenom = (isset($_POST['prenom'])) ? $_POST['prenom'] : ''; // ATTENTION c'est juste pour l'exemple, il faut sécuriser les variables bien sûr

if (isset($_POST['submit']))

{

// formulaire rempli, on le traite

}

if (!isset($_POST['submit']))

{

// formulaire non rempli, on l'affiche

<input type="text" name="nom" value="$nom" />

<input type="text" name="nom" value="$prenom" />

}

Voilà le principe ...

ogd
 Posté le 15/11/2010 à 16:10 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

bon, finalement, j'utilise ta technique pour un autre script en cours d emontage.

Mais pour celui sur lequel je suis, je vais garder javascript.

Par contre je jetais un oeil sur ton script de formulaire...

Il y a un truc que je ne comprends pas :

// on teste si le formulaire a été soumis
if (!isset($_POST['envoi']))
{
// formulaire non envoyé
echo '<p>'.$message_erreur_formulaire.'</p>'."\n";
}
else
{

la suite...

}

Ca devrait pas être l'inverse plutot?

Je le comprends comme :

Si la condition de la soumission des donnees est réunie, echo $message_erreur_formulaire

sinon la suite....

non?

D'ailleur quand je teste, j'ai beau remplir le formulaire, il me renvoie le message d'erreur indiqué

Page : [1] 
Page 1 sur 1

Vous devez être connecté pour poster des messages. Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !


Les bons plans du moment PC Astuces

Tous les Bons Plans
10,01 €Adaptateur USB 3.0 Ethernet Gigabit TP-Link UE300 à 10,01 €
Valable jusqu'au 29 Octobre

Amazon fait une promotion sur l'adaptateur USB 3.0 Ethernet Gigabit TP-Link UE300 qui passe à 10,01 € au lieu de 20 €. Cet adaptateur vous permettra de rajouter une prise Ethernet Gigabit à votre ordinateur portable (ou votre tablette via un adaptateur OTG) qui en est dépourvu.


> Voir l'offre
699,99 €Portable 14 pouces Asus Vivobook Flip (FullHD, Ryzen 5, 8Go, SSD 512 Go) à 699,99 €
Valable jusqu'au 31 Octobre

Cdiscount fait une promotion sur le PC portable convertible en tablette 14 pouces Asus Vivobook Flip TM420IA-EC027T qui passe à 699,99 € alors qu'on le trouve ailleurs à partir de 799€. Ce portable que vous pouvez plier comme une tablette est très bien équipé. Il possède un écran 14 pouces Full HD (1920x1080) IP mat antireflet et tactile, un processeur AMD Ryzen 5 4500U, 8 Go de RAM (extensible à 16 Go), un processeur graphique AMD Radeon Vega 6 et un SSD NVMe de 512 Go. Le WiFi, le bluetooth, un pavé numérique et une webcam sont de la partie. Le tout tourne sous Windows 10. Une bonne affaire.


> Voir l'offre
13,99 €McAfee Internet Security 2020 (3 appareils, 1 an) à 13,99 €
Valable jusqu'au 30 Octobre

Amazon fait une promotion sur la suite antivirus Internet Security 2020 qui passe à 13,99 €. Cette protection intégrale alliant antivirus, protection de l'identité et protection de la confidentialité des données pour tous vos PC, Mac, smartphones et tablettes est valide pour 3 appareils pendant 1 an. La clé d'activation ainsi que le lien de téléchargement vous seront envoyés par email une fois la commande passée. Une très bonne affaire.


> Voir l'offre

Sujets relatifs
formulaire avec contrôle anti-spam
Problème contrôle de formulaire en javascript
Controle formulaire+envoi mailto
Site de mariage - Formulaire d'inscription
Formulaire qui ne fonctionne pas avec Joomla
Formulaire d'envoi de message
Actualisation d'un sous formulaire
Contrôle d'une page sur chez-alice
Installation Capcha Cryptographp sur formulaire
JS formulaire dynamique sous forme de tableau
Plus de sujets relatifs à Contrôle Formulaire PHP & JS (alert)
 > Tous les forums > Forum Forum des Webmasters