Signaler

Ou est l'erreur ? [Résolu]

Posez votre question Arthur - Dernière réponse le 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
Afficher la suite 
Utile
+1
moins plus
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 : http://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')
jordane45 15267Messages postés mercredi 22 octobre 2003Date d'inscription ModérateurStatut 22 novembre 2016 Dernière intervention - 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())
Répondre
Arthur- 20 oct. 2016 à 10:53
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...
Répondre
jordane45 15267Messages postés mercredi 22 octobre 2003Date d'inscription ModérateurStatut 22 novembre 2016 Dernière intervention - 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)
Répondre
Ajouter un commentaire
Utile
+0
moins plus
Bonjour
Tu es en local ou sur un serveur ?
Arthur- 19 oct. 2016 à 20:27
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
Répondre
Ajouter un commentaire
Utile
+0
moins plus
Tu ne te sers pas de ta requete ?
As tu fais un echo de tes variables pour voir si elles sont bonnes ?
Arthur- 19 oct. 2016 à 20:39
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...
Répondre
Arthur- 19 oct. 2016 à 21:10
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.
Répondre
Ajouter un commentaire
Utile
+0
moins plus
Un petit up :)
Ajouter un commentaire

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !