2009-10-23 6 views
0

J'essaie d'obtenir toutes les informations des utilisateurs de la base de données et de vérifier l'horodatage (quatre jours) et le vérifier avec le temps maintenant j'ai obtenu le temps de travail, mais je ne peux pas l'envoyer à tous les quand le temps est> quatre temoinsphp mail() instructions

$result1 = mysql_query("SELECT * FROM accounts") or die (mysql_error()); 
while ($row1 = mysql_fetch_array($result1)) { 
$users_email = $row1['email']; 
$user_name = $row1['user']; 
$days_time = $row1['fourteendays']; 
if($timenow > $days_time){ 
mail($users_email, $subject, $emailbody, $headers); 
echo "email sent!"; 
} 
} 
+2

Cette instruction SQL et la boucle While est un modèle de conception courant qui utilise le paramètre thedailywtf. – llamaoo7

+0

Yup, anti-modèle classique. Ramène les souvenirs :) –

Répondre

3

Je recommande de faire la comparaison de date dans SQL, au lieu de tirer en arrière toutes les données dans votre requête:

SELECT * FROM accounts WHERE DateDiff(Now(), fourteendays) > 14 

En outre, ce qui est dans cette colonne dans la base de données? Si c'est un horodatage, pourquoi ne l'appelez-vous pas comme tel? Est-ce que je manque quelque chose?

+0

oui c'est un horodatage – Rickstar

+1

Vous pouvez envisager de l'appeler "EmailTime" ou quelque chose de plus intuitif. Avez-vous réussi à faire fonctionner cela en utilisant une instruction SQL mise à jour? –

1

Essayez. C'est supérieur ou égal à 14 jours.

if($timenow >= $days_time){ 
    mail($users_email, $subject, $emailbody, $headers); 
    echo "email sent!"; 
} 

De même, SELECT * est une mauvaise pratique. Vous ne devez sélectionner que les champs dont vous avez besoin dans cette requête.

+0

SELECT * n'est pas si mauvais comparé à la sélection de lignes dont vous n'avez pas réellement besoin. – MarkR

0

Je suppose que vous avez déjà défini la variable '$ timenow' quelque part auparavant dans le script et je m'assurerais de vérifier que les deux formats d'heure sont les mêmes lors de la comparaison. C'était mon problème dans le passé.

Pour plus d'informations php liées à la date, visitez le lien suivant

http://ca.php.net/manual/en/function.date.php

0

Ou encore

SELECT * FROM accounts WHERE fourneendays < (NOW() - INTERVAL 14 DAYS); 

Je suppose que maintenant() donne l'horodatage que vous voulez - il ne sera pas être en UTC (Mais tu le savais, non?)

Questions connexes