Formulaire - Problème avec le champ textarea

Résolu
Shakadelavierge Messages postés 2687 Date d'inscription   Statut Contributeur Dernière intervention   -  
faboons Messages postés 275 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,


J'ai un problème qui me fait m'arracher les cheveux depuis hier. Cela concerne un formulaire avec des vérifications en jscript et php.



Tout d'abord voici le code html:



<form name="message" action="submit.php" method="post" id="formulaire">

<div class="champsaisie">

        <div class="champ">
            <div class="label">
                <label for="name">Nom du contact</label>
            </div>
            
            <div class="field">
                <input type="text" name="name" id="name" />
            </div>
        </div>
        
        <div class="champ">
            <div class="label">
                <label for="email">eMail</label>
            </div>
            
            <div class="field">
                <input type="text" name="email" id="email" />
            </div>
        </div>
        
        <div class="champ">
            <div class="label">
                <label for="tel">Téléphone</label>
            </div>
            
            <div class="field">
                <input type="text" name="tel" id="tel" />
            </div>
        </div>
        
        <div class="champ">
            <div class="label">
                <label for="message"><br/>Description<br/>de votre projet</label>
            </div>
            
<textarea name="message" id="message" style="background-image:url(img/box_bg2.png); font-family:Britannic Bold,Century Gothic,Myriad Pro,Arial,Helvetica,sans-serif; color:#666666; font-size:16px; padding:4px 5px; width:350px; height:100px;" />
</textarea>
</div>
</div>

<div class="bouton">
<input type="submit" name="submit" id="submit" value="Envoyer" />
    </div> 

</form>




Le fichier php appellé, "submit.php se présente sous la forme suivante:


$sender_name = $_POST[name];
$sender_email = $_POST[email];
$telephone = $_POST[tel];
$contenu = $_POST[message];

$msg = "Nom du contact:\t$sender_name\n";
$msg .= "E-Mail du contact:\t$sender_email\n";
$msg .= "Message:\t$contenu\n\n";
$msg .= "Téléphone:\t$telephone\n\n";

$desti = "monmail@monmail.fr";
$sujet = "Titre du message";


[...]


et plus loin la commande pour envoyer le mail:

mail($desti, $sujet, $msg);






Les contrôles php sont de la forme suivante:



$errors = array();

if(!$_POST['name'] || strlen($_POST['name'])<3 || strlen($_POST['name'])>50)
{
	$errors['name']='Veuillez renseigner un nom valide. (Plus de 3 caractères)';
}

[...]



par exemple pour le nom à renseigner






Mon problème est que le champ textarea n'est pas pris en compte visiblement par la méthode POST: si je change le champ <textarea name="message" [...] ></textarea> en champ de texte classique du style <input type="text" name="message" [...] >, tout se passe à merveille et le mail est envoyé.

Dès lors que je modifie celà avec un champ textarea, le champ de texte n'est pas pris en compte et le mail ne parvient pas à l'adresse de destination.


Je n'ai peut être pas été assez clair, mais je ne coprend vraiment pas pourquoi le champ textarea n'est pas pris en compte alors que son nom est le bon.


Merci d'avance pour votre aide.





1 réponse

le_joker_fou Messages postés 765 Date d'inscription   Statut Membre Dernière intervention   239
 
Salut voila ta baise d'ouverture du textaree

<textarea name="message" id="message" style="background-image:url(img/box_bg2.png); font-family:Britannic Bold,Century Gothic,Myriad Pro,Arial,Helvetica,sans-serif; color:#666666; font-size:16px; padding:4px 5px; width:350px; height:100px;" />


Elle se termine par "/>" ce qui signifie que tu fermes la balise (en gros). Supprime le "/" et essai.
3
Shakadelavierge Messages postés 2687 Date d'inscription   Statut Contributeur Dernière intervention   136
 
Salut, merci pour ta réponse.

Malheureusement cela ne marche toujours pas.

