Ou est l'erreur ?

Résolu/Fermé
Arthur - Modifié par baladur13 le 20/10/2016 à 09:41
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 - 20 oct. 2016 à 10:54
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

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
20 oct. 2016 à 10:32
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
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
20 oct. 2016 à 10:37
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
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
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650 > Arthur
20 oct. 2016 à 10:54
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
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
19 oct. 2016 à 20:20
Bonjour
Tu es en local ou sur un serveur ?
0
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
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
19 oct. 2016 à 20:32
Tu ne te sers pas de ta requete ?
As tu fais un echo de tes variables pour voir si elles sont bonnes ?
0
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
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
etrange??
0
Un petit up :)
0