Ou est l'erreur ?

Résolu
Arthur -  
jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,
je cherche a faire un script php qui se déclenche sur evenement, mais celui ci ne fonctionne pas.
je vous poste le code car je ne vois pas ou est l'erreur
<? include('config.php')?>
<?php
$sql = mysql_query("SELECT * FROM users");
while($annif = mysql_fetch_array($sql)){
        if (date("d/m/Y") == $annif['date'] AND $Destinataire==0){
                // Envoi du mail
        }
}
?>
<?
$Destinataire =$_GET['email'];
$age=$_GET['age'];
$prenom=$_GET['prenom'];
$Sujet = "Joyeux anniversaire";

$From  = "From:***@***";
$From .= "MIME-version: 1.0\n";
$From .= "Content-type: text/html; charset= utf8\n";

$Message = ("test");

if (mail($Destinataire,$Sujet,$Message,$From))echo"Mail en cours d'envoi....";
else echo "Echec de l’envoi du mail.";
?>

La question est le pourquoi il m'affiche toujours echec de l'envoi du mail, et qu'il refuse de l'envoyé
merci d'avance de l'aide apportée
Arthur

4 réponses

  1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     
    Concnernant ton souci d'envoie de mail.. peux tu tester ce code (et uniquement ça !) :
    <?php
    
    //affichage des erreurs PHP
    error_reporting(E_ALL);
    
    require_once 'config.php';
    
    //envoi du Mail
     $to      = 'personne@example.com'; // a changer pour tester
     $subject = 'test envoie de mail';
     $message = 'Bonjour !';
     $headers = 'From: webmaster@example.com' . "\r\n" .
                      'Reply-To: webmaster@example.com' . "\r\n" .
                       'X-Mailer: PHP/' . phpversion();
    
    if(mail($to, $subject, $message, $headers)){
      echo "Mail envoyé";
    }else{
      echo "Erreur lors de l'envoie du mail";
    }
    


    Ensuite, concernant le reste de ton code... plusieurs choses ne vont pas !
    1 - Tu as visiblement des dates dans ta BDD .... et tu les a mis dans des varchar en format français... hors il existe un format spécial pour les dates dans les bdd ... les champs de type DATE. (qui sont au format Y-m-d )

    1 bis ) tu as nommé un de tes champs "date" .... c'est un mot clé réservé. Evite !! Renomme le plutôt date_anniv par exemple

    2 - Tu utilises l'ancienne extension mysql .. considérée comme obsolète ! . Je t'invite vivement à passer à mysqli ou (je préfère...) PDO.
    voir ici : https://www.commentcamarche.net/faq/43261-php-l-extension-mysql-est-obsolete#top

    3 - Une fois que tu auras procédé aux modif (du point °1 et 1 bis sur le champ date...)
    tu pourras faire une requête ne remontant que les anniv du jour.
    SELECT * 
    FROM users
    WHERE date_anniv = DATE_FORMAT(now(),'%Y-%m-%d')
    
    1
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       
      Je viens de pense... vu qu'il s'agit de dates anniversaire ... je suppose que seuls les Mois/jours sont à prendre en compte .. pas l'année.
      La requête SQL devient alors :
      SELECT * 
      FROM users
      WHERE DATE_FORMAT(date_anniv,'%m-%d') = DATE_FORMAT(now(),'%m-%d')
      

      ou tu peux aussi faire :
      SELECT * 
      FROM users
      WHERE month(date_anniv) = month(now())
         AND  day(date_anniv) = day(now())
      
      0
    2. Arthur
       
      Avec ton code cela fonctionne parfaitement, le soucis est que si j'ai plusieurs anniversaire le même jour ( créé a partir d'une base de test afin de ne pas importuner les clients) mon code d'email ne selectionnes qu'un seul et unique client et pas tous...
      0
      1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832 > Arthur
         
        avec lequel de mes codes ??
        Celui du mail ?
        C'est juste pour un test ... il faudra ensuite le remettre dans la boucle issues de ta requête SQL. (une fois que tu auras tenu compte des mes remarques précédentes)
        0
  2. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     
    Bonjour
    Tu es en local ou sur un serveur ?
    0
    1. Arthur
       
      bonsoir,
      Je suis sur un serveur,
      Il prend directement les informations en bdd, ce qui est plus facile pour faire les tests etant donné que j'ai plusieurs anniversaire ce mois ci, et j'aimerais faire une tache cron sur la page afin d'automatiser la tache. Je ne comprends pas trop mon erreur. Merci de ta réponse
      0
  3. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     
    Tu ne te sers pas de ta requete ?
    As tu fais un echo de tes variables pour voir si elles sont bonnes ?
    0
    1. Arthur
       
      je ne me sert pas encore de ma requete temps que le code est mauvais. Etant donné que le script ne fonctionne pas. Tout à l'air d'être ok coté variable...
      0
    2. Arthur
       
      et si je met ceci
      <? include ('config.php')?>
      <?php
      $sql = mysql_query("SELECT * FROM users");
      while($annif = mysql_fetch_array($sql)){
              if (date("d/m/Y") == $annif['date'] );{
      ?>
      <?
        }
      }
         
        $e_mail = $annif['email']; //prend l'email de la table 
      
        //Contenu du mail 
        $contenu = ''; 
        $contenu .= '':
        ';
        $contenu .=  ''; 
        
        // envoi du mail HTML 
        $from = "From:  <***@***>\nMime-Version:"; 
        $from .= " 1.0\nContent-Type: text/html; charset=utf8"; 
        // envoie du mail 
        mail($e_mail,$nom,$contenu,$from); 
      
              echo'N° '.$compteur.' - '.$e_mail.' ; 
              $compteur++; // ajoute 1 à la variale du compteur 
              // '  // fin du while 
        
      
      
      ?>

      cela ne prend pas les email, et affiche juste l'echo.
      EDIT : Ajout des balises de code (la coloration syntaxique).
      Explications disponibles ici : ICI

      Merci d'y penser dans tes prochains messages.
      0
    3. Arthur
       
      etrange??
      0