Rechercher : dans
Par :

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

Dernière réponse le 12 fév 2009 à 14:37:58 jejede, le 11 fév 2009 à 11:00:59 
 Signaler ce message aux modérateurs

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

Configuration: Windows XP
Internet Explorer 7.0

Meilleures réponses pour « probleme d'ajout d'email vers base de données » dans :
Afficher le nom des base de données Oracle VoirPour afficher le nom des bases de données Oracle ainsi que les données s'y référant, il suffit de lancer la commande : SELECT * FROM V$DATABASE;
PHP - Bases de données VoirPhp permet un interfaçage très simple avec un grand nombre de bases de données. Lorsqu'une base de données n'est pas directement supportée par Php, il est possible d'utiliser un driver ODBC, pilote standard pour communiquer avec les bases de...
Bases de données - Introduction VoirQu'est-ce qu'une base de données ? Une base de données (son abréviation est BD, en anglais DB, database) est une entité dans laquelle il est possible de stocker des données de façon structurée et avec le moins de redondance possible. Ces données...
Importer et exporter des données sous MySQL VoirImportation et exportation Les Système de Gestion de Bases de Données tels que MySQL permettent de manipuler facilement et avec beaucoup de souplesse un très important volume de données. Toutefois, aussi robuste soit MySQL, il peut être intéressant...

1

burnedsyn, le 11 fév 2009 à 21:09:23

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

Répondre à burnedsyn

2

jejede, le 12 fév 2009 à 00:18:09

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

Répondre à jejede

3

burnedsyn, le 12 fév 2009 à 12:17:46

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

Répondre à burnedsyn

4

jejede, le 12 fév 2009 à 12:32:42

A ok merci beaucoup !!

Répondre à jejede

5

 burnedsyn, le 12 fév 2009 à 14:37:58

Juste une correction dans la fonction is_mail remplacer $m par $mail

Voila

Répondre à burnedsyn