des données qui ne s'écrivent pas

Eléphanteau du PHP | 18 Messages

09 mars 2009, 20:40

Bonjour

Je ne maîtrise pas bien le php et après avoir passé de nombreuse heure a essayer seul de résoudre mon probème, sans succès, je me tourne vers vous.

J'ai une base de donnés qui contient une table "pmnl_email" avec 3 champs, "email", list_id" et "hash" (phpMyNewsletter).

Pour alimenter ces champs j'ai ce code php.
/// réception de l'adresse mail envoyé par l'utilisateur :
$varemail = $_POST['email'];

/// vérification pour éviter la double inscription :
// on effectue une requete dans la table newsletter de la base de données
$requete = 'SELECT `email` FROM `pmnl_email` WHERE email = \''.$varemail.'\''; 
$result = mysql_query($requete); 
$num = mysql_num_rows($result); 
// si pas inscrit alors on insère l'adresse dans la table newsletter:
if($num == 0) {
$req = "INSERT INTO `pmnl_email` (`email`, `list_id`, `hash`) VALUES ('{$varemail}', '', '')"; 
$insert = mysql_query($req); 
// si enregistrement ok :
if($insert == 1) {
function readTextFile($file){
    if(!($fp=@fopen($file,"r"))) return false;

    //lecture du fichier
    $fileContent="";
    while (!feof($fp)) {
        $fileContent.= fgets($fp, 1024);
    }

    //fermeture du fichier
    if(!fclose($fp)) return false;

    return($fileContent);
}
Je rencontre le problème suivant: le champ "email" est bien rempli dans la table, mais le champ "list_id" est toujours a 0, et le champ "hash" est complétement vide.
La conséquence c'est que mon interface de newsletter n'affiche pas la nouvelle adresse mail.
J'ai essayer plusieurs manip mais mon incompétence a vite atteint ses limites et je ne comprend pas d'ou peut venir l'erreur, de moi, de l'écriture du php?

Si je ne suis pas assez clair, n'hésité pas a demander des précisions.

Merci d'avance de votre aide.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

10 mars 2009, 00:13

Concernant tes champs vides, la requête

Code : Tout sélectionner

INSERT INTO `pmnl_email` (`email`, `list_id`, `hash`) VALUES ('{$varemail}', '', '')
revient à dire que tu veux insérer un enregistrement dans la table "pmnl_email", avec pour valeur email = $varemail, list_id = '' et hash = ''.
Voilà pourquoi tes champs sont vide, et accessoirement, comment les remplir ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

ViPHP
ViPHP | 1996 Messages

10 mars 2009, 01:43

Autres choses :

Pourquoi tu insères tes données avec deux {+} (voir {$varemail})

Code : Tout sélectionner

INSERT INTO `pmnl_email` (`email`, `list_id`, `hash`) VALUES ('{$varemail}', '', '')";
et tu ne recherches pas {$varemail} mais $varemail

Code : Tout sélectionner

(WHERE email = \''.$varemail.'\''; )
. C'est normal ?
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Eléphanteau du PHP | 18 Messages

10 mars 2009, 15:31

Merci

Code : Tout sélectionner

INSERT INTO `pmnl_email` (`email`, `list_id`, `hash`) VALUES ('{$varemail}', '', '')
Si j'ai compris la bonne formulation serait

Code : Tout sélectionner

INSERT INTO `pmnl_email` (`email`) VALUES ('$varemail')
je ne demande d'insérer que la valeur $varemail dans le champ `email` de la table `pmnl_email` le reste des champs `list_id` et `hash` devrait se remplir automatiquement?

Pourtant le résultat est toujours le même = list_id = 0 et hash = vide.

Pouvez-vous continuer a essayer de m'expliquer?
"L'important pour la rivière n'est pas de se jeter dans la mer mais de rencontrer les galets"

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

10 mars 2009, 15:40

Euh... bah non... y a rien qui se fait en automatique si tu le spécifies pas... (ouais, php c'est rien qu'un gros feignant ! ;))

Si tu te contentes de ne renseigner que la valeur de "email" dans ton enregistrement, seule cette valeur là sera renseignée, les autres resteront null :)

La logique voudrait que tu ais quelque chose du genre :
$req = "INSERT INTO pmnl_email (email, list_id, hash) VALUES ('".$varemail."', '".$varlist."', '".$varhash."')";  
avec $varlist et $varhash devant préalablement être renseignées par les valeurs que tu souhaites faire figurer en base :)

(et comme je sais pas ce que tu es sensé trouvé dans ces champs, je peux malheureusement pas aller plus loin :))
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

ViPHP
ViPHP | 1996 Messages

10 mars 2009, 15:44

Merci

Code : Tout sélectionner

INSERT INTO `pmnl_email` (`email`, `list_id`, `hash`) VALUES ('{$varemail}', '', '')
Si j'ai compris la bonne formulation serait

Code : Tout sélectionner

