Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/01/2011, 18h10   #1
Invité de passage
 
Inscription : décembre 2010
Messages : 8
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 8
Points : 0
Points : 0
Par défaut formulaire guestbook pb syntaxe

Bonjour, je suis débutant en PHP et je cherche à créer un formulaire de livre d'or pour mon site web. Je souhaite que ce formulaire me soit totalement envoyé par mail et qu'il soit publié sur mon site sans l'adresse mail le tout sécurisé! J'ai mixé 2 scripts libre. L'un étant un script de formulaire de livre d'or non protégé et l'autre étant un script d'envoi de mail protégé. Il reste encore quelques problèmes et j'aurais besoin d'aide pour les résoudre.
Sur ma page web j'ai inséré le code suivant qui appelle le fichier "verifform.js" et sans doute "ecrire.inc.html" et qui inclus le fichier "formecrire.inc.php" et le fichier "guestbook.doc"
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
 
<?php session_start(); ?>
<?php // *********************************************************
    // adresse mail à changer
    // *********************************************************
    $MonMail = '**********@gmail.com';
    foreach ($_POST as $key=>$value)
       $$key = htmlentities(stripslashes($value));
    ?>
<script type="text/javascript" src="verifform.js"></script><?php if (!($Envoyer=='Envoyer'))
    {
    srand();
    $_SESSION['operation'] = substr('+-*', rand(0,2),1);
    switch ($_SESSION['operation'])
        {
        case "+":
        $_SESSION['nombre1'] = rand(5,10); $_SESSION['nombre2'] = rand(5,10);
        $_SESSION['resultat'] = $_SESSION['nombre1']+$_SESSION['nombre2'];
        break;
 
        case "-":
        $_SESSION['nombre1'] = rand(5,10); $_SESSION['nombre2'] = rand(1,5); $_SESSION['resultat'] = $_SESSION['nombre1']-$_SESSION['nombre2'];
        break;
 
        case "*":
        $_SESSION['nombre1'] = rand(1,8); $_SESSION['nombre2'] = rand(1,5); $_SESSION['resultat'] = $_SESSION['nombre1']*$_SESSION['nombre2'];
        break;
        }
    include ("formecrire.inc.php");
    }
    else {
		if (!(isset($_SESSION['resultat']))) die ("Bye bye robot");
		if ($calcul != $_SESSION['resultat'])
			die ("Vous n'êtes pas un humain ou vous ne savez pas calculer...");
		if ($nom=="") die ("Vous ne vous êtes pas présenté");
		$envoi = "De: $nom \n";
		$envoi .= "e-mail: $zorglub \n";
		$envoi = "Pays: $pays \n";
		$envoi = "Ville: $ville \n";
		$envoi = "Site: $site \n";
		$envoi .= "$texte \n";
		$ip = $_SERVER['REMOTE_ADDR'];
		$hostname = gethostbyaddr($_SERVER['REMOTE_ADDR']);
 
		$origine = $_SERVER['HTTP_REFERER'];
		$qui = $_POST['user'];
		$date = date("d-m-Y");
		$heure = date("H:i");
		$envoi .= "Depuis $ip $hostname \n $date $heure \npar $origine\n";
 
		$page = file_get_contents ("ecrire.inc.html");
		$page = str_replace ('##NOM##', $nom, $page);
		$page = str_replace ('##MAIL##', $zorglub, $page);
		$page = str_replace ('##PAYS##', $pays, $page);
		$page = str_replace ('##VILLE##', $ville, $page);
		$page = str_replace ('##SITE##', $site, $page);
		$page = str_replace ('##SUJET##', $sujet, $page);
		$page = str_replace ('##TEXTE##', $texte, $page);
		$page = str_replace ('##IP##', $ip, $page);
		$page = str_replace ('##HOST##', $hostname, $page);
 
		mail ($MonMail, $envoi, "From: $nom <$zorglub>");
    }
?><br>
<br>
</div>
<div id="messages">
<?php include("guestbook.doc");?><br>
<br>
<br>
</div>


Voici ensuite le fichier "formecrire.inc.php"
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<p>Veuillez remplir toutes les rubriques marquées <span class="obligatoire">(*)</span>.</p>
<form method="post" action="?php echo $_SERVER['PHP_SELF']; ?>"
 name="form" onsubmit="return(verifForm(this))">
   <table>
<tbody>
<tr> <td><label for="nom">Nom (*) :</label>&nbsp;</td>
    <td><input maxlength="30" size="30" name="nom" id="nom" class="obligatoire"></td></tr>
