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> </td>
<td><input maxlength="30" size="30" name="nom" id="nom" class="obligatoire"></td></tr>
<tr> <td><label for="pays">Pays :</label> </td>
<td> <input maxlength="40" size="30" name="pays" id="pays"></td>
<tr> <td><label for="ville">Ville :</label> </td>
<td> <input maxlength="40" size="30" name="ville" id="ville"></td>
<tr> <td><label for="email">Email :</label> </td>
<td> <input maxlength="40" size="30" name="zorglub" id="email"></td>
<tr> <td><label for="site">Site web :</label> </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 :
<?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