Geburtstagsscript - Geburtsjahr mit date() abgleichen

Hi,

t leider nicht... warum auch immer, dabei sieht es so wie es jetzt ist so aus als müsste es gehen, aber trotzdem danke!

na, denk doch mal nach. Du liest nur den ersten gefundenen Benutzer aus dieser unsortierten Datenbankabfrage. Wenn der nunmal nicht Geburtstag hat...

Da würde jetzt zumindest eine Schleife fehlen. Das ist in der Form aber trotzdem eine schlechte Lösung, da Du alle User durchnudeln musst, ob die nun Geburtstag haben oder nicht. Frage nur die Benutzer ab, die Geburtstag haben und durchlaufe das Ergebnis in einer Schleife. Einen Link auf die Datums- und Zeitfunktionen von MySQL habe ich Dir schon gepostet. Für Dein Problem kommen MONTH(), DAY() und NOW() in Frage.

LG
 
So hab ich es jetzt - aber nun hab ich glaub alles durcheinander gebracht... Bin zich Stunden am basteln, und komm einfach nicht dahinter! So wird das nichts...

PHP:
<?php
	 
  $get_setting=safe_query("SELECT last_bd_mail FROM ".PREFIX."settings");
	$data=mysql_fetch_assoc($get_setting);
	$now=time();


//  nur beim ersten benutzer!
//	
//	if($data['last_bd_mail']<$now && (date("d",$data['last_bd_mail'])!=date("d"))){
//		ignore_user_abort(1);

// 	     $test='1';		
//   if ($test='1'){
  
  $get_user=safe_query("SELECT nickname, userID, email DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW()) - TO_DAYS(birthday)), '%y') 'age' FROM ".PREFIX."user WHERE DAYOFYEAR(birthday)=DAYOFYEAR(NOW()+1)");
	$n=0;
	while($db=mysql_fetch_array($get_user)) {
		$n++;
		$years=$db['age'];
		if($n>1) {

			$betreff="Happy Birthday";
			$nachricht="Alles Gute zum Geburtstag w³nschen Dir die Admins  von ".$hp_url;
			$sender      = $admin_email;
			$empfaenger  = $admin_email;		
			$trenner = md5(uniqid(time()));
			$header  = "From: $sender\n";
			$header .= 'MIME-Version: 1.0';
			$header .= "\nContent-Type: text/plain; boundary=$trenner\n\n";
			$header .= 'This is a multi-part message in MIME format';
			$header .= "\n--$trenner\n";
			$header .= 'Content-Type: text/plain';
			$header .= "\n";
			$header .= 'Content-Transfer-Encoding: 8bit';
			$header .= "\n\n$nachricht\n--$trenner\nContent-Type: text/plain; \n";
			$header .= "\n--$trenner--";		
			mail($empfaenger, $betreff, $nachricht, $header);
		}else {

			$betreff="Happy Birthday";
			$nachricht="Alles Gute zum Geburtstag w³nschen Dir die Admins  von ".$hp_url;
			$sender      = $admin_email;
			$empfaenger  = $admin_email;		
			$trenner = md5(uniqid(time()));
			$header  = "From: $sender\n";
			$header .= 'MIME-Version: 1.0';
			$header .= "\nContent-Type: text/plain; boundary=$trenner\n\n";
			$header .= 'This is a multi-part message in MIME format';
			$header .= "\n--$trenner\n";
			$header .= 'Content-Type: text/plain';
			$header .= "\n";
			$header .= 'Content-Transfer-Encoding: 8bit';
			$header .= "\n\n$nachricht\n--$trenner\nContent-Type: text/plain; \n";
			$header .= "\n--$trenner--";		
			mail($empfaenger, $betreff, $nachricht, $header);
		}	
    
    }
  
  safe_query("UPDATE ".PREFIX."settings SET last_bd_mail='".time()."'");
  
//}

	
?>

Vorher, war ich glaub ich schon näher dran, wo es so aussah...

PHP:
<?php
	  
  $get_user=safe_query("SELECT nickname, birthday, email FROM ".PREFIX."user" );
  $data_user=mysql_fetch_assoc($get_user); 
 
  $heute_d=date("d");
  $heute_m=date("m");  
  $gebuser_d=date("d", $get_user['birthday']);
  $gebuser_m=date("m", $get_user['birthday']);
	
	$get_setting=safe_query("SELECT last_bd_mail FROM ".PREFIX."settings");
	$data=mysql_fetch_assoc($get_setting);
	$now=time();


//  nur beim ersten benutzer!
//	
//	if($data['last_bd_mail']<$now && (date("d",$data['last_bd_mail'])!=date("d"))){
//		ignore_user_abort(1);

// 	     $test='1';		
//   if ($test='1'){
 