INSERT INTO `pmnl_email` (`email`) VALUES ('$varemail')
je ne demande d'insérer que la valeur $varemail dans le champ `email` de la table `pmnl_email` le reste des champs `list_id` et `hash` devrait se remplir automatiquement?

Pourtant le résultat est toujours le même = list_id = 0 et hash = vide.

Pouvez-vous continuer a essayer de m'expliquer?
Pour le début ;

Code : Tout sélectionner

INSERT INTO `pmnl_email` (`email`) VALUES ('$varemail')
Je suis d'accord masi si tu ne renseignes pas les colonnes liste_id et hash c'est normal qu'elles soient vides. Visiblement les valeurs par défaut de liste_id est 0 est hash est rien du tout, liste_id doit être un chiffre et hash du texte. Après je ne peux pas t'en dire plus car je ne sais ce qu'il représente dans ta base. Il faut que tu les récupères quelque part puis les insérer comme suit :
 //Valeurs aléatoires et imaginées
$list_id = 3;
$hash = "vide";
$requete = "INSERT INTO pmnl_email (email, list_id, hash) VALUES ('$varemail', '$list_id', '$hash')";
mysql_query ($requete);
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Eléphanteau du PHP | 18 Messages

10 mars 2009, 15:49

Euh... bah non... y a rien qui se fait en automatique si tu le spécifies pas... (ouais, php c'est rien qu'un gros feignant ! ;))
Dommage ce serait plus simple pour moi!

[quote=La logique voudrait que tu ais quelque chose du genre :
$req = "INSERT INTO pmnl_email (email, list_id, hash) VALUES ('".$varemail."', '".$varlist."', '".$varhash."')";  
avec $varlist et $varhash devant préalablement être renseignées par les valeurs que tu souhaites faire figurer en base :)

(et comme je sais pas ce que tu es sensé trouvé dans ces champs, je peux malheureusement pas aller plus loin :))[/quote]
Ou puis-je trouver ces infos, dans la base de données? Ce que j'ai!
list_id, type = int(11), Attributs = vide, Null = 0
hash, type varchard(255), Attributs = vide,Null = vide

As tu besoin d'autre chose
"L'important pour la rivière n'est pas de se jeter dans la mer mais de rencontrer les galets"

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

10 mars 2009, 16:27

Ben en fait, tout ça ne nous dit pas à quoi servent tes champs... et du coup on peut difficilement deviner ce qu'il faut mettre dedans :)

Tu dis que "mon interface de newsletter n'affiche pas la nouvelle adresse mail", peut être est-ce là dessus qu'il faudrait se pencher. Dans quel cas ton interface affiche-t-elle une adresse email ?

En sachant ce qu'il te faut obtenir tu pourras peut être trouver plus facilement ce qu'il te faut renseigner :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 18 Messages

10 mars 2009, 17:00

Le code php est celui fournis avec une ressource Flash et j'essaie de modifier celui-ci pour écrire dans une base de données fournie pour phpMyNewsletter de Gregory Kokanosky http://gregory.kokanosky.free.fr/v4/phpmynewsletter/
Tu dis que "mon interface de newsletter n'affiche pas la nouvelle adresse mail", peut être est-ce là dessus qu'il faudrait se pencher. Dans quel cas ton interface affiche-t-elle une adresse email ?
Uniquement quand je rentre une adresse avec la page faire pour cela?
http://annadrey.com/maquette/01/pmnl/
J'ai essayer de comprendre cette page mais y'a plein d'include dedans, alors là je ne comprend absolument pas qui fait référence a quoi?

Je comprends que cela commence a faire beaucoup pour une aide, mais pourrait tu m'aiguiller sur ce que je doit chercher dans ces fichiers
<?

if(file_exists("include/config.php")){
	include("include/config.php");
	include("include/db/db_".$db_type.".inc.php");
}
	include("include/lib/libconfig.php");
	include("include/interface.php");
	include("include/lib/libnewsletter.php");
	include("admin/include/function.php");


html_header("phpMyNewsletter");

if(file_exists("include/config.php")){
   print newsletter_list(null, true);
  } else {
  // in this case dberror() is not defined anywhere
  // so let's add a dumb function
  function dberror(){};
  include "include/lang/english.php";
  echo error_msg(translate("NEWSLETTER_NOT_YET"));
}
html_footer();

?>
Merci pour ton aide
"L'important pour la rivière n'est pas de se jeter dans la mer mais de rencontrer les galets"

Eléphanteau du PHP | 18 Messages

17 mars 2009, 17:27

Personne ne veut plus m'aider, ais-je fait une erreur quelque part, si c'est le cas merci de me dire laquelle que je ne me retrouve plus le bec dans l'eau.

Mais si quelqu'un veut bien reprendre la suite cela me dégageré d'un poids pour pouvoir faire ce dossier.

Merci d'avance
"L'important pour la rivière n'est pas de se jeter dans la mer mais de rencontrer les galets"