Cela ne change rien, très étrange.
0
faboons Messages postés 275 Date d'inscription   Statut Membre Dernière intervention   50
 
Salut,

Dans ta page submit.php est-ce que tu as fait un simple
echo $_POST[message];
pour voir ce que la page récupère ?
0
faboons Messages postés 275 Date d'inscription   Statut Membre Dernière intervention   50
 
En outre, j'ai copié/collé les balises form et textarea sur unepage et j'ai créé une page submit qui fait un echo de la variable et ... ça marche !

Donc, pour moi ça vient sûrement des contrôles php.
Tu les mets en commentaires et si ça marche il faut chercher l'erreur dedans.

@ pluche.
Fab.
0
Shakadelavierge Messages postés 2687 Date d'inscription   Statut Contributeur Dernière intervention   136
 
Voilà le script php en entier:


<?php

error_reporting(E_ALL^E_NOTICE);


$redirectURL = 'www.monsite.fr';

$sender_name = $_POST[name];
$sender_email = $_POST[email];
$telephone = $_POST[tel];
$contenu = $_POST[message];

$msg = "Nom du contact:\t$sender_name\n";
$msg .= "E-Mail du contact:\t$sender_email\n";
$msg .= "Message:\t$contenu\n\n";
$msg .= "Téléphone:\t$telephone\n\n";

$desti = "mail@mail.fr";
$sujet = "formulaire";



$errors = array();


if(!$_POST['name'] || strlen($_POST['name'])<3 || strlen($_POST['name'])>50)
{
	$errors['name']='Erreur';
}

if(!$_POST['email'] || !preg_match("/^[\.A-z0-9_\-\+]+[@][A-z0-9_\-]+([.][A-z0-9_\-]+)+[A-z]{1,4}$/", $_POST['email']))
{
	$errors['email']='Erreur';
}

if(!$_POST['tel'] || !preg_match(''[0-9]{10,12}'', $_POST['tel']))
{
	$errors['tel']='Erreur';
}

if(!$_POST['message'] || strlen($_POST['message'])<20)
{
	$errors['message']='Erreur';
}


if($_POST['fromAjax'])
{
	if(count($errors))
	{
		$errString = array();
		foreach($errors as $k=>$v)
		{

			$errString[]='"'.$k.'":"'.$v.'"';
		}
		

		die	('{"status":0,'.join(',',$errString).'}');
	}
	

mail($desti, $sujet, $msg);

	echo '{"status":1,"redirectURL":"'.$redirectURL.'"}';

	exit;
}


if(count($errors))
{
	echo '<h2>'.join('<br /><br />',$errors).'</h2>';
	exit;
}


header("Location: ".$redirectURL);
?>





Je joins également le script js qui peut également être à l'origine du problème:



$(document).ready(function(){
	
	$('#signupForm').submit(function(e){

		if($('#submit').hasClass('active')) return false;
		
		$('#submit').addClass('active');
		
		$('.errorTip').remove();
		
		$.post($('#signupForm').attr('action'),$('#signupForm').serialize()+'&fromAjax=1',function(response){
			
			if(!response.status)
			{
			
				$('input[type!=submit]').each(function(){
					var elem = $(this);
					var id = elem.attr('id');
					
					if(response[id])
						showTooltip(elem,response[id]);
				});
			}
			else location.replace(response.redirectURL);
			
			{
    document["signupForm"].submit('mail@mail.fr');
}
			
			$('#submit').removeClass('active');
		},'json');
		
		e.preventDefault();
	});

	
	$(window).resize();
});

function showTooltip(elem,txt)
{

	$('<div class="errorTip">').html(txt).appendTo(elem.closest('.formRow'));
}




Merci.
0
faboons Messages postés 275 Date d'inscription   Statut Membre Dernière intervention   50
 
Dis-moi question bête avant de chercher plus loin, tu écris bien des messages de moins de 20 caractères dans le textarea ?
0