if($heute_d == $gebuser_d && $heute_m == $gebuser_m) {

			$betreff="Happy Birthday";
			$nachricht="Alles Gute zum Geburtstag w³nschen Dir die Admins  von ".$hp_url;
			$sender      = $admin_email;
			$empfaenger  = $admin_email;		
			$trenner = md5(uniqid(time()));
			$header  = "From: $sender\n";
			$header .= 'MIME-Version: 1.0';
			$header .= "\nContent-Type: text/plain; boundary=$trenner\n\n";
			$header .= 'This is a multi-part message in MIME format';
			$header .= "\n--$trenner\n";
			$header .= 'Content-Type: text/plain';
			$header .= "\n";
			$header .= 'Content-Transfer-Encoding: 8bit';
			$header .= "\n\n$nachricht\n--$trenner\nContent-Type: text/plain; \n";
			$header .= "\n--$trenner--";		
			mail($empfaenger, $betreff, $nachricht, $header);
		}
		else{
			$fp='nichts machen!';
		}	
		safe_query("UPDATE ".PREFIX."settings SET last_bd_mail='".time()."'");

//}
	
?>

Kann mir nicht einfach irgendjemand eine Lösung posten, die auch funktioniert, und die ich verstehe? Glaub ich hab mir schon zu viele Haare an dem Ding ausgerissen^^
 
Hi,

Kann mir nicht einfach irgendjemand eine Lösung posten, die auch funktioniert, und die ich verstehe?

nein, dann lernst Du's ja nie und bist bei Deinem nächsten Problem genauso hilflos...

Setze [phpf]error_reporting[/phpf] auf E_ALL, dann wirst Du feststellen, dass die Datenbankabfrage fehlschlägt. Nutze [phpf]mysql_error[/phpf], dann bekommst Du auch die Fehlermeldung. Hinter email fehlt ein Komma und Spaltennamen (auch Aliase) setzt man (wenn nötig) in Backticks, Hochkommata begrenzen Strings (das sind Grundlagen). Bevor Du so eine Abfrage in Dein Script baust, solltest Du sie vielleicht auch mal in phpMyAdmin testen, ob sie überhaupt das Gewünschte liefert.

LG
 
Lösungsvorschläge wurden eigentlich schon genug gepostet.
Am besten schränkst du schon direkt die SQL Ausgabe ein.

Also
PHP:
$result = safe_query("SELECT nickname, userID, email FROM ".$Prefix."user WHERE DAYOFMONTH(birthday)=DAYOFMONTH(NOW()) AND MONTH(birthday)=MONTH(NOW())")
while($row = mysql_fetch_array($result)) {
    //Hier kannst du nun mit $row['nickname'] usw. auf die einzelnen Felder zugreifen.
}
 
Hallo,

ersteinmal vielen Dank für eure Geduld mit mir. Ich sitze nun wieder seit heute Mittag an dem Script und habe unzählige Varianten ausprobiert. Die aktuellste ist diese hier, wo er meckert und sagt,

Parse error: syntax error, unexpected T_WHILE in /home/www/tonacht/mainpage/_birthday.php on line 14

PHP:
<?php

// Letztes Sendedatum ermitteln	
	$get_setting=safe_query("SELECT last_bd_mail FROM ".PREFIX."settings");
	$data=mysql_fetch_assoc($get_setting);
	$now=time();

// Beim ersten Besuch ausführen
/*	if($data['last_bd_mail']<$now && (date("d",$data['last_bd_mail'])!=date("d"))){
		ignore_user_abort(1);  */

// Alle Geburtstagskinder raussuchen, und Mail versenden
  $result = safe_query("SELECT nickname, userID, email FROM ".$Prefix."user WHERE DAYOFMONTH(birthday)=DAYOFMONTH(NOW()) AND MONTH(birthday)=MONTH(NOW())")
  while($row = mysql_fetch_array($result)) { 

			$betreff="Happy Birthday";
			$nachricht="Alles Gute zum Geburtstag w³nschen Dir die Admins  von ".$hp_url;
			$sender      = $admin_email;
			$empfaenger  = $row['email'];		
			$trenner = md5(uniqid(time()));
			$header  = "From: $sender\n";
			$header .= 'MIME-Version: 1.0';
			$header .= "\nContent-Type: text/plain; boundary=$trenner\n\n";
			$header .= 'This is a multi-part message in MIME format';
			$header .= "\n--$trenner\n";
			$header .= 'Content-Type: text/plain';
			$header .= "\n";
			$header .= 'Content-Transfer-Encoding: 8bit';
			$header .= "\n\n$nachricht\n--$trenner\nContent-Type: text/plain; \n";
			$header .= "\n--$trenner--";		
			mail($empfaenger, $betreff, $nachricht, $header);
		}

// Sendedatum setzen		
		safe_query("UPDATE ".PREFIX."settings SET last_bd_mail='".time()."'");


// }


	
?>

Das Prinzip von DAYOFMONTH, MONTH usw. hab ich begriffen =) und das ermitteln von allen Emailadressen, Nicks und IDs, welche "heute " Geburtstag haben funktioniert einwandfrei. Zumindest in phpMyAdmin...

Aber funktionieren will es trotzallem nicht!
 
Zurück