PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 31-01-2010 12:26:14

david7
Membre
Inscription : 05-06-2009
Messages : 87

page de recommandation de site

salut a tous

je programme une page de recommandation de site, rien de bien méchant smile enfin si^^

j'ai aucune erreur lors de l'envoi, par contre je reçois rien du tout !


<?php

include("inc/conf.php");
include("inc/fonctions.php");

if (isset($_POST["action"]) && $_POST["action"] == "send")
{
  $email1 = postInput($_POST["email1"]);
  $email2 = postInput($_POST["email2"]);
  $email3 = postInput($_POST["email3"]);
  $email4 = postInput($_POST["email4"]);
  $email5 = postInput($_POST["email5"]);
  $email6 = postInput($_POST["email6"]);
  $message = postInput($_POST["message"]);

  if (!EmailOK($email1))
  {
    $_GET["msg"] = "email1 est invalide";
  }
  else
  {
    if (!EmailOK($email2))
    {
      $_GET["msg"] = "email2 est invalide";
    }
    else
    {
      if (!EmailOK($email3))
      {
        $_GET["msg"] = "email3 est invalide";
      }
      else
      {
        if (!EmailOK($email4))
        {
          $_GET["msg"] = "email4 est invalide";
        }
        else
        {
          if (!EmailOK($email5))
          {
            $_GET["msg"] = "email5 est invalide";
          }
          else
          {
            if (!EmailOK($email6))
            {
              $_GET["msg"] = "email6 est invalide";
            }
            else
            {
              if (empty($_GET["msg"]))
              {
                @mail($email1,$email2,$email3,$email4,$email5,$email6,"[NomSite] Invitation","Bonjour,

    [url]http://www.NomSite.fr/membres/inscription.php[/url]

    $message

    Cordialement
    -----
    Ceci est un message automatique
    Merci de ne pas répondre","From: ".$config["noreply"]);

                header("location: inviter.php?msg=OK");
                exit();
              }
            }
          }
        }
      }
    }
  }
}
else
{
  $email1 = "";
  $email2 = "";
  $email3 = "";
  $email4 = "";
  $email5 = "";
  $email6 = "";
  $message = "";
}

include("inc/header.php");

?>
 

Je pense que c'est un probleme dû a la ligne :
                @mail($email1,$email2,$email3,$email4,$email5,$email6,"[NomSite] Invitation","Bonjour,

? merci pour votre aide.

Dernière modification par david7 (31-01-2010 12:27:18)

Hors ligne

#2 31-01-2010 16:46:36

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : page de recommandation de site

Et si tu enlèves l'opérateur qui ignore les erreurs il t'affiche quoi ?

Hors ligne

#3 31-01-2010 18:02:03

david7
Membre
Inscription : 05-06-2009
Messages : 87

Re : page de recommandation de site

oui, voici les erreurs :

Warning: mail() expects at most 5 parameters, 9 given in /public_html/inviter.php on line 63

Warning: Cannot modify header information - headers already sent by (output started at /public_html/inviter.php:63) in /public_html/inviter.php on line 65

la ligne 63 :     Merci de ne pas répondre","From: ".$config["noreply"]);

j'utilise la meme chose sur mes autres pages, aucun probleme !

Hors ligne

#4 31-01-2010 18:15:54

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : page de recommandation de site

Tu as donc la réponse à ton erreur. Tu mets 9 paramètres dans la fonction mail qui ne peut en accueillir que 5.
Je te renvoie à la documentation de la fonction : mail

Hors ligne

#5 31-01-2010 19:04:00

david7
Membre
Inscription : 05-06-2009
Messages : 87

Re : page de recommandation de site

merci, j'ai lu la documentation par contre je trouve pas la solution a mon probleme ! je pense que c'est la ligne 54 qui pose probleme avec les email1,2,3 etc...
mais alors comment faire pour envoyer à plusieurs personnes (dans mon cas 6). hmm

Hors ligne

#6 31-01-2010 19:09:02

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : page de recommandation de site

En utilisant la fonction mail correctement. ^^
Elle ne supporte qu'un seul champ destinataire, donc il faut l'utiliser plusieurs fois :

mail($email1,"[NomSite] Invitation","Bonjour, ect...","From: ".$config["noreply"]);
mail($email2,"[NomSite] Invitation","Bonjour, ect...","From: ".$config["noreply"]);
mail($email3,"[NomSite] Invitation","Bonjour, ect...","From: ".$config["noreply"]);
mail($email4,"[NomSite] Invitation","Bonjour, ect...","From: ".$config["noreply"]);
mail($email5,"[NomSite] Invitation","Bonjour, ect...","From: ".$config["noreply"]);
mail($email6,"[NomSite] Invitation","Bonjour, ect...","From: ".$config["noreply"]);

ou alors en plus propre :

$email = $email1.','.$email2.','.$email3.','.$email4.','.$email5.','.$email6;
mail($email,"[NomSite] Invitation","Bonjour, ect...","From: ".$config["noreply"]);

Pour le problème avec header cela vient du fait que la fonction mail modifie le header de la page.

Dernière modification par xTG (31-01-2010 19:14:52)

Hors ligne

#7 31-01-2010 19:24:43

david7
Membre
Inscription : 05-06-2009
Messages : 87

Re : page de recommandation de site

ca marche nikel^^ merci
j'ai utilisé ta technique "propre" c'est mieu smile

Hors ligne

#8 31-01-2010 21:36:34

moogli
Modérateur
Inscription : 08-05-2009
Messages : 336
Site Web

Re : page de recommandation de site

salut,

ou alors plus simple on utilise le champ BCC de la fonction mail pour envoyer tous ça en une seule fois (voir donc la fonction mail).

utiliser la fonction mail en boucle risque d'être mal vu par ton hébergeur smile

@+


Il en faut peu pour être heureux pompompompompompompompompompompom

Hors ligne

#9 01-02-2010 09:22:46

david7
Membre
Inscription : 05-06-2009
Messages : 87

Re : page de recommandation de site

oops, j'ai parlé trop vite ! ca marche seulement si je rempli tout les champs emails (les 6!) si j'en rempli un seul ca envoi aucun mail. pourquoi? hmm

Hors ligne

#10 01-02-2010 09:24:59

david7
Membre
Inscription : 05-06-2009
Messages : 87

Re : page de recommandation de site

voici ma page :

<?php

include("inc/conf.php");
include("inc/fonctions.php");

if (isset($_POST["action"]) && $_POST["action"] == "send")
{
  $email1 = postInput($_POST["email1"]);
  $email2 = postInput($_POST["email2"]);
  $email3 = postInput($_POST["email3"]);
  $email4 = postInput($_POST["email4"]);
  $email5 = postInput($_POST["email5"]);
  $email6 = postInput($_POST["email6"]);
  $message = postInput($_POST["message"]);

  if ($email1 != "")
  {
    if (!EmailOK($email1))
    {
      $_GET["msg"] = "email1 est invalide";
    }
  }
  if ($email2 != "")
  {
    if (!EmailOK($email2))
    {
      $_GET["msg"] = "email2 est invalide";
    }
  }
  if ($email3 != "")
  {
    if (!EmailOK($email3))
    {
      $_GET["msg"] = "email3 est invalide";
    }
  }
  if ($email4 != "")
  {
    if (!EmailOK($email4))
    {
      $_GET["msg"] = "email4 est invalide";
    }
  }
  if ($email5 != "")
  {
    if (!EmailOK($email5))
    {
      $_GET["msg"] = "email5 est invalide";
    }
  }
  if ($email6 != "")
  {
    if (!EmailOK($email6))
    {
      $_GET["msg"] = "email6 est invalide";
    }
  }
  if (empty($_GET["msg"]))
  {
    $email = $email1.','.$email2.','.$email3.','.$email4.','.$email5.','.$email6;
    mail($email,"[NomSite] Invitation","Bonjour,

[url]http://www.NomSite.fr/membres/inscription.php[/url]

$message

Cordialement, NomSite
-----
Ceci est un message automatique
Merci de ne pas répondre","From: ".$config["noreply"]);

    header("location: inviter.php?msg=OK");
    exit();
  }
}
else
{
  $email1 = "";
  $email2 = "";
  $email3 = "";
  $email4 = "";
  $email5 = "";
  $email6 = "";
  $message = "";
}

include("inc/header.php");

?>

Hors ligne

#11 01-02-2010 10:00:09

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : page de recommandation de site

Tout simplement parce que d'après ton code tu n'envoies le mail que si tu n'as eu aucune erreur sur les emails (cf ligne 58).

Hors ligne

#12 01-02-2010 10:23:25

david7
Membre
Inscription : 05-06-2009
Messages : 87

Re : page de recommandation de site

donc si j'ai bien conpris je retire la ligne 58, 59, 74 ??
c'est pas plutot la ligne 60 ? car a la base c'est prévu pour 6 mails, donc s'il y en a moin : bug ! non ?

Dernière modification par david7 (01-02-2010 10:25:03)

Hors ligne

#13 01-02-2010 10:27:15

david7
Membre
Inscription : 05-06-2009
Messages : 87

Re : page de recommandation de site

euh non!! c'est pas possible la ligne 58 ! car une fois que je clic sur valider le message "OK" s'affiche donc c'est pas un probleme de : if (empty($_GET["msg"]))

Hors ligne

#14 01-02-2010 11:50:57

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : page de recommandation de site

Je croyais que ton bug venait du fait que s'il n'y a qu'un email on doit l'envoyer ? Tu te contredis en disant que le formulaire est fait pour 6 et uniquement 6 emails.
Que veux-tu exactement ? smile

Hors ligne

#15 01-02-2010 12:34:44

david7
Membre
Inscription : 05-06-2009
Messages : 87

Re : page de recommandation de site

oui dsl je réexplique :
la, si je rempli les 6 champs email d'ami1, email d'ami2 etc jusqu'a 6 dans mon formulaire tout marche bien le message OK s'affiche ! aucun probleme ! big_smile

mais si je rempli pas les 6 champs (par exemple si j'en rempli un seul), le message OK s'affiche mais mes amis reçoivtn aucun mail... rien du tout roll

donc le probleme c'est qu'il faut remplir les 6 champs donc tapé 6 emails d'amis pour que sa fonctionne hmm pourquoi ? hmm sadroll

Hors ligne

#16 01-02-2010 17:31:35

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : page de recommandation de site

Je ne peux rien te dire dessus étant donné que je ne sais pas ce que renvoie ta fonction postInput.
Renvoie-t-elle véritablement une chaîne de caractère vide ? Essayes d'utiliser la fonction trim() pour supprimer les possibles caractères blanc.

Il faut aussi faire de l'ajout conditionnel pour le champs email de la fonction. Car là on ajoute des virgules et seulement des virgules si certains mails sont vide.

$email = "";
if( !empty($email1) ) $email .= ','.$email1;
if( !empty($email2) ) $email .= ','.$email2;
if( !empty($email3) ) $email .= ','.$email3;
/...

Hors ligne

#17 01-02-2010 19:26:17

david7
Membre
Inscription : 05-06-2009
Messages : 87

Re : page de recommandation de site

merci pour ton aide wink

donc je test ton code comme ceci :


    $email = "";
    if (!empty($email1)) $email .= ','.$email1;
    if (!empty($email2)) $email .= ','.$email2;
    if (!empty($email3)) $email .= ','.$email3;
    if (!empty($email4)) $email .= ','.$email4;
    if (!empty($email5)) $email .= ','.$email5;
    if (!empty($email6)) $email .= ','.$email6;

    //$email = $email1.','.$email2.','.$email3.','.$email4.','.$email5.','.$email6;
    mail($email,"[NomSite] Invitation","Bonjour,

sinon pour info voici ma fonction :


function postInput($string) {
$string = trim($string);
$string = strip_tags($string);
$string = htmlspecialchars($string);
$string = stripslashes($string);
$string = changeAccents($string);
return $string;
}
 

c'est pas un probleme avec ma fonction je pense.

je vais voir avec ton code tout de suite..

Hors ligne

#18 01-02-2010 19:31:54

david7
Membre
Inscription : 05-06-2009
Messages : 87

Re : page de recommandation de site

cela ne fonctionne pas sad

Hors ligne

#19 01-02-2010 20:07:07

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : page de recommandation de site

Remplace toujours les != "" par la fonction !empty() cela ferra déjà bien plus propre.
Ensuite un petit test pour voir si la variable est effectivement vide ou non : tu rajoutes un caractère devant et un derrière.
Et tu l'affiches.

$maVar = 'a'.$maVar.'b';

Hors ligne

#20 01-02-2010 21:45:59

david7
Membre
Inscription : 05-06-2009
Messages : 87

Re : page de recommandation de site

merci pour le conseil avec le !empty() je vais voir..
sinon pour le script avec les 6 champs etc.. j'abandonne je comprend de moin en moin j'y arrive pas. sad (mais merci pour ton coup de main c'est cool de ta part)
je vais faire un textarea a la place, le visiteur tapera les emails de ces amis avec des virgules lui meme... c'est plus simple ! t'en pense quoi ?

Hors ligne

#21 01-02-2010 22:15:15

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : page de recommandation de site

Pourquoi pas, mais il te faudra tout de même les séparer pour les vérifier donc tu retomberas sur la même gestion des erreurs. ^^

Hors ligne

#22 02-02-2010 09:09:26

david7
Membre
Inscription : 05-06-2009
Messages : 87

Re : page de recommandation de site

oui en effet sad euh.. je te montre ma page entierement pour que tu m'explique comment faire (ou me fasse exceptionnellement mais je réve biensur^^) la voici :

<?php

include("../inc/conf.php");
include("../inc/fonctions.php");
include("verif.php");

if (isset($_POST["action"]) && $_POST["action"] == "send")
{
  $email1 = postInput($_POST["email1"]);
  $email2 = postInput($_POST["email2"]);
  $email3 = postInput($_POST["email3"]);
  $email4 = postInput($_POST["email4"]);
  $email5 = postInput($_POST["email5"]);
  $email6 = postInput($_POST["email6"]);
  $message = postInput($_POST["message"]);

  if ($email1 != "")
  {
    if (!EmailOK($email1))
    {
      $_GET["msg"] = "email1 est invalide";
    }
  }
  if ($email2 != "")
  {
    if (!EmailOK($email2))
    {
      $_GET["msg"] = "email2 est invalide";
    }
  }
  if ($email3 != "")
  {
    if (!EmailOK($email3))
    {
      $_GET["msg"] = "email3 est invalide";
    }
  }
  if ($email4 != "")
  {
    if (!EmailOK($email4))
    {
      $_GET["msg"] = "email4 est invalide";
    }
  }
  if ($email5 != "")
  {
    if (!EmailOK($email5))
    {
      $_GET["msg"] = "email5 est invalide";
    }
  }
  if ($email6 != "")
  {
    if (!EmailOK($email6))
    {
      $_GET["msg"] = "email6 est invalide";
    }
  }
  if (empty($_GET["msg"]))
  {
    $message = addslashes($message);
    $dateheure = date("Y-m-d H:i:s");

    $email = "";
    if (!empty($email1)) $email .= ','.$email1;
    if (!empty($email2)) $email .= ','.$email2;
    if (!empty($email3)) $email .= ','.$email3;
    if (!empty($email4)) $email .= ','.$email4;
    if (!empty($email5)) $email .= ','.$email5;
    if (!empty($email6)) $email .= ','.$email6;

    //$email = $email1.','.$email2.','.$email3.','.$email4.','.$email5.','.$email6;

    mail($email,"[NomSite] Invitation","Bonjour,

[url]http://www.nomsite.fr/membres/inscription.php[/url]

$message

Cordialement, NomSite
-----
Ceci est un message automatique
Merci de ne pas répondre","From: ".$config["noreply"]);

    header("location: inviter.php?msg=OK");
    exit();
  }
}
else
{
  $email1 = "";
  $email2 = "";
  $email3 = "";
  $email4 = "";
  $email5 = "";
  $email6 = "";
  $message = "";
}

include("../inc/header.php");

?>

        <h1>Parrainez ici vos amis !</h1>

<?php

if (!empty($_GET["msg"]))
{
$msg = str_replace("+"," ",$_GET["msg"]);
$msg = stripslashes($msg);
echo("$msg<br /><br />");
}

?>

<form action="inviter.php" method="post">
<input type="hidden" name="action" value="send" />

<table border="0" cellspacing="1" cellpadding="3">
  <tr>
    <td colspan="2">Emails de vos amis :<br />(Vous pouvez recommander 6 amis maximum).</td>
  </tr>
  <tr>
    <td>1.<input type="text" name="email1" size="30" value="<?php echo($email1); ?>" maxlength="155" /></td>
    <td>2.<input type="text" name="email2" size="30" value="<?php echo($email2); ?>" maxlength="155" /></td>
  </tr>
  <tr>
    <td>3.<input type="text" name="email3" size="30" value="<?php echo($email3); ?>" maxlength="155" /></td>
    <td>4.<input type="text" name="email4" size="30" value="<?php echo($email4); ?>" maxlength="155" /></td>
  </tr>
  <tr>
    <td>5.<input type="text" name="email5" size="30" value="<?php echo($email5); ?>" maxlength="155" /></td>
    <td>6.<input type="text" name="email6" size="30" value="<?php echo($email6); ?>" maxlength="155" /></td>
  </tr>
  <tr>
    <td colspan="2">Message personnalisé (optionnel) :</td>
  </tr>
  <tr>
    <td colspan="2"><textarea name="message" cols="40" rows="5"><?php echo($message); ?></textarea></td>
  </tr>
</table>

<br />

<input type="submit" value="Valider" />

</form>

<?php

include("../inc/footer.php");

?>

Dernière modification par david7 (02-02-2010 09:09:55)

Hors ligne

#23 02-02-2010 10:00:08

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : page de recommandation de site

Bah tes tests sont bon, ça il n'y a pas à y retoucher. A la rigueur pour gagner de la place et des itérations tu peux faire ainsi :

if (!empty($email1) && !EmailOK($email1))
  {
      $_GET["msg"] = "email1 est invalide";
  }

Sinon fais le test de debug que je t'ai proposé. Actuellement je suis presque certain que tes variables ne sont pas vides.

Et initialises moi $_GET['msg'] à vide.

Hors ligne

#24 02-02-2010 11:10:36

david7
Membre
Inscription : 05-06-2009
Messages : 87

Re : page de recommandation de site

xTG a écrit :

Remplace toujours les != "" par la fonction !empty() cela ferra déjà bien plus propre.
Ensuite un petit test pour voir si la variable est effectivement vide ou non : tu rajoutes un caractère devant et un derrière.
Et tu l'affiches.

$maVar = 'a'.$maVar.'b';

celui ci ? mais.. explique moi pourquoi (je dormirais avec plus de connaissance ce soir^^) car pour moi si le visiteur rempli un champ email c'est pas vide !

a mon avis le probleme c'est que le script rajoute toujours une virgule MEME s'il y a pas les 6 emails de rempli par le visiteur.

sinon j'ai modifié la page comme ceci :


<?php

include("../inc/conf.php");
include("../inc/fonctions.php");
include("verif.php");

if (isset($_POST["action"]) && $_POST["action"] == "send")
{
  $email1 = postInput($_POST["email1"]);
  $email2 = postInput($_POST["email2"]);
  $email3 = postInput($_POST["email3"]);
  $email4 = postInput($_POST["email4"]);
  $email5 = postInput($_POST["email5"]);
  $email6 = postInput($_POST["email6"]);
  $message = postTextarea($_POST["message"]);

  if (!empty($email1) && !EmailOK($email1))
  {
    $_GET["msg"] = "email1 est invalide";
  }
  if (!empty($email2) && !EmailOK($email2))
  {
    $_GET["msg"] = "email2 est invalide";
  }
  if (!empty($email3) && !EmailOK($email3))
  {
    $_GET["msg"] = "email3 est invalide";
  }
  if (!empty($email4) && !EmailOK($email4))
  {
    $_GET["msg"] = "email4 est invalide";
  }
  if (!empty($email5) && !EmailOK($email5))
  {
    $_GET["msg"] = "email5 est invalide";
  }
  if (!empty($email6) && !EmailOK($email6))
  {
    $_GET["msg"] = "email6 est invalide";
  }

  if (empty($_GET["msg"]))
  {
    $message = addslashes($message);
    $dateheure = date("Y-m-d H:i:s");

    $email = "";
    if (!empty($email1)) $email .= ','.$email1;
    if (!empty($email2)) $email .= ','.$email2;
    if (!empty($email3)) $email .= ','.$email3;
    if (!empty($email4)) $email .= ','.$email4;
    if (!empty($email5)) $email .= ','.$email5;
    if (!empty($email6)) $email .= ','.$email6;

    mail($email,"[NomSite] Invitation","Bonjour,

[url]http://www.nomsite.fr/membres/inscription.php[/url]

$message

Cordialement, NomSite
-----
Ceci est un message automatique
Merci de ne pas répondre","From: ".$config["noreply"]);

    header("location: inviter.php?msg=OK");
    exit();
  }
}
else
{
  $email1 = "";
  $email2 = "";
  $email3 = "";
  $email4 = "";
  $email5 = "";
  $email6 = "";
  $message = "";
}

include("../inc/header.php");

?>

        <h1>Parrainez ici vos amis !</h1>

<?php

if (!empty($_GET["msg"]))
{
$msg = str_replace("+"," ",$_GET["msg"]);
$msg = stripslashes($msg);
echo("$msg<br /><br />");
}

?>

<form action="inviter.php" method="post">
<input type="hidden" name="action" value="send" />

<table border="0" cellspacing="1" cellpadding="3">
  <tr>
    <td colspan="2">Emails de vos amis :<br />(Vous pouvez recommander 6 amis maximum).</td>
  </tr>
  <tr>
    <td>1.<input type="text" name="email1" size="30" value="<?php echo($email1); ?>" maxlength="155" /></td>
    <td>2.<input type="text" name="email2" size="30" value="<?php echo($email2); ?>" maxlength="155" /></td>
  </tr>
  <tr>
    <td>3.<input type="text" name="email3" size="30" value="<?php echo($email3); ?>" maxlength="155" /></td>
    <td>4.<input type="text" name="email4" size="30" value="<?php echo($email4); ?>" maxlength="155" /></td>
  </tr>
  <tr>
    <td>5.<input type="text" name="email5" size="30" value="<?php echo($email5); ?>" maxlength="155" /></td>
    <td>6.<input type="text" name="email6" size="30" value="<?php echo($email6); ?>" maxlength="155" /></td>
  </tr>
  <tr>
    <td colspan="2">Message personnalisé (optionnel) :</td>
  </tr>
  <tr>
    <td colspan="2"><textarea name="message" cols="40" rows="5"><?php echo($message); ?></textarea></td>
  </tr>
</table>

<br />

<input type="submit" value="Valider" />

</form>

<?php

include("../inc/footer.php");

?>
 

c'est déjà mieu avec ta methode pour les vérif en haut.. wink

Hors ligne

#25 02-02-2010 11:24:12

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : page de recommandation de site

Enlèves la virgule que tu ajoutes devant $email1. ^^

celui ci ? mais.. explique moi pourquoi (je dormirais avec plus de connaissance ce soir^^) car pour moi si le visiteur rempli un champ email c'est pas vide !

Bien sûr mais ton soucis survient lorsque l'utilisateur ne remplit pas un champs. Donc je soupçonne le champ qui n'a pas été remplie d'être remplie quelque part dans ton script.

Sinon rajoutes l'initialisation de la variable $_GET['msg'].

$_GEt['msg'] = '';

Et pourquoi utiliser une variable _GET pour ces messages d'erreurs ?
Une variable locale aurait suffit pour ton code.

Hors ligne

Pied de page des forums