Avertir lors de l'inscription si un email existe dèjà dans une base de données

Signaler
Messages postés
119
Date d'inscription
jeudi 2 avril 2009
Statut
Membre
Dernière intervention
9 novembre 2013
-
Messages postés
1654
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
11 septembre 2013
-
Bonjour,
je suis entrain de créer un site web ou il y a des pages de contact ainsi que l'inscription à la newsletter..
je voudrais avertir l'internaute si l'email qui a tapé existe dans la base de données, comme quoi il doit le changer ..
SVP aidez moi, c'est très urgent

9 réponses

Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
12
Salut,

Personne ne peux devinner ce que tu as déjà fait et donc personen ne peux t'aider dans l'état actuel des choses. Bref, post donc ton code et ensuite on te dira quoi faire.
Messages postés
119
Date d'inscription
jeudi 2 avril 2009
Statut
Membre
Dernière intervention
9 novembre 2013

Voilà mon code

Code d’insertion dans la BDD :

<?php
$base="ma_base";
$conn=mysql_connect("localhost","root","");
mysql_select_db($base);

$email=$_POST['email'];
$date = date("Y/m/d - H:i:s");


$sql='insert into newsletter VALUES("", "'.mysql_escape_string($email).'","'.mysql_escape_string($date).'")';

$req=mysql_query($sql) or die ('Erreur SQL !
'.$sql.'
'.mysql_error());
header("location:index.php");
?>


Code HTML:

<script language="javascript">
function focus_in_input(ch){
if(ch.value=='votre e-mail ici'){
ch.value='';
}
}

function blur_in_input(mp){
if(mp.value==''){
mp.value='votre e-mail ici';
}
}

function controler_formulaire(obj)
{
//controle mail
var mail=obj.email.value;
var pos_at=mail.indexOf('@')
if(pos_at==-1)
{
alert('Veuillez saisir correctement votre e-mail !');
obj.email.value='';
obj.email.focus();
return false;
}
else
{
var sous_mail=mail.substring(pos_at,mail.length)
var pos_p=sous_mail.indexOf('.')
if(pos_p==-1)
{
alert('Veuillez saisir correctement votre e-mail !');
obj.email.value='';
obj.email.focus();
return false;
}
}

return true;
}

function showMessage() {
alert ("Nous vous remercions pour votre inscription. Vous recevrez dorénavant notre newsletter.");
return true;
}

</script>

<form id="form2" name="form2" method="post" action="insertnews.php" onSubmit="return controler_formulaire(this)">
<label>

</label>
<label>

</label>
</form>
Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
12
Et bien, avant de faire l'insertion, tu sélectionne les entrées dont l'email est celle que l'utilisateur fourni. S'il n'y a aucun retour alors tout est ok, et s'il y a un retour c'est que l'email est déjà présent dans la base. Ça représente un mysql_query, un mysql_num_rows() et quelques petit truc triviaux, rien de bien méchant. Où est le problème ?
Messages postés
1654
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
11 septembre 2013
16
bonsoir
un truc comme ça
a++

<?php 
if(isset($_POST['email']) && !empty($_POST['email'])){
  
  $base="ma_base"; 
  $conn=mysql_connect("localhost","root",""); 
  mysql_select_db($base); 
  //un peu de securité
  $email=mysql_real_escape_string($_POST['email']);
  $date = date("Y/m/d - H:i:s");
  //tu verifies
  $sql="select email from newsletter where email='".$email."' limit 1";
  $q=mysql_query($sql);
  
  if(mysql_num_rows($q)>0){
  //il y a une ligne donc
  echo '[javascript:history.back(); << Retour] Il semble que cette email soit déjà présent';
  mysql_close();
  }else{
  //nouveau on insere
  $sql="insert into newsletter VALUES(NULL,'".$email."','".$date."')"; 
  $req=mysql_query($sql) or die ('Erreur SQL !
'.$sql.'
'.mysql_error()); 

  mysql_close();
  header('Location: index.php');exit;
  }

}else{
//si acces direct à la page sans passer par le formulaire
echo '[javascript:history.back(); << Retour] Poster un email';
}
?>


Bonne programmation !
Messages postés
119
Date d'inscription
jeudi 2 avril 2009
Statut
Membre
Dernière intervention
9 novembre 2013

Merci d'avoir répondre mais ça marche pas, j'ai copier la même chose sur mon fichier d'insertion mais quand je valide il me donne une autre page ou il ya un message de "La connexion a été réinitialisée" (comme si la page n'existe pas)
Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
12
Bravo, vous venez d'illustrer parfaitement un problème récurent sur les forums de ce genre. Copier/coller un code sans le comprendre est la pire connerie à faire. Non seulement le débutant ne comprend rien, ne tire strictement aucune leçon de ceci et ne progresse pas, mais en plus ça ne fonctionne pas et/ou pose de nouveaux problèmes.

@honey87 : je t'invite à reprendre ton code d'origine et à le modifier par toi même en suivant les conseils que je t'ai donné et en t'inspirant de ce qu'a posté cod57.
Messages postés
119
Date d'inscription
jeudi 2 avril 2009
Statut
Membre
Dernière intervention
9 novembre 2013

mais pourquoi tout cela ?
il suffit juste de dire ta dernière phrase, pas besoin de jouer le rôle de d'un prof..
oui bravo parce que je suis qu'une infographiste.. et entrain de monter un site dynamique toute seule !!
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
38
Bonjour,

Plusieurs points sont importants :
TychoBrahe essaie de t'aider, il ne te donne pas de poisson, mais il t'explique comment pecher, c'est beaucoup plus efficace.
honey87 semble lutter et donc, il serait plus efficace soit de lui faire son truc (ce qui n'est pas le but de ce forum) soit de lui expliquer plus calmement comment faire, et pourquoi son code ne fonctionne pas.


<?php
$base="ma_base";
$conn=mysql_connect("localhost","root","");
mysql_select_db($base);

$email=$_POST['email'];
$date = date("Y/m/d - H:i:s");

// j'ai ajouté ça à ton code : le principe c'est : selectionner n'importe quelle ligne de ta db qui a pour email celui de l'utilisateur
$req=mysql_query('SELECT 1 from newsletter WHERE email="'.mysql_escape_string($email).'"') or die ('Erreur SQL !
'.$sql.'
'.mysql_error());

if (mysql_num_rows($req) > 0){ // si la requete a des résultats, je renvoie vers une page d'erreur
header("location:error.php");
}


header("location:index.php");

$sql='insert into newsletter VALUES("", "'.mysql_escape_string($email).'","'.mysql_escape_string($date).'")';

$req=mysql_query($sql) or die ('Erreur SQL !
'.$sql.'
'.mysql_error());
header("location:index.php");
?>


Est-ce-que c'est correct ?

Cordialement,

Maxime
Messages postés
1654
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
11 septembre 2013
16
bonjour

TychoBrahe a raison j'aurai pas du poster le code ainsi mais bon comment expliquer puisque tu n'es pas vraiment programmeur donc quelques explications basiques

Mon code fonctionne parfaitement
je pense que ton problème vient de action=""
mais comme on a pas une vue de ton code cela reste une supposition ..., là je te donne un exemple d'un fichier sur lui même tu l'appelles par exemple inscription.php

tu controles déjà le mail par javascript c'est
une bonne chose tu pourras eventuellement faire un contrôle php mais restons simple

bien en soit il faut donc eviter

de se faire recopier son formulaire
de se faire spammer
de se faire injecter des hack dans la base

pour ta reflexion

<?php
session_start();
/*on va faire des varibles serveur inaccessibles au client*/
$token=$_SESSION['token']=md5(date('mdYH').$_SERVER['REMOTE_ADDR']);
$_SESSION['validticket']=true;

if(isset($_POST['email']) && !empty($_POST['email']) && $_POST['email']!='Votre e-mail ici' && $_SERVER['REQUEST_METHOD']==='POST'){
       
  //cette petite protection evitera de te faire recopier ton formulaire
  //tu peux aussi envisager une image captcha si tu remarques du spam
    
  if(isset($_SESSION['token'])  && isset($_POST['token']) && $_POST['token']===$_SESSION['token']){
  
      $base="ma_base"; 
      $conn=mysql_connect("localhost","root",""); 
      mysql_select_db($base); 
      //un peu de securité
      $email=mysql_real_escape_string($_POST['email']);
      
      /*bon tu peux inserer la date ainsi mais c'est pas comme ça que l'on fait
      on insere direct dans un champs datetime avec la fonction now
      $sql="insert into newsletter VALUES(NULL,'".$email."',now())";
      si tu veux changer mais pour l'instant je laisse dans la forme basique
      */
      
      $date = date("Y/m/d - H:i:s");
      //tu verifies
      $sql="select email from newsletter where email='".$email."' limit 1";
      $q=mysql_query($sql);
      
      if(mysql_num_rows($q)>0){
      //il y a une ligne donc
      echo '<hr>Il semble que cette email soit déjà présent<hr>';
      //echo '<hr>[javascript:history.back(); << Retour] Il semble que cette email soit déjà présent<hr>';
      }else{
      unset($_SESSION['validticket']);
      unset($_SESSION['token']); //anti refresh f5
      
      //nouveau on insere
      $sql="insert into newsletter VALUES(NULL,'".$email."','".$date."')"; 
      $req=mysql_query($sql) or die ('Erreur SQL !
'.$sql.'
'.mysql_error()); 
      echo '<hr>Merci '.$email.' vous êtes inscrit à présent<hr>';
      //echo '<hr>[javascript:history.back(); << Retour] Merci '.$email.' vous êtes inscrit à présent<hr>';
      //header('Location: index.php');exit;   //il faut que se fichier existe
      }

   }else{
   //$token pas bon
   }

}else{
//si acces direct à la page sans passer par le formulaire
echo '[javascript:history.back(); << Retour] Poster un email';
}
?> 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <meta name="generator" content="PSPad editor, www.pspad.com">
  <title></title>
  </head>

<script language="javascript"> 
function focus_in_input(ch){ 
if(ch.value=='votre e-mail ici'){ 
ch.value=''; 
} 
} 

function blur_in_input(mp){ 
if(mp.value==''){ 
mp.value='votre e-mail ici'; 
} 
} 

function controler_formulaire(obj) 
{ 
//controle mail 
var mail=obj.email.value; 
var pos_at=mail.indexOf('@') 
if(pos_at==-1) 
{ 
alert('Veuillez saisir correctement votre e-mail !'); 
obj.email.value=''; 
obj.email.focus(); 
return false; 
} 
else 
{ 
var sous_mail=mail.substring(pos_at,mail.length) 
var pos_p=sous_mail.indexOf('.') 
if(pos_p==-1) 
{ 
alert('Veuillez saisir correctement votre e-mail !'); 
obj.email.value=''; 
obj.email.focus(); 
return false; 
} 
} 

return true; 
} 

function showMessage() { 
alert ("Nous vous remercions pour votre inscription. Vous recevrez dorÚnavant notre newsletter."); 
return true; 
} 

</script> 
  
</head>  

  </html>
  <form id="form2" name="form2" method="post" action="" onSubmit="return controler_formulaire(this)">  
  
  " name="token">
  
    <label>  
        
    </label>  
    <label>  
        
    </label>  
  </form>   


-- phpMyAdmin SQL Dump
-- version 3.2.0.1
-- http://www.phpmyadmin.net
--
-- Serveur: localhost
-- Généré le : Jeu 28 Juillet 2011 à 11:43
-- Version du serveur: 5.1.36
-- Version de PHP: 5.2.11

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- Base de données: `ma_base`
--

-- --------------------------------------------------------

--
-- Structure de la table `newsletter`
--

CREATE TABLE IF NOT EXISTS `newsletter` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `email` varchar(40) NOT NULL,
  `date` varchar(30) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;

--
-- Contenu de la table `newsletter`
--

INSERT INTO `newsletter` (`id`, `email`, `date`) VALUES
(1, 'toto@free.fr', '2011/07/28 - 10:55:39'),
(2, 'titi@free.fr', '2011/07/28 - 10:57:15'),
(3, 'tata@free.fr', '2011/07/28 - 10:58:47'),
(4, 'tutu@free.fr', '2011/07/28 - 11:23:34'),
(5, 'tyty@free.fr', '2011/07/28 - 11:36:37'),
(6, 'to@free.fr', '2011/07/28 - 11:42:20');




j'ai testé en vitesse ça à l'air de tourner
pour la date je l'aurai saisie autrement mais bon c'est pas faux en soit ... pour pas créer
trop de confusion je laisse le script comme ça
mais j'ai laissé une explication dans le code

Bonne programmation !