Version complète: sur le forum Webmaster Hub : Problème formulaire
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
leditvalentin
J'ai pris un formulaire sur un site (je ne me souviens plus lequel) et tout marche.
Mais alors pourquoi un topic?
En faite je n'arrive pas a rajouter des valeurs pour mon formulaire.
Le code html:
CODE
<html>
<head>
<title>Contactez moi</title>
</head>
<form method="post" action="mail.php">
<p>
Votre Email <br />
<input type="text" name="votremail" />

<input type="hidden" name="objet" value="Vous avez un nouveau message" />
</p>
<p>
Votre message <br />
<textarea cols="66" rows="6" name="message"></textarea>
</p>
<input type="submit" value="Envoyer" />
</p>
</form>

Quand j'essai de rajouter un input quoi qu'il soit sa marche pas (il ne me le prends pas en compte dans le mail que je reçois)

Code php, mail.php:
CODE
<?php
// La variable $verif, va nous permettre d'analyser si la sémantique de l'email est bonne
$verif="!^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]{2,}\.[a-zA-Z]{2,4}$!";

// On assigne et protége nos variables
$votremail=$_POST["votremail"];
$from=htmlentities("From: ".$votremail);
$message=stripslashes(htmlentities($_POST["message"]));

// On met ici notre email
$destinataire="mettre son email ici";

/* On place le sujet du message qui ici sera toujours le même
puisque dans la partie Html on l'a mis en caché grace au type="hidden";) avec comme valeur "Message site abracadabroc" */
$objet=$_POST['objet'];

// C'est bon on est OK, vérifions si l'email est valide, grâce à notre sympathique REGEX
if(!preg_match($verif,$votremail))
{
echo "Voter email n'est pas valide";
}

// On verifie si il y a un message
elseif (trim($message)=="")
{
echo "Y'en a marre des messages vide !";
}

// Si tout est OK on envoie l'email
else
{
mail($destinataire,$objet,$message,$from);
echo "Message envoyé au webmaster";
}

?>
xpatval
Comment ajoutes-tu les input, et comment fais-tu ta modif dans la partie d'envoi du mail ?

xpatval
leditvalentin
CODE

<form method="post" action="mail.php">
<p>
Votre Email <br />
<input type="text" name="votremail" />

<input type=checkbox name=essai value=essai>essai

<input type="hidden" name="objet" value="Vous avez un nouveau message" />
</p>
<p>
Votre message <br />
<textarea cols="66" rows="6" name="message"></textarea>
</p>
<input type="submit" value="Envoyer" />
</p>
</form>


En rouge un essai que j'ai fait mais qui n'a pas marcher
Je n'est pas toucher au fichier mail.php et je pense mais je ne sais pas comment faire qu'il faut le modifier
Jeff2b
bonjour leditvalentin,

ton input est bien pris en compte mais si tu rajoute pas ta variable $essai dans le fichier email.php il ne pourra pas te l'envoyer dans le mail.

il faut que tu edit ton fichier email.php, et que tu lui rajoute la variable "essai" que tu recupere par la methode "POST" .
leditvalentin
a ok merci beaucoup!! je vais essayer. merci
Mais je ne suis pas sur que se que je vais faire sera juste. Si tu pouvais repasser pour me dire ce qui va pas sa sera gentil merci

P.S: je le fait tout de suite
leditvalentin
heu j'ai ouvert mon code php mais je ne vois pas ou il faut que je modifie!!

ici==>mail($destinataire,$objet,$message,$from);
Jeff2b
donc je t'explique en plus clair lol