<tr> <td><label for="pays">Pays :</label>&nbsp;</td>
   <td> <input maxlength="40" size="30" name="pays" id="pays"></td>
<tr> <td><label for="ville">Ville :</label>&nbsp;</td>
   <td> <input maxlength="40" size="30" name="ville" id="ville"></td>
    <tr> <td><label for="email">Email :</label>&nbsp;</td>
   <td> <input maxlength="40" size="30" name="zorglub" id="email"></td>
    <tr> <td><label for="site">Site web :</label>&nbsp;</td>
   <td> <input maxlength="40" size="30" name="site" id="site"></td>
 
   <tr> <td>Message (*) : </td>
    <td><textarea cols="87" rows="10" name="texte" class="obligatoire"></textarea></td></tr>
 
    <tr><td></td><td><p>Pour ennuyer les spammeurs qui utilisent ce formulaire, merci de répondre à la question suivante:<br>
Quel est le résultat du calcul :&nbsp;
 <?php echo $_SESSION['nombre1']." ". $_SESSION['operation']." ".$_SESSION['nombre2']." = ";?>(*) 
    <input maxlength="3" size="3" name="calcul" class="obligatoire"></p>
    <div style="text-align: center;"> 
    <input name="Envoyer" value="Envoyer" type="submit"> 
    <input name="Annuler" value="Annuler" type="reset">
    </div>
</table>
</tbody>
 
</form>

le fichier "veriform.js"
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
function reinitClasses (formulaire)
  {
  var nb = formulaire.length;
  for (var n=0; n < nb; n++)
	with (formulaire.elements[n])
		if (className == "oublie")
			className = "obligatoire"
  }
 
function mailError (champ, classe)
{
if (champ == "")
	{
	// si le champ est vide, le test est OK si le champ n'est pas "obligatoire"
	var erreur = (classe == "obligatoire");
	}
	else 
	{
	// si le champ n'est pas vide, il doit être correct dans tous les cas
	// RegExp qui permet de controler qu'une adresse mail est valide
	var reg = new RegExp(/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/);
	var erreur = !(reg.test(champ));
	}
return (erreur);
}
 
function verifForm(formulaire) 
{
reinitClasses (formulaire);
var erreurOubli = false;
var erreurMail = false;
var premiereErreur = -1;
 
var nb = formulaire.length;
for (var n=0; n < nb; n++)
	with (formulaire.elements[n])
		{
		if (!((type == "submit") ||  (type == "reset")))
			{
			if ((className == "obligatoire") && (value == ""))
				{
				className = "oublie";
				erreurOubli = true;
				}
			if  (id == "email") 
				if (mailError(value, className))
					{
					className = "email";
					erreurMail = true;
					}
			if (erreurMail || erreurOubli)
				if (premiereErreur == -1)
					premiereErreur = n;
			}
		}
 
if (erreurOubli)
	alert ("Vous avez oublié de fournir certaines informations");
if (erreurMail)
	alert ("Cette adresse de courriel semble invalide");
erreur = (erreurOubli || erreurMail);
if (erreur) formulaire.elements[premiereErreur].focus();
return (!(erreur))
 
}
le fichier "ecrire.inc.html"
Code :
1
2
3
4
5
6
7
8
9
10
11
12
<h2>Merci pour votre envoi</h2>
<h3>Voici le message que vous m'avez transmis</h3>
 
<label>Votre nom : </label><strong>##NOM##</strong><br />
<label>Pays : </label><strong>##PAYS##</strong><br />
<label>Ville : </label><strong>##VILLE##</strong><br />
<label>Adresse mail : </label><strong>##MAIL##</strong><br />
<label>Site : </label><strong>##SITE##</strong><br />
 
messager:<br>
<p><strong>##TEXTE##</strong></p>
<p>Vous m'écriviez depuis l'adresse IP <strong>##IP## ##HOST##</strong></p>

Jusque là il n'y a pas de problèmes tout fonctionne bien. Mais j'aimerais aussi que mon formulaire soit ecris sur la page guestbook.doc (qui stocke tout les messages et les publie sur le site)

J'aimerais donc que le fichier "formecrire.inc.php" apelle un fichier "writeguest.php" (qui se chargera d'ecrire le formulaire dans "guestbook.doc"). Mais formecrire.inc.php commence par
Code :
<form method="post" action="?php echo $_SERVER['PHP_SELF']; ?>"
et lorsque je le remplace par
Code :
 <form method="post" action="writeguest.php"
