2009-10-23 3 views
0

나는 데이터베이스에서 모든 사용자 정보를 얻고 타임 스탬프 (fourteendays)를 확인하고 시간을 확인하기 위해 노력하고있다. 지금은 시간 비트가 작동하지만 보낼 수 없다. 모든 시간이> fourteendays 일 때php mail() statements

$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

그 SQL 문과 while 루프는 일반적인 디자인 패턴으로 thedailywtf에 등장했습니다. – llamaoo7

+0

그래, 고전적인 안티 패턴. 추억을 다시 불러옵니다 :) –

답변

3

내가 대신 쿼리에 다시 모든 데이터를 당기고, SQL에서 날짜 비교를 수행하는 것이 좋습니다 :

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

, 데이터베이스의 해당 열에 무엇인가? 그것이 타임 스탬프라면, 왜 그렇게 부르지 않습니까? 내가 놓친 게 있니?

+0

예 해당 타임 스탬프 – Rickstar

+1

"EmailTime"또는 더 직관적이라고 생각하는 것이 좋습니다. 업데이트 된 SQL 문을 사용하여이 작업을 수행 할 수 있었습니까? –

1

시도해보십시오. 그 이상은 14 일 이상입니다.

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

또한 SELECT *는 좋지 않습니다. 해당 쿼리에서 필요한 필드 만 선택해야합니다.

+0

SELECT *는 실제로 필요하지 않은 행을 선택하는 것보다 나쁘지 않습니다. – MarkR

0

이전에 스크립트에서 '$ timenow'변수를 이미 설정했다고 가정하고 비교할 때 두 시간 형식이 동일한 지 확인해야합니다. 그건 내 문제 였어.

는 날짜 관련 PHP 정보를 위해, 나는 지금()가 원하는 타임 스탬프를 제공한다는 가정입니다

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

0

심지어

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

다음 링크를 방문 - 그것은하지 않습니다 UTC가 될 수 있습니다 (하지만 그 사실을 알고 계셨습니까?).