dans ton fichier mail.php tu as la variable $message ( c'est ce qui va etre envoyé dans le mail ) dans ton cas a toi pour l'instant ca envoi que le champ "message" de ton formulaire.

si tu veux rajouter un autre input tu edit ton fichier contenant le formulaire :
tu rajoutes par exemple :

votre nom : <input type="texte" name="nom" />

ca va envoyer la variable "nom" au fichier mail.php que tu recuperes tu edites le fichier mail.php : (rajoute ce qui est en rouge)

// On assigne et protége nos variables
$votremail=$_POST["votremail"];
$from=htmlentities("From: ".$votremail);
$nom=$_POST["nom"];
$message=stripslashes(htmlentities($_POST["message"]))."envoyé par :".$nom;
steph13
Salut,

Non, non....

Ne modifie pas cette ligne la, ca, c'est la ligne qui appel la fonction mail() avec ses arguments...Et si tu la modifie sans savoir ce que tu fais, ton mail risque de ne plus partir.

Fait un tour sur nexen.net par exemple et recherche mail dans la doc php, ca te sera utile wink.gif


Essaie plutôt comme suis:

En dessous le commentaire
//on assigne et protège les variables tu met ceci:
CODE
$essai=$_post['essai'];

Cette ligne sert a recupérer la valeur de ta checkbox


Ta checkbox faisaint partie du coprs du message de ton mail,
en dessous $message, tu colles ceci:
CODE
$message .=$essais;

Cette ligne sert à inclure la valuer de ta chekbox dans le corps du message de ton mail


Et normalement, ça doit le faire.
leditvalentin
merci beaucoup je vais essayer. Et si je veux en rajouter d'autre je reprend ce shéma. il y a une limite aux nombres de checkbox que je peux mettre? Et une limite aux nombre d'input que je peux rajouter?
bon alors m'on code sa donne sa:
CODE
<?php
// La variable $verif, va nous permettre d'analyser si la sémantique de l'email est bonne
$verif="!^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]{2,}\.[a-zA-Z]{2,4}$!";

// On assigne et protége nos variables
$essai=$_post['essai'];
$votremail=$_POST["votremail"];
$from=htmlentities("From: ".$votremail);
$message=stripslashes(htmlentities($_POST["message"]));
$message .=$essais;

// On met ici notre email
$destinataire="kdgvalentin_AT_wanadoo.fr";

/* On place le sujet du message qui ici sera toujours le même
puisque dans la partie Html on l'a mis en caché grace au type="hidden";) avec comme valeur "Message site abracadabroc" */
$objet=$_POST['objet'];

// C'est bon on est OK, vérifions si l'email est valide, grâce à notre sympathique REGEX
if(!preg_match($verif,$votremail))
{
echo "Voter email n'est pas valide";
}

// On verifie si il y a un message
elseif (trim($message)=="")
{
echo "Y'en a marre des messages vide !";
}

// Si tout est OK on envoie l'email
else
{
mail($destinataire,$objet,$message,$from);
echo "Message envoyé au webmaster";
}

?>
Jeff2b
je pense pas que ce soit limité sauf si tu compte en mettre 3000 lol
steph13
Non, il n'y a pas de limite.
Et oui, il faut suivre le même schéma.

Tu recupère et assigne ta variable,
et ensuite, tu la met dans le corps du message.

Fais un tour sur les manuels PHP du net.
Tu verras que l'utilisation de la fonction mail() est assez simple.

Bon courage à toi.
leditvalentin
bon alors m'on code sa donne sa:
CODE
<?php
// La variable $verif, va nous permettre d'analyser si la sémantique de l'email est bonne
$verif="!^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]{2,}\.[a-zA-Z]{2,4}$!";

// On assigne et protége nos variables
$essai=$_post['essai'];
$votremail=$_POST["votremail"];
$from=htmlentities("From: ".$votremail);
$message=stripslashes(htmlentities($_POST["message"]));
$message .=$essais;<======La je crois que j'ai fait une erreur.

// On met ici notre email
$destinataire="kdgvalentin_AT_wanadoo.fr";

/* On place le sujet du message qui ici sera toujours le même
puisque dans la partie Html on l'a mis en caché grace au type="hidden";) avec comme valeur "Message site abracadabroc" */
$objet=$_POST['objet'];

// C'est bon on est OK, vérifions si l'email est valide, grâce à notre sympathique REGEX
if(!preg_match($verif,$votremail))
{
echo "Voter email n'est pas valide";
}

// On verifie si il y a un message
elseif (trim($message)=="")
{
echo "Y'en a marre des messages vide !";
}

// Si tout est OK on envoie l'email
else
{
mail($destinataire,$objet,$message,$from);
echo "Message envoyé au webmaster";
}

?>
steph13
CITATION(leditvalentin @ samedi 04 février 2006, 12h18)
bon alors m'on code sa donne sa:
CODE
<?php
// La variable $verif, va nous permettre d'analyser si la sémantique de l'email est bonne
$verif="!^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]{2,}\.[a-zA-Z]{2,4}$!";

// On assigne et protége nos variables
$essai=$_post['essai'];
$votremail=$_POST["votremail"];
$from=htmlentities("From: ".$votremail);
$message=stripslashes(htmlentities($_POST["message"]));
$message .=$_POST['essai'];<======ca ira mieux comme ca je pense.

// On met ici notre email
$destinataire="kdgvalentin_AT_wanadoo.fr";

/* On place le sujet du message qui ici sera toujours le même
puisque dans la partie Html on l'a mis en caché grace au type="hidden";) avec comme valeur "Message site abracadabroc"  */
$objet=$_POST['objet'];

// C'est bon on est OK, vérifions si l'email est valide, grâce à notre sympathique REGEX
if(!preg_match($verif,$votremail))
{
        echo "Voter email n'est pas valide";
}

// On verifie si il y a un message
elseif (trim($message)=="")
{
        echo "Y'en a marre des messages vide !";
}

// Si tout est OK on envoie l'email
else
{
        mail($destinataire,$objet,$message,$from);
        echo "Message envoyé au webmaster";
}

?>

*


Pense bien à recupérer les variables !!

$mavariable=$_POST['nom-de-linput']; par exemple wink.gif
Jeff2b
oui ta fais une erreur car ta variable s'appelle $essai et plus bas tu mets $essais

si dans ton formulaire tu met <input ..... name="essai">

tu recupere avec $_POST['essai']; et pas ['essais']
leditvalentin
oups
ya un problème
Parse error: syntax error, unexpected T_IS_SMALLER_OR_EQUAL in /home/ftp/leditvalentin/public_html/mail.php on line 10
EDIT: je suis un guignol j'avais oublier d'enlever la phrase sa ira mieux comme sa quand j'ai copierle code modifier!!!! blush.gif blush.gif
Jeff2b
ta fais des essais en local ? ou directement sur ton site ?
steph13
Si tu pouvais copier le code complet de la page en question aussi,ca serait pas mal wink.gif
leditvalentin
alors je viens de faire un essai sur mon site.
Première bonne nouvelle sa marche!!!!!! Merci
Mais petite question ma valeur se met à la suite du message. il y a moyen de mettre une mise en forme du texte??
Jeff2b
oui tu peux en rajoutant du code html
leditvalentin
pourtantn c'est ce que j'ai fait, il y a deux sauts de ligne (<br>) entre le text area et le checkbox.
Bon je dois y aller merci beaucoup pour votre aide je vais essayer de continuer tout seul.
Jeff2b
c'es dans ta variable $message que tu dois inserer le code de mise en forme pas dans ton fichier du formulaire.
leditvalentin
CITATION(Jeff2b @ samedi 04 février 2006, 12h39)
c'es dans ta variable $message que tu dois inserer le code de mise en forme pas dans ton fichier du formulaire.
*


Heu oui mais dans mon fichier php la mise en page du texte je la fais en html??? Parce que j'ai essayer de mettre des sauts e ligne ( <br> ) mais sa ne marche pas sa crée une erreur.
Pouvez vous m'expliquez comment mettre en page dans le fichier php. Merci


EDIT: je m'explique un peu mieux en faite je voudrais que lorsque je recoi le mail toutes les valeurs des checkbox + du message ne se mette pas bout à bout.
Qu'il y est des espaces.
Voilà je pense que c'est plus clair
NorSeb
Bonjour,

Lorsque tu construit un message d'un à partir de certaines valeurs de formulaire, tu as deux choix : soit tu va faire partir ton mail en html soit en texte.

Par défaut, ca envoie un fichier texte.

Imaginons que tu envoi un nom, un prenom et un message d'une textarea.

Tu vas construire ton message en mettant un '\n' pour aller à la ligne. Ca peut donc donner :
CODE
$message = "Prénom : ".$_POST['prenom']."\n";
$message .= "Nom : ".$_POST['nom']."\n\n"; // Ici je saute 2 lignes
$message .= $_POST['texte'];


Je me permet tout de même une remarque : tu mets la charrue avant les boeufs. Il te faut acquérir certaines bases solides en html, puis en php pour pouvoir attaquer un tel script sereinement wink.gif
Je te conseille le http://www.siteduzero.com/, qui est excellent pour les débutants.
leditvalentin
Mais j'ai déjà fait tout mon site web avec le bloc note donc pour le html c'est bon!!!! wink.gif
Pour le php j'ai des bases je pense suffisante pour l'application que je veux faire.
Enfin je veux dire par là que pour le petit mail que je veux fairez je pense que sa sera suffisant!!! smile.gif
D'après ce que j'ai pu voir le saut de ligne se traduit par :
"\n"
Ou pourrais je trouver une liste de toute les fonctions pour mettre en page avec leurs équivalent.
Je m'explique si je veux faire un saut de ligne c'est:
"\n"
Si je veux mettre en gras c'est?????

Merci de votre aide rolleyes.gif

EDIT:
J'ai oublié de vous demander. Comment faire pour qu'il me prenne une valeur avant une autre.
Avec ce que j'ai fait pour l'instant j'ai un textarea et un checkbox et malgrés que dans mon fichier php je mette la variable checkbox en premier, dans le message que je recoi sa me le met après le textarea.??? IMSTP6.gif

EDIT: J'ai encore une question!!!! blush.gif
JE voudrais savoir comment faire pour que suivant la valeur sélectionnez dans un select sa m'ouvre un autre select? Je crois savoir que c'est possible en javascript mais en php sa doit l'être aussi. Merci encore pour votre aide
NorSeb
CITATION(leditvalentin @ vendredi 24 février 2006, 10h01)
Si je veux mettre en gras c'est?????

Tu ne peux pas... Un texte "brut" ne se met pas en forme.


CITATION(leditvalentin @ vendredi 24 février 2006, 10h01)
EDIT:
J'ai oublié de vous demander. Comment faire pour qu'il me prenne une valeur avant une autre.
Avec ce que j'ai fait pour l'instant j'ai un textarea et un checkbox et malgrés que dans mon fichier php je mette la variable checkbox en premier, dans le message que je recoi sa me le met après le textarea.??? IMSTP6.gif

Tu peux mettre le bout de code équivalent stp ?

CITATION(leditvalentin @ vendredi 24 février 2006, 10h01)
EDIT: J'ai encore une question!!!! blush.gif
JE voudrais savoir comment faire pour que suivant la valeur sélectionnez dans un select sa m'ouvre un autre select? Je crois savoir que c'est possible en javascript mais en php sa doit l'être aussi. Merci encore pour votre aide
*

C'est faisable en php et en javascript. En php, tu es obligé de recharger ta page et construire le 2ème select dynamiquement (en fonction de la valeur du premier)
leditvalentin
je dois partir je poste ce soir avec le code pour bien vous montrer. Merci biggrin.gif
leditvalentin
Voici le bout de code équivalent:

CODE
$essai=$_post['essai'];
$votremail=$_POST["votremail"];
$from=htmlentities("From: ".$votremail);
$message=stripslashes(htmlentities($_POST["message"]))."\n";
$message .=$_POST['objet1']."\n";
$message .=$_POST['objet2']."\n";
$message .=$_POST['objet3']."\n";


Pour ce qui est du php sa marche comment le select dynamique??


EDIT:
Bonjour
J'ai un formulaire avec vérification des données.
Pour vérifier si le text area est bien remplit j'utilise sa:
// On verifie si il y a un message
elseif (trim($message)=="")

mais je voudrais vérifier pour un radio et je ne c'est pas comment faire.

voici le code php complet(sans la partie avec mon email):

CODE
<?php
// La variable $verif, va nous permettre d'analyser si la sémantique de l'email est bonne
$verif="!^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]{2,}\.[a-zA-Z]{2,4}$!";

// On assigne et protége nos variables
$essai=$_post['essai'];
$votremail=$_POST["votremail"];
$from=htmlentities("From: ".$votremail);
$message=stripslashes(htmlentities($_POST["message"]))."\n";<==== celle là est déjà vérifiée (voir plus bas)
$message .=$_POST['objet1']."\n";<======je voudrais vérifier ces valeurs
$message .=$_POST['objet2']."\n";<======je voudrais vérifier ces valeurs
$message .=$_POST['objet3']."\n";<======je voudrais vérifier ces valeurs


// C'est bon on est OK, vérifions si l'email est valide, grâce à notre sympathique REGEX
if(!preg_match($verif,$votremail))
{
echo "Voter email n'est pas valide";
}

// On verifie si il y a un message
elseif (trim($message)=="")<=== ici je vérifie les valeurs du message
{
echo "Y'en a marre des messages vide !";
}


// Si tout est OK on envoie l'email
else
{
mail($destinataire,$objet,$message,$from);
echo "Message envoyé au webmaster<br><br>Pour revenir au site <a href=http://abracadabroc.freeheberge.com> cliquez ici </a>";
}

?>
NorSeb
Je suppose que les $_POST['objet1'] sont les valeurs des checkbox ?
Pour moi elles sont après le message. Tout est donc normal smile.gif
leditvalentin
CITATION(NorSeb @ vendredi 24 février 2006, 17h17)
Je suppose que les $_POST['objet1'] sont les valeurs des checkbox ?
Pour moi elles sont après le message. Tout est donc normal smile.gif
*

Oui je les est remis parce que j'y arrivais pas!!! smile.gif
Mais vous pouvez essayer de modifier vous verrez que sa marche pas!!! Ou alors sa marche mais je suis mauvais!!! blush.gif blush.gif Y' a peut etre de sa!!! whistling.gif
NorSeb
Je persiste et signe : il te faut reprendre les bases du php. Ton post comporte au moins 3 questions distinctes. :o

Si tu fais :
CITATION
$message =$_POST['objet1']."\n";
$message .=$_POST['objet2']."\n";
$message .=$_POST['objet3']."\n";
$message .=stripslashes(htmlentities($_POST["message"]))."\n";

Je ne vois pas bien comment les valeurs $_POST['objet1'] pourraient se retrouver après le message.

Pour vérfier un bouton radio, il suffit de faire un "if" comme tu l'a fait pour le message. Sauf que lui peut avoir une valeur par défaut.
Pour une checkbox, si elle n'est pas cochée, tu n'aura pas de valeur envoyée. Il suffit donc de tester son existence (fonction isset(), je te laisse le soin de la trouver dans le manuel : http://fr.php.net)

Pour construire un select de façon dynamique il faut s'accrocher un peu, comprendre ce que l'on écrit et avoir quelques bases. (je sais, je radote)
Tout dépend de ce que tu veux faire exactement. Quelle est la finalité de ce script ?

Tu veux afficher les modèles de voitures en fonction de la marque ?
Si c'est le cas, ton script doit avoir l'architecture suivante :

Admettetons que l'internaute à choisi une marque grace à un select dans un formulaire. A la validation tu recharges la page. Cela lui envoi une information : l'identifiant de la marque choisie.
Il ne te reste plus qu'a lancer une requete dans ta base de données, qui va chercher tous les modèle selon l'id donné (au hasard : $_POST['id_marque'])
Ensuite tu parcours (une boucle) les résultats de ta requète en faisant un
CODE
echo "<option value=".$id_modele.">".$modele."</option>";

Et là... c'est la fète IMSTP2.gif
captain_torche
C'est pour ça qu'on te conseille d'apprendre apprendre les principes de base de PHP.
Sans ça, tu viendras constamment nous poser des questions, sans forcément comprendre les réponses.

Sinon, techniquement, il n'est pas nécessaire de vérifier si un radio a été coché, si tu prends le soin d'en spécifier un 'coché par défaut'.
HTML
<input type="radio" name="test" value="1" checked="checked" />
<input type="radio" name="test" value="2" />


Pour le checkbox, c'est simple : s'il est coché, il est passé à la page de traitement, et tu récupères sa valeur.
S'il n'est pas coché, tu ne le récupères pas dans la page de traitement.

Pour ce qui est du traitement de ton message, c'est tout simple :
CODE

<?php
$message = $_POST['message']; <== en faisant ça, tu REMPLACES la valeur existante de $message, par $_POST['message']
$message .= $_POST['checkbox']; <== en faisant ça (note bien le point devant le signe égal), tu ajoutes la valeur de ton checkbox, à la fin du contenu actuel de $message
?>

Pour mettre les checkbox avant le message, il faudra donc procéder dans le sens inverse, à savoir :
CODE
<?php
$message = $_POST['checkbox'];
$message .= '\n\n';
$message .= $_POST['message'];
?>
leditvalentin
bon je refais un poste avec toutes mes questions!!!!! histoire d'avoir les choses au clair:


Je voudrais mettre les checkbox avant mon message:

CODE
$essai=$_post['essai'];
$votremail=$_POST["votremail"];
$from=htmlentities("From: ".$votremail);
$message=stripslashes(htmlentities($_POST["message"]))."\n";
$message .=$_POST['objet1']."\n";
$message .=$_POST['objet2']."\n";
$message .=$_POST['objet3']."\n";


je voudrais vérifier mes checkbox mais je ne c'est pas comment faire:

CODE
<?php
// La variable $verif, va nous permettre d'analyser si la sémantique de l'email est bonne
$verif="!^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]{2,}\.[a-zA-Z]{2,4}$!";

// On assigne et protége nos variables
$essai=$_post['essai'];
$votremail=$_POST["votremail"];
$from=htmlentities("From: ".$votremail);
$message=stripslashes(htmlentities($_POST["message"]))."\n";<==== celle là est déjà vérifiée (voir plus bas)
$message .=$_POST['objet1']."\n";<======je voudrais vérifier ces valeurs
$message .=$_POST['objet2']."\n";<======je voudrais vérifier ces valeurs
$message .=$_POST['objet3']."\n";<======je voudrais vérifier ces valeurs


// C'est bon on est OK, vérifions si l'email est valide, grâce à notre sympathique REGEX
if(!preg_match($verif,$votremail))
{
echo "Voter email n'est pas valide";
}

// On verifie si il y a un message
elseif (trim($message)=="")<=== ici je vérifie les valeurs du message
{
echo "Y'en a marre des messages vide !";
}


// Si tout est OK on envoie l'email
else
{
mail($destinataire,$objet,$message,$from);
echo "Message envoyé au webmaster<br><br>Pour revenir au site <a href=http://abracadabroc.freeheberge.com> cliquez ici </a>";
}

?>


Je voudrais savoir comment faire pour que suivant la valeur sélectionnez dans un select sa m'ouvre un autre select? on ma dit qu'il fallait recharger la page et construire le 2ème select dynamiquement (en fonction de la valeur du premier utiliser) mais comment on fait?
NorSeb
Pour commencer arrète d'envoyer (ou d'éditer) des messages avant qu'un seul d'entre nous n'ait commencé à reflechir à un embryon de réponse !
leditvalentin
CITATION(NorSeb @ vendredi 24 février 2006, 17h41)
Pour commencer arrète d'envoyer (ou d'éditer) des messages avant qu'un seul d'entre nous n'ait commencé à reflechir à un embryon de réponse !
*

oui désolé mais le temps que j'édite vous m'avez répondu!! désolé blush.gif blush.gif
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.