Simple inscription à une newsletter

Résolu
BBFUNK01 Messages postés 1310 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 20 juin 2014 - 4 févr. 2011 à 18:26
BBFUNK01 Messages postés 1310 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 20 juin 2014 - 5 févr. 2011 à 16:10
Hello,

j'entame sérieusement mon apprentissage sur la gestion d'une BDD via php, et je coince en ce moment sur un problème encore irrésolu : un simple formulaire d'inscription à une newsletter. Voici le topo : mon formulaire est en Flash, et contient 3 champs -> "nom", "email", et "société". Par conséquent une fois le formulaire rempli je me connecte via PHP à ma base, et je lis la table voulue pour contrôler si les données envoyées ne figurent pas déjà dans cette table. Ensuite ça se corse : si les données n'existent pas, je les insère donc dans la table, le problème c'est que je ne parviens pas à "enchaîner" les 2 actions. J'arrive à lire ma table et à contrôler si les données existent ou non, mais n'arrive pas à insérer ensuite. Et à l'inverse j'arrive à insérer les données saisies mais ne parviens pas à effectuer le contrôle en amont.
Donc je pense que je m'y prend mal et souhaiterai obtenir vos lumières quand à ma méthode.

Voici mon PHP (enfin un de mes tests) :
<?php 
//j'inclus un PHP qui me sert à décoder l'echo renvoyé à mon Flash :
include("parse_AS3.php");

//je récupère mes variables :
$nom = $_POST['nom']; 
$email = $_POST['email']; 
$societe = $_POST['societe'];
$resultat = "inscription validée";

//connexion à la base :
try
{
    $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    $bdd = new PDO('mysql:host=localhost;dbname=ma_base', 'root', 'root', $pdo_options);

$reponse = $bdd->query('SELECT nom, email FROM news');
while ($donnees = $reponse->fetch())
    {
    	//c'est donc ici que j'effectue mon contrôle, déjà ça merdouille dans la mesure où je n'arrive pas
    	//à contrôler comme ceci : if(($donnees['nom'] == $nom) && ($donnees['email'] == $email)) -> j'obtiens une erreur de syntaxe&#8230; ?
        if($donnees['nom'] == $nom)
{
if($donnees['email'] == $email)
{
$reponse->closeCursor();
$tab_var[] = Parse("OK","0");
$liste_var = implode("&",$tab_var);
echo $liste_var;
}
}
//et ici j'ai essayé de d'insérer en fonction du contrôle, mais quoi qu'il advienne l'insertion est effectuée mais pas le contrôle.
else if($donnees['nom'] != $nom)
{
if($donnees['email'] != $email)
{
$req = $bdd->prepare('INSERT INTO news(nom, email, societe) VALUES(:nom, :email, :societe)');
$req->execute(array(
'nom' => $nom,
'email' => $email,
'societe' => $societe
));
}
}
    }
$reponse->closeCursor();
}
catch(Exception $e)
{
    die('Erreur : '.$e->getMessage());
}

?>


Bref, comme vous le constatez c'est très mal codé, l'idée étant pourtant simple : effectuer un contrôle sur la base en fonction des champs saisis et le cas échéant, insérer ou pas.
Donc si vous avez des conseils pour que je m'améliore je suis preneur .

Merci ,

BBFUNK01
//C'est en forgeant qu'on devient forgeron... ;-) ;

2 réponses

BBFUNK01 Messages postés 1310 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 20 juin 2014 6
5 févr. 2011 à 16:08
Hello moi... Et oui je m'auto-réponds .

Bon et bien en ce samedi après-midi j'ai le cerveau un peu plus frais et par conséquent j'ai résolu mon problème , voici le code pour ceux qui seraient intéressés :
<?php 

include("parse_AS3.php");

$nom = $_POST['nom']; 
$email = $_POST['email']; 
$societe = $_POST['societe'];
$resultat = "inscription validée";

try
{
    $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    $bdd = new PDO('mysql:host=localhost;dbname=ma_base', 'root', 'root', $pdo_options);

$req = $bdd->prepare('INSERT INTO news(nom, email, societe) VALUES(:nom, :email, :societe)');

$idD =  $bdd->query("SELECT id as NB FROM news ORDER BY id DESC LIMIT 1");
$res = $idD->fetch();
$LastID = $res['NB'];

$reponse = $bdd->query('SELECT id, nom, email FROM news');
while ($donnees = $reponse->fetch())
    {
        if(($donnees['nom'] == $nom) && ($donnees['email'] == $email)){
$reponse->closeCursor();
$tab_var[] = Parse("OK","0");
$tab_var[] = Parse("ID",$LastID);
$liste_var = implode("&",$tab_var);
echo $liste_var;
}else if(($donnees['nom'] != $nom) && ($donnees['email'] != $email) && ($donnees['id'] == $LastID)){
$req->execute(array(
'nom' => $nom,
'email' => $email,
'societe' => $societe
));
$tab_var[] = Parse("OK","1");
$liste_var = implode("&",$tab_var);
echo $liste_var;
}
}
$reponse->closeCursor();
}
catch(Exception $e)
{
    die('Erreur : '.$e->getMessage());
}

?>


A plus ,

BBFUNK01
//C'est en forgeant qu'on devient forgeron... ;-) ;
3
BBFUNK01 Messages postés 1310 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 20 juin 2014 6
5 févr. 2011 à 16:10
Arrf,

pour ceux qui veulent dialoguer entre leur BDD et leur Flash comme moi, voici le fichier à inclure pour décoder les variables :
<?php
function Parse($variable,$valeur) {
$ajout_var = $variable."=".utf8_encode($valeur);	
return $ajout_var;
}
?>


Le fichier que j'inclus comme ceci dans mon PHP dont je parle plus haut :
include("parse_AS3.php");


Bon week-end ,

BBFUNK01
//C'est en forgeant qu'on devient forgeron... ;-) ;
0
Rejoignez-nous