Probleme d'ajout d'email vers base de données

Résolu/Fermé
jejede Messages postés 34 Date d'inscription mercredi 14 janvier 2009 Statut Membre Dernière intervention 31 mai 2010 - 11 févr. 2009 à 11:00
burnedsyn Messages postés 170 Date d'inscription samedi 29 septembre 2007 Statut Membre Dernière intervention 21 février 2009 - 12 févr. 2009 à 14:37
Bonjour,

je travaille sur mon site internet et j'ai creer un formulaire pour que les personnes inscrite recoivent une newsletter, cependant je n'arrive pas a l'ajouter dans la base de donnée l'email, c'est un peu bizarre vu que mes autres formulaires fonctionnent.
je vous envoie le code peut etre vous pourrez m'aider
merci

CONTENU DU FORMULAIRE

<!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">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Newsletter</title>
<link href="stylearial.css" rel="stylesheet" type="text/css">
</head>

<form method= post action= "confirmation_newsletter.php">
<table width="54%" height="128" border="0" align="center">
<tr>
<td width="47%" height="58" class="Style2">Entrez votre adresse email</td>
<td width="53%"><p>
<input type="text" name="Titre"/></p> </td>
</tr>
<tr>
<td height="64" align="right"><p> 
</p>
<p>
<input type="reset" value="Annuler" />
</p></td>
<td><p> 
</p>
<p> 
<input type="submit" value="Envoyer" />
</p></td>
</tr>
</table>

</form>
</body>
</html>


CONTENU DE LA PAGE D AJOUT EN PHP

<!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">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Confirmation</title>
</head>

<style type="text/css">
<!--
.Style1 {
font-family: Arial, Helvetica, sans-serif;
font-size: 22px;
color: #FFFFFF;
}
-->
</style>
<body>
<p><br />
TEST<br />
<?php


// ouvrir une connexion au seveur mysql en s'identifiant
$connexion = mysql_connect("localhost","root","");

// Si la connexion au SGBD à reussi
if ($connexion)
{
// sélectionner la base de donnée
mysql_select_db("startheatre",$connexion);

// créer la requete d'ajout
$requete="INSERT INTO newsletter(email)
VALUE('".$_POST["email"]."');";

echo $requete;
// lancer la requete d'ajout
$ok=mysql_query($requete,$connexion) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());

//si la requete
if($ok)
{
echo "<p>Votre inscription à bien été prise en compte</p>";
}

else
{
echo "inscription echoué !!!";
}
}
else
{
echo "probleme à la connexion<br/>";
}

// fermer la connexion
mysql_close($connexion);
?>

</p>
</body>
</html>

ensuite quand je fais le test d'ajout on me met ca

Notice: Undefined index: email in C:\Program Files\EasyPHP 2.0b1\www\startheatre\confirmation_newsletter.php on line 40
INSERT INTO newsletter(email) VALUE('');
Notice: Undefined variable: sql in C:\Program Files\EasyPHP 2.0b1\www\startheatre\confirmation_newsletter.php on line 44
Erreur SQL !

Duplicata du champ '' pour la clef 1


voila je vous remercie

5 réponses

burnedsyn Messages postés 170 Date d'inscription samedi 29 septembre 2007 Statut Membre Dernière intervention 21 février 2009 16
11 févr. 2009 à 21:09
bien dans ton attribut name de ta balise input texte tu as le mot titre et tu essaye d'avoir la variable $_POSTE['email'] <<< la met titre ou alors change le name de ta balise input
deplus fais attention
TU inclus une donnée utilisateur sans meme t'inquiéter de ce qu'elle contient...
cela peut être très dangeureux.
je te conseille de voire du coté des fonctions

mysql_escape_string().
Maintenant si tu utilise une version de php superieur a la 5.0 tu as les fonctions de la spl à savoir
filter_var()
exemple
if(!filter_var($email, FILTER_VALIDATE_EMAIL))
{
echo "E-mail is not valid";
}
else
{
echo "E-mail is valid";
}


A savoir si tu utilise une 5.2.2x et non une 5.2.3 alors FILTER_SANITIZE_EMAIL est susceptible d'être vulnérable a une attaque par new line injection src 'http://www.securityfocus.com/bid/23359/info'

De toute manière un bon conseil fouilles dans ces fonctions et dorénavant lorsque tu développes quelques choses en lettre de feu ecrit partout ne jamais, jamais, mais vraiment jamais faire confiance a l'utilisateur et verifier toutes les données entrée dans le processus en cours (voire meme ce que tu stock en base de données elles aussi peuvent etre compromise..

Voila bonne soirée
0
jejede Messages postés 34 Date d'inscription mercredi 14 janvier 2009 Statut Membre Dernière intervention 31 mai 2010 11
12 févr. 2009 à 00:18
ah ok je viens de comprendre,
cependant il me reste toujours un probleme j'ai utilisé ta fonction mais ca veut pas fonctionner y aurai-t-il un autre moyen de verifier si l'email est bien rentrer donc verifier par exemple si le '@'est mis...
voila je vous remercie d'avance
0
burnedsyn Messages postés 170 Date d'inscription samedi 29 septembre 2007 Statut Membre Dernière intervention 21 février 2009 16
12 févr. 2009 à 12:17
Bonjour,

Quel version de php utilises tu ?

oui bien sur qu'il y a moyen de verifier un mail voici un petit exemple en deux partie le premier vérifie l'anatomie de l'adresse fournie et le second le serveur et sa capacité a recevoir des mails.

je te conseil de taper un oeil a la fonction preg_match
function is_mail($mail)
{
   return preg_match("/^(w|-|\.)+@((\w|-)+\.)+[a-z]{2,6}$/i",$m);
}

function verifie_email($email)

{
  list($compte,$domaine)=split("@",$email,2);
  if(!checkdnsrr($domaine,"MX") && ! checkdnsrr($domaine,"A"))
   {
        return "domaine non valide n'accepte pas les mails";
   }
  return $email;
}


Voila j'espère que cela t'aidera

Tim
0
jejede Messages postés 34 Date d'inscription mercredi 14 janvier 2009 Statut Membre Dernière intervention 31 mai 2010 11
12 févr. 2009 à 12:32
a ok merci beaucoup !!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
burnedsyn Messages postés 170 Date d'inscription samedi 29 septembre 2007 Statut Membre Dernière intervention 21 février 2009 16
12 févr. 2009 à 14:37
juste une correction dans la fonction is_mail remplacer $m par $mail

Voila
0