Erreur dans mon formulaire PHP

Alex2011
Invité n'ayant pas de compte PHPfrance

27 avr. 2011, 23:56

Salut tout le monde,
voilà quelques heures que j'essai de trouver une solution à mon problème... Une erreur dans mon formulaire de contact en php visiblement :?
Lorsque je valide mon formulaire, un message apparaît :

Parse error: syntax error, unexpected T_STRING in /var/www/.........../.../.../traitement_formulaire1.php on line 18

Peut être il y a quelqu'un qui pourrait m'aider ...
Merci.
Voila ce formulaire1.php suivi de son formulaire de contact en html

traitement_formulaire1.php
------------------------------------------------------------------------------------
<?php
/*
********************************************************************************************
CONFIGURATION
********************************************************************************************
*/
// destinataire est votre adresse mail. Pour envoyer à plusieurs à la fois, séparez-les par une virgule
$destinataire = '[email protected]';

// copie ? (envoie une copie au visiteur)
$copie = 'oui'; // 'oui' ou 'non'

// Messages de confirmation du mail
$message_envoye = "Votre demande nous est bien parvenue !";
$message_non_envoye = "L'envoi de la demande a échoué, veuillez réessayer SVP.";

// Messages d'erreur du formulaire
$message_erreur_formulaire = "Vous devez d'abord <a href=http://www..........html">envoyer le formulaire</a>.";
$message_formulaire_invalide = "Vérifiez que tous les champs soient bien remplis et que l'email soit sans erreur.";

/*
********************************************************************************************
FIN DE LA CONFIGURATION
********************************************************************************************
*/