ça l'envoi au fichier writeguest.php mais le calcul qui est posé ne fonctionne plus et ne sert plus à rien. Je cherche donc à savoir comment faire plusiers "action" (<form method="post" action=) à une même formulaire?

J'ai un autre problème qui concerne le fichier writeguest.php dont voici les codes
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php //Ouverture du fichier en écriture
 
$fp = fopen("/media/www-dev/public/site/guestbook.doc",a);
 
//On convertit les caracteres html
 
$nom = htmlspecialchars($_POST['nom']);
 
$pays = htmlspecialchars($_POST['pays']);
 
$ville = htmlspecialchars($_POST['ville']);
 
$mail = htmlspecialchars($_POST['mail']);
 
$siteweb = htmlspecialchars($_POST['siteweb']);
 
$message = stripslashes(nl2br(htmlentities($_POST['message'])));
 
$d = date ( "d/m/Y" );
 
$lieux = "($ville, $pays)"; 
 
$page = "";
 
$page .= "<h2>$d</h2><h1><b>$nom</b> $lieux</h1> $siteweb
<br>$message<br><hr>\n";
 
//On rajoute le message
 
fwrite($fp,"$page" ,strlen("$page"));
 
//fermeture du fichier
 
fclose($fp);
header('Location: http://localhost/public/site/reagir.php');
?>
Si l'utilisateur ne marque pas le nom de sa ville et de son pays les caractères "(,)" apparaissent quand même.
j'ai donc rajouté ce code entre $lieux : " " et $page = "" :
Code :
1
2
3
if (empty($ville) {$lieux = "($pays)";}
if (empty($pays) {$lieux = "($ville)";} 
if (empty($pays)& if (empty($ville) {$lieux = "";}
Mais là ça ne fonctionne plus il doit y avoir une erreur de syntaxe, pouvez vous m'aider?
L'autre problème c'est lorsque je met mon site en ligne, il faut que je change la ligne $fp = fopen("/media/www-dev/public/site/guestbook.doc",a);/ du fichier writeguest.php.
Mon hebergeur c'est byethost, mon url c'est http://yatairyatayer.byethost9.com, mais j'ai créé un sous domaine et du coup mon nom de nomaine c'est :http://yatair-voyageenpalestine.byethost9.com j'ai fait plusieurs essais j'ai mis "guestbook.doc", "/htdocs/guestbook.doc" et "http://yatair-voyageenpalestine.byethost9.com/guestbook.doc" et ça ne marche pas encore comment faire pour connaitre le bon chemin?
je précise que j'ai fait un chmod 666 sur guestbook.doc
Merci bcp
Je ne sais pas si j'ai été clair.
voici le lien vers mon site : http://yatair-voyageenpalestine.byethost9.com
raimon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2011, 18h23   #2
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 015
Points : 5 015
Je vais essayer de comprendre: tu es débutant en PHP et tu veux modifier les comportements de SPIP ?

Je conseille vivement de pas mettre les mains dans la mécanique de SPIP, j'ai moi même essayé et c'est pas la joie. L'intérêt des CMS c'est de ne jamais toucher le code et dans le cas présent, il vaut mieux car c'est assez sale en fait et à débugger ça va être un cauchemars.

Tu as jeté un oeil par ici : http://www.spip-contrib.net/Plugin-Livre-d-or ??

Pour ton erreur de syntaxe:
Code :
1
2
3
4
 
if (!empty($ville) {$lieux = "($pays)";}
if (!empty($pays) {$lieux = "($ville)";} 
if (!empty($pays)& if (empty($ville) {$lieux = "";}
déjà il manque des parenthèse et le "ou" s'écrit "&&":
Code :
1
2
3
4
if (empty($ville)) {$lieux = "($pays)";}
if (empty($pays)) {$lieux = "($ville)";} 
if (empty($pays) && if (empty($ville)) {$lieux = "";}
Mais tu aurais de toute façon dû faire:
Code :
1
2
3
4
 
if (!empty($ville)) $lieux = "($ville)";
elseif (!empty($pays)) $lieux = "($pays)";
else $lieux = "";
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2011, 00h37   #3
Invité de passage
 
Inscription : décembre 2010
Messages : 8
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 8
Points : 0
Points : 0
non non ce n'est pas avec spip c'est avec kompozer. Si spip permet de mettre des formulaires tout fait est ce qu'il permet de mettre des codes css et html fait avec kompozer? (equivalent de dreamwever) merci pour la syntaxe!
raimon est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h58.


 
 
 
 
Partenaires

Hébergement Web