// on teste si le formulaire a été soumis
if (!isset($_POST['envoi']))
{
// formulaire non envoyé
echo '<p>'.$message_erreur_formulaire.'</p>'."\n";
}
else
{
/*
* cette fonction sert à nettoyer et enregistrer un texte
*/
function Rec($text)
{
$text = trim($text); // delete white spaces after & before text
if (1 === get_magic_quotes_gpc())
{
$stripslashes = create_function('$txt', 'return stripslashes($txt);');
}
else
{
$stripslashes = create_function('$txt', 'return $txt;');
}

// magic quotes ?
$text = $stripslashes($text);
$text = htmlspecialchars($text, ENT_QUOTES); // converts to string with " and ' as well
$text = nl2br($text);
return $text;
};

/*
* Cette fonction sert à vérifier la syntaxe d'un email
*/
function IsEmail($email)
{
$pattern = "^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,7}$";
return (eregi($pattern,$email)) ? true : false;
};

// formulaire envoyé, on récupère tous les champs.
$nom = (isset($_POST['nom'])) ? Rec($_POST['nom']) : '';
$prenom = (isset($_POST['prenom'])) ? Rec($_POST['prenom']) : '';
$email = (isset($_POST['email'])) ? Rec($_POST['email']) : '';
$tel = (isset($_POST['tel'])) ? Rec($_POST['tel']) : '';
$adresse = (isset($_POST['adresse'])) ? Rec($_POST['adresse']) : '';
$cp = (isset($_POST['cp'])) ? Rec($_POST['cp']) : '';
$ville = (isset($_POST['ville'])) ? Rec($_POST['ville']) : '';
$objet = (isset($_POST['objet'])) ? Rec($_POST['objet']) : '';


// On va vérifier les variables et l'email ...
$email = (IsEmail($email)) ? $email : ''; // soit l'email est vide si erroné, soit il vaut l'email entré

if (($nom != '') && ($prenom != '')&& ($email != '')&& ($tel != '')&& ($adresse != '')&& ($cp != '')&& ($ville != '') && ($objet != ''))
{
// les 4 variables sont remplies, on génère puis envoie le mail
$headers = 'From: '.$nom.' <'.$email.'>' . "\r\n";

// envoyer une copie au visiteur ?
if ($copie == 'oui')
{
$cible = $destinataire.','.$email;
}
else
{
$cible = $destinataire;
};

// Remplacement de certains caractères spéciaux
$message = str_replace("'","'",$message);
$message = str_replace("&#8217;","'",$message);
$message = str_replace(""",'"',$message);
$message = str_replace('<br>','',$message);
$message = str_replace('<br />','',$message);
$message = str_replace("<","<",$message);
$message = str_replace(">",">",$message);
$message = str_replace("&","&",$message);

// Envoi du mail
if (mail($cible, $objet, $message, $headers))
{
echo '<p>'.$message_envoye.'</p>'."\n";
}
else
{
echo '<p>'.$message_non_envoye.'</p>'."\n";
};
}
else
{
// une des 6 variables (ou plus) est vide ...
echo '<p>'.$message_formulaire_invalide.' <a href="http://www..............html">Retour au formulaire</a></p>'."\n";
};
}; // fin du if (!isset($_POST['envoi']))
?>

<a href="http://www...........html">Passer à l'Etape 2</a>




contact.html
------------------------------------------------------------------------------------

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >

<head>
<meta http-equiv="Content-Type" content="text/html;" />
<title>oi</title>
<style type="text/css">

input [type="submit"] {width: auto;}
textarea {padding: 8px;}

<script>
function validateCheckBox(){
if (document.getElementById('acceptConditions').checked==false)
//la case n'est pas cochée !
{
alert("Merci de cocher la case si vous acceptez les conditions !" );
}
else
//la case est cochée
{
window.location.href = "http.www;;;;.html";
}
}
</script>
</head>

<body>
<div class="container">
<form id="contact" method="post" action="traitement_formulaire1.php">

<fieldset><legend><FONT COLOR="#FFFFFF">Adresse de livraison</FONT></legend>
<p align="right"><label for="nom">Nom :&nbsp;</label><input type="text" size="20" id="nom" name="nom" tabindex="1" /></p>
<p align="right"><label for="prenom">Prénom :&nbsp;</label><input type="text" size="20" id="prenom" name="prenom" tabindex="2" /></p>
<p align="right"><label for="email">Email :&nbsp;</label><input type="text" size="20" id="email" name="email" tabindex="3" /></p>
<p align="right"><label for="tel">Tél. :&nbsp;</label><input type="text" size="20" id="tel" name="tel" tabindex="4" /></p>
<p align="right"><label for="adresse">Adresse :&nbsp;</label><input type="text" size="20" id="adresse" name="adresse" tabindex="5" /></p>
<p align="right"><label for="cp">Code Postal :&nbsp;</label><input type="text" size="5" id="cp" name="cp" tabindex="6" /></p>
<p align="right"><label for="ville">Ville :&nbsp;</label><input type="text" size="20" id="ville" name="ville" tabindex="7" /></p>
</fieldset>

<fieldset><legend><FONT COLOR="#FFFFFF">Votre commande :</FONT></legend>
<p><label for="objet">Votre marque et modèle de véhicule :</label><input type="text" size="30" id="objet" name="objet" tabindex="3" /></p>

<div style="text-align:center;">J'accepte les conditions générales :
<input type="checkbox" name="acceptConditions" id="acceptConditions" />
<input name="submit" type="submit" id="submit" name="envoi" value="Passer à l'Etape 2" onclick="validateCheckBox();" /></div>

</fieldset>
</form>

<!-- end .container --></div>

</body>
</html>

Eléphant du PHP | 241 Messages

28 avr. 2011, 00:19

Salut,
php te montre une erreur ligne 18, c'est qu'il doit y avoir une erreur sur cette ligne :mrgreen:
Et tient bizarre, c'est le cas ^^ (bon après il peut y en avoir sur d'autres ligne aussi !!)

C'est un problème de guillemets
//Tu as ceci
$message_erreur_formulaire = "Vous devez d'abord <a href=http://www..........html">envoyer le formulaire</a>";

//Et il faut corriger comme cela
$message_erreur_formulaire = 'Vous devez d\'abord <a href="http://www..........html">envoyer le formulaire</a>';

Alex2011
Invité n'ayant pas de compte PHPfrance

28 avr. 2011, 09:19

Merci misterflo pour ta reponse !
Mon formulaire ne fonctionne toujours pas, mais au moins je n'ai plus d'erreur à la ligne 18.

Je ne comprends pas pourquoi lors de l'envoi du formulaire j'ai toujours le même message :

Vous devez d'abord envoyer le formulaire. La fameuse ligne 18 => $message_erreur_formulaire = 'Vous devez d\'abord <a href="http://www..........html">envoyer le formulaire</a>';

Alors que le formulaire a bien été rempli et la case (conditions générales) coché.

Je ne sais plus où chercher l'erreur :cry:

Si qqun peut m'aider, merci.

ViPHP
ViPHP | 2577 Messages

28 avr. 2011, 09:34

Bonjour,

<input name="submit" type="submit" id="submit" name="envoi" value="Passer à l'Etape 2" onclick="validateCheckBox();"

Alex2011
Invité n'ayant pas de compte PHPfrance

28 avr. 2011, 11:04

Bonjour,

<input name="submit" type="submit" id="submit" name="envoi" value="Passer à l'Etape 2" onclick="validateCheckBox();"

Merci pour la réponse, mais ça ne fait rien, malheureusement.

Toujours le même probleme : Dès la validation du formulaire (code en html ci-dessus), le message apparaît Vous devez d'abord envoyer le formulaire.

Mon formulaire est faux !!!

En fait pour réaliser ce formulaire j'ai un peu bidouillé. :oops: J'ai pris un formulaire trouvé sur http://www.php-astux.info/script-formulaire-contact.php et j'y ajouté plus de parametres (nom, prenom, adresse, cp, ville etc) + j'ai ajouté dans mon html un code "case à cocher" :

<script>
function validateCheckBox(){
if (document.getElementById('acceptConditions').checked==false)
//la case n'est pas cochée !
{
alert("Merci de cocher la case si vous acceptez les conditions !" );
}
else
//la case est cochée
{
window.location.href = "lienVersLaPage d'inscription.html";
}
}
</script>
<body>
Je coche la case ci-dessous si je suis d'accord avec les trucs écrits ci-dessus :
<input type="checkbox" name="acceptConditions" id="acceptConditions" />
<input type="button" name="submit" id="submit" onclick="validateCheckBox();"
</body>

Voilà ce que j'ai fais, mais lorsque je valide mon formulaire ça ne marche pas.
Je voudrais vraiment que mon formulaire fonctionne. Peut être quelqu’un pourrait me conseiller :idea:
GRAND MERCI DANS TOUS LES CAS !!!

ViPHP
ViPHP | 2577 Messages

28 avr. 2011, 11:23

Bonjour,

Je ne suis pas très bon en html et javascript mais "window.location.href = "lienVersLaPage d'inscription.html" correspond à un changement de page, pas à l'envoi du formulaire.

Il me semble qu'il faut utiliser submit() ou retourner une valeur false ou true dans ton javascript pour bloquer ou non le submit().

Je te laisse chercher la syntaxe exacte.

Alex2011
Invité n'ayant pas de compte PHPfrance

28 avr. 2011, 11:48

Bonjour,

Je ne suis pas très bon en html et javascript mais "window.location.href = "lienVersLaPage d'inscription.html" correspond à un changement de page, pas à l'envoi du formulaire.

Il me semble qu'il faut utiliser submit() ou retourner une valeur false ou true dans ton javascript pour bloquer ou non le submit().

Je te laisse chercher la syntaxe exacte.
Grand merci, je sens que je m'approche du but. Pour l'instant ça ne marche pas (normal, je n'ai pas encore trouvé comment faire submit à la place du lien), mais ça viendra... j'espère.

Par contre, lorsque je valide mon formulaire, je passe quandmeme à la page traitement.php.
L'erreur vient du html ("window.location.href = "lienVersLaPage d'inscription.html") ou du traitement.php(une valeur false ou true dans ton javascript pour bloquer ou non le submit)

ViPHP
ViPHP | 2577 Messages

28 avr. 2011, 11:56

Bonjour,

Apparemment un truc comme ca :
<form name="xxx" method="post" action="xxx" onSubmit=" return validateCheckBox()">
validateCheckBox doit retourner true ou false

Alex2011
Invité n'ayant pas de compte PHPfrance

28 avr. 2011, 12:31

Bonjour,

Apparemment un truc comme ca :
<form name="xxx" method="post" action="xxx" onSubmit=" return validateCheckBox()">
validateCheckBox doit retourner true ou false
Le fait que je retourne dans le traitement.php sur le message : Vous devez d'abord envoyer le formulaire. Ca signifie qu'il y une erreur dans php ?

ViPHP
ViPHP | 2577 Messages

28 avr. 2011, 13:38

print_r($_POST) en début de script pour voir ce que contient $_POST.

Mammouth du PHP | 672 Messages

28 avr. 2011, 14:02

Pour ce genre de chose, ce que je ferais :
1. Penser aux gens chez qui le JavaScript est désactivé.
En clair, comence par construire un formulaire "normal", qui envoit sur ta page de traitement, qui elle va se charger de faire les vérifications.

2. Au niveau du JS, comme dit Mazarini la fonction que tu appelles par le onsubmit doit retourner False s'il y a une erreur.
Le principe du JS : onSubmit => action à effectuer au moment où on valide le formulaire. La "vraie" validation ne se fait pas si le JS renvoie False.

3. Ne pas utiliser window.location.href, qui redirige vers une page avant de valider le formulaire !
En pratique, avec ton script (celui de base), quand on valide le formulaire on appelle le JS.
Le JS vérifie que la case est cochée, et SI elle est cochée redirige vers le lien indiqué.
Changement de page => le formulaire n'est pas envoyé.

Au final, un JS basique (il n'y a pas de balise JS ? ) :
function validateCheckBox(){
	var conditions = document.getElementById('acceptConditions').checked;
	if (conditions==false) {
		alert("Merci de cocher la case si vous acceptez les conditions !" );
	}
	return conditions;
}
Le bouton :
<input name="submit" type="submit" id="submit" name="envoi" value="Passer à l'Etape 2" onclick="return validateCheckBox();" />
Si la case n'est pas cochée, le JS renvoie FALSE et le submit est annulé...

Alex2011
Invité n'ayant pas de compte PHPfrance

28 avr. 2011, 15:12

Merci beaucoup pour votre aide.
Mon formulaire ne fonctionne pas pour l'instant, mais ça va venir par la suite.
Je vais prendre un formulaire plus simple (à 4 variables et sans case à cocher) pour commencer.

Encore une fois merci à tous !!!

ViPHP
ViPHP | 2577 Messages

28 avr. 2011, 15:40

C'est plutôt sans javascript car le nombre de variables n'a pas trop d'importance.

Alex2011
Invité n'ayant pas de compte PHPfrance

28 avr. 2011, 17:07

Merci cordialement, à tous
je vais pour l'instant utiliser mon petit formulaire trouvé sur : http://www.php-astux.info/script-formulaire-contact.php à 4 variables qui marche bien, tant qu'on y ajoute rien.

mais si quelqu’un à tout hasard pourrait me dire comment intégrer le code suivant trouvé sur : http://forum.hardware.fr/hfr/Programmat ... 4063_1.htm

Ça m'aiderait beaucoup.
En fait je voulais faire une chose simple (je le croyais), modifier le formulaire simple à 4 variables en formulaire à 8 variables (+tél,adresse,etc) plus ajouter une case à coché obligatoire. Et si seulement la case était cochée, le formulaire serait envoyé dans ma boite à mail.

Ça peut paraître simple pour certains, mais pas évident pour moi, malgré qu'on trouve plein d'explications de partout, plein de tuto, plein de différents formulaires en les mélangeant rien ne fonctionne.

Voila 2 jours que je recherche, en vain. Mais bon j'ai au moins un ptit formulaire qui marche en attendant...

Merci beaucoup pour votre aide

Mammouth du PHP | 672 Messages

28 avr. 2011, 17:37

Tu as lu le sujet du forum hardware ?
je voudrais créer un page d'accueil avec toutes les règles du site 'sur cette page' puis à la fin une case qu'il faut cocher et un bouton 'j'accepte les conditions' qui ramène à la page d'inscription 'si la personne à coché la case'
Toi, tu veux :
modifier le formulaire simple à 4 variables en formulaire à 8 variables (+tél,adresse,etc) plus ajouter une case à coché obligatoire. Et si seulement la case était cochée, le formulaire serait envoyé dans ma boite à mail.
Pour moi c'est deux choses qui n'ont rien à voir (il n'est pas question de formulaire dans le message sur hardware.fr) !!!


A priori, ton formulaire renvoie vers une page de traitement, traitement_formulaire1.php.
Pour rajouter des champs à ton formulaire, il faut prévoir de les contrôler et traiter dans cette page.
Pour rajouter une case à cocher, c'est pareil.
Tout ça, c'est du PHP (et du HTML pour afficher les champs dans le formulaire :roll: ).

Maintenant, si tu veux que le formulaire ne soit envoyé que si la case est coché, il faut du javascript dans le formulaire pour bloquer l'action au niveau du navigateur (en gardant à l'esprit qu'il est toujours possible de contourner ce qui se passe côté navigateur).
Si tu veux pouvoir bloquer l'envoi du formulaire, il faut agir au niveau de l'évènement onSubmit. Et pour ça, le script que je t'ai donné a l'air de fonctionner...