Thread Verfasser: TBR
Thread ID: 1294
Thread Info
Es gibt 22 Beiträge zu diesem Thema, und es wurde 6396 Mal angesehen.
 Thema drucken
Profilfeld unter "bearbeiten" ausblenden.
TBR
Hallo zusammen,

als absoluter Neuling in Sachen PHP, brauche ich leider etwas Hilfe.

Ich hätte gerne, dass das Alter und Geschlecht nur bei der Registrierung abgefragt wird und nicht nachträglich unter "Profil bearbeiten" geändert werden kann (außer vom Admin). Im Profil soll es natürlich weiterhin angezeigt werden.


PHP Fusion Version: 7.02.07

Ich wäre für jede Hilfe, Denkanstoss oder sogar Infusion dankbar Wink
Bearbeitet von TBR am 27. Juni 2017 07:44:20
Information:
PHP Version: Nicht ausgewählt •  MySQL Version: Nicht ausgewählt •  PHP-Fusion: Nicht ausgewählt
 
Septron
Hallo,

ganz einfach hier ein Beispiel vom Geburtstagsfeld/Birthday

Administration -> Benutzer -> Profilfelder -> Geburtstags Profilfeld bearbeiten und einen hacken bei:

- Pflichtfeld
- Registration

und schon wird dies als Pflichtfeld genutzt so wie bei der Registration.

lg Septron
Rechtschreibfehler und Fehlende Satzzeichen sind eine Sünde meiner
Gedanklichen Tastatur wer alle findet darf sie behalten.
Domain Owner of: SGI Fusion | PHPFusion-SupportClub | PHPFusion Germany | IUP Testseite | v9 DE Mod Testseite
Information:
PHP Version: 8.2.x •  MySQL Version: 5.7 •  PHP-Fusion: IUP-FIX-PHP8
 
TBR
Hallo Septron,

erstmal danke für die schnelle Antwort.
Leider kann man als Mitglied diese Felder noch nachträglich ändern. Gibt es da Einstellungsmöglichkeiten dies zu verhindern?
Information:
PHP Version: Nicht ausgewählt •  MySQL Version: Nicht ausgewählt •  PHP-Fusion: Nicht ausgewählt
 
Septron
Profilfelder sind dazu da das man Einstellungen vornimmt sonst machen diese keinen Sinn...
Rechtschreibfehler und Fehlende Satzzeichen sind eine Sünde meiner
Gedanklichen Tastatur wer alle findet darf sie behalten.
Domain Owner of: SGI Fusion | PHPFusion-SupportClub | PHPFusion Germany | IUP Testseite | v9 DE Mod Testseite
Information:
PHP Version: 8.2.x •  MySQL Version: 5.7 •  PHP-Fusion: IUP-FIX-PHP8
 
Krelli
Je nach Einsatzzweck kann es schon nützlich sein, wenn ein Mitglied nicht zwischen Geschlechtern hin und her wechseln kann oder sich nicht älter oder jünger machen kann.

Um z.b. das Geburtsdatum nur einmalig bei Registrierung angeben zu können würde ich folgendermaßen vorgehen:
1. Benutzerfeld "Geburtstag" auf "Pflichtfeld" und "Registrierung" festlegen
2. Das zugehörige Script "/includes/userfields/user_birthdate_include.php" bearbeiten. Nach dieser Zeile:

if (!defined("IN_FUSION")) { die("Access Denied"); }
folgende Zeile einfügen:

if(!iMEMBER || iADMIN) {

und ganz am unteren Ende des Scriptes, vor

?>
noch folgende Zeile einfügen:

}

Diese Änderung bewirkt, dass die Angabe des Geburtsdatums nur beim Registrierungsvorgang möglich ist. Außerdem ist es für Administratoren weiterhin bearbeitbar.
Für die Angabe des Geschlechtes muss identisch vorgegangen werden, die obigen Änderungen wären dann im Script für das Geschlecht vorzunehmen.

Zu beachten ist hierbei:
Bereits registrierte Mitglieder können nun ohne Mithilfe eines Administrators kein Geschlecht/Geburtsdatum mehr festlegen, falls bei Ihnen noch keines gesetzt ist.

Alternativ könnte man die Scripte auch so umbauen, so dass nur dann keine Änderung mehr möglich ist, wenn bereits ein Wert gespeichert worden ist. Das wäre dann aber etwas komplexer.
Information:
PHP Version: 8.2.x •  MySQL Version: Nicht ausgewählt •  PHP-Fusion: IPv9-DE-MOD
 
TBR
ja, sehe ich ähnlich. geschlecht und geburtstag ändert sich in der regel eigentlich nichtWink

vielen dank für deine mühe, systemweb.
genau so hab ich es mir gedacht, damit es im einzelfall doch noch vom admin änderbar ist.

ich werde mich die nächsten tage mal daran versuchen und dann berichten.
Information:
PHP Version: Nicht ausgewählt •  MySQL Version: Nicht ausgewählt •  PHP-Fusion: Nicht ausgewählt
 
John Doe

Zitat

ja, sehe ich ähnlich. geschlecht und geburtstag ändert sich in der regel eigentlich nicht


Beim Geburtstag gebe ich dir recht, der ändert sich nicht. Das Geschlecht ändert sich bei dem ein oder anderen schon!
Information:
PHP Version: Nicht ausgewählt •  MySQL Version: Nicht ausgewählt •  PHP-Fusion: Nicht ausgewählt
 
TBR
Kann passieren, aber für solche Einzelfälle wollte ich ja , dass der Admin es noch ändern kann.
Ich mag aber ehrlich gesagt, keine Grundsatzdiskussion darüber führen was alles sein könnte, oder wie viele eventuell ihr Geschlecht wirklich ändern.

Jeder hat da so seine eigene Vorstellung von seiner Seite und dessen Funktionen und vermutlich auch gute Gründe warum er diese oder jene Einstellung oder Design der Seite will.

Wer nicht helfen will/kann, der muss doch nicht auf den Thread reagieren und seine Zeit und Wissen investieren.



nochmal ein danke an systemweb. funktioniert!

Zusammengefügt am 23. August 2017 um 06:28:40:
Hallo zusammen,

ich habe leider gerade bemerkt, dass es alles so funktioniert wie gedacht, aber diese Profilfelder nur noch für Admins im Profil sichtbar sind und für andere User nicht. Wie kann man es im Profil für alle einblenden?
Bearbeitet von TBR am 23. August 2017 04:28:40
Information:
PHP Version: Nicht ausgewählt •  MySQL Version: Nicht ausgewählt •  PHP-Fusion: Nicht ausgewählt
 
Krelli
Hänge doch dein Script mal hier an. Das muss nämlich so verändert werden, dass nur das "update" dieses Profilfeldes gesperrt wird.
Information:
PHP Version: 8.2.x •  MySQL Version: Nicht ausgewählt •  PHP-Fusion: IPv9-DE-MOD
 
TBR
Hätte ich auch gleich dran denken können ;)

user_birthdate_include.php


<?php
 
/*
+--------------------------------------------------------+
| PHP-Fusion Content Management System                   |
| Copyright � 2002 - 2012 Nick Jones                     |
| http://www.php-fusion.co.uk/                           |
+--------------------------------------------------------+
| This program is released as free software under the    |
| Affero GPL license. You can redistribute it and/or     |
| modify it under the terms of this license which you    |
| can read by viewing the included agpl.txt or online    |
| at www.gnu.org/licenses/agpl.html. Removal of this     |
| copyright header is strictly prohibited without        |
| written permission from the original author(s).        |
+--------------------------------------------------------+
| Birthdate User Field                                   |
| Copyright � 2012 PHP-Fusion.at Development Team        |
| http://www.php-fusion.at/                              |
| http://development.php-fusion.at/                      |
+--------------------------------------------------------+
| Filename: user_birthdate_include.php                   |
| Fileversion: 1.0                                       |
+--------------------------------------------------------+
*/
 
if (!defined("IN_FUSION")) {
   die("Access Diened");
}
 
if(!iMEMBER || iADMIN) {
 
switch ($profile_method) {
   case "input":
      if (isset($user_data['user_birthdate'])) {
         $user_birthdate = $user_data['user_birthdate'];
      } else {
         $user_birthdate = "0000-00-00";
      }
      $user_birthdate = explode("-", $user_birthdate);
      $months = explode("|", $locale['months']);
 
      echo "<tr>\n";
      echo "<td class='tbl".$this -> getErrorClass("user_birthdate")."'><label for='user_day'>".$locale['uf_birthdate'].$required."</label></td>\n";
      echo "<td class='tbl".$this -> getErrorClass("user_birthdate")."'>\n";
         echo "<select name='user_day' id='user_day' class='textbox'>\n";
         echo "<option value='00'".($user_birthdate[2] == "00" ? " selected='selected'" : "").">".$locale['uf_birthdate_day']."</option>\n";
         for ($j = 1; $j <= 31; $j++) {
            echo "<option value='".$j."'".($user_birthdate[2] == $j ? " selected='selected'" : "").">".$j."</option>\n";
         }
         echo "</select>\n";
         echo "<select name='user_month' id='user_month' class='textbox'>\n";
         echo "<option value='00'".($user_birthdate[1] == "00" ? " selected='selected'" : "").">".$locale['uf_birthdate_month']."</option>\n";
         for ($j = 1; $j <= 12; $j++) {
            echo "<option value='".$j."'".($user_birthdate[1] == $j ? " selected='selected'" : "").">".$months[$j]."</option>\n";
         }
         echo "</select>\n";
         echo "<select name='user_year' id='user_year' class='textbox'>\n";
         echo "<option value='00'".($user_birthdate[0] == "0000" ? " selected='selected'" : "").">".$locale['uf_birthdate_year']."</option>\n";
         for ($j = date("Y"); (date("Y") - 99) <= $j; $j--) {
            echo "<option value='".$j."'".($user_birthdate[0] == $j ? " selected='selected'" : "").">".$j."</option>\n";
         }
         echo "</select>\n";
      echo "</td>\n";
      echo "</tr>\n";
 
      if ($required) {
         $this -> setRequiredJavaScript("user_day",   $locale['uf_birthdate_error']);
         $this -> setRequiredJavaScript("user_month", $locale['uf_birthdate_error']);
         $this -> setRequiredJavaScript("user_year",  $locale['uf_birthdate_error']);
      }
      break;
 
   case "display":
      if (isset($user_data['user_birthdate']) && $user_data['user_birthdate'] != "0000-00-00") {
         $user_birthdate = explode("-", $user_data['user_birthdate']);
         $months = explode("|", $locale['months']);
         $years = date("Y") - $user_birthdate[0];
         if (date("m-d") < ($user_birthdate[1]."-".$user_birthdate[2])) {
            $years--;
         }
 
         echo "<tr>\n";
         echo "<td class='tbl1'>".$locale['uf_birthdate']."</td>\n";
         echo "<td class='tbl1' align='right'>".number_format($user_birthdate[2])." ".$months[number_format($user_birthdate[1])]." ".$user_birthdate[0]." (".$years." ".($years == 1 ? $locale['uf_birthdate_year'] : $locale['uf_birthdate_years']).")</td>\n";
         echo "</tr>\n";
      }
      break;
 
   case "validate_insert":
   case "validate_update":
      $user_day = "00";
      $user_month = "00";
      $user_year = "0000";
 
      if (isset($_POST['user_day']) && isNum($_POST['user_day']) && $_POST['user_day'] != "00") {
         $user_day = $_POST['user_day'];
      }
      if (isset($_POST['user_month']) && isNum($_POST['user_month']) && $_POST['user_month'] != "00") {
         $user_month = $_POST['user_month'];
      }
      if (isset($_POST['user_year']) && isNum($_POST['user_year']) && $_POST['user_year'] != "0000") {
         $user_year = $_POST['user_year'];
      }
 
      if (($user_day != "00" && $user_month != "00" && $user_year != "0000") || $this -> _isNotRequired("user_birthdate")) {
         $this -> _setDBValue("user_birthdate", $user_year."-".$user_month."-".$user_day);
      } else {
         $this -> _setError("user_birthdate", $locale['uf_birthdate_error'], TRUE);
      }
      break;
 
}
}
 
?>


user_birthdate_include_var.php


<?php
/*-------------------------------------------------------+
| PHP-Fusion Content Management System
| Copyright (C) 2002 - 2010 Nick Jones
| http://www.php-fusion.co.uk/
+--------------------------------------------------------+
| file: user_beziehung_include_var.php
| Autor: XPaulchen94X
| Contact: J.-P.Hesse@T-Online.de
+--------------------------------------------------------+
| This program is released as free software under the
| Affero GPL license. You can redistribute it and/or
| modify it under the terms of this license which you
| can read by viewing the included agpl.txt or online
| at www.gnu.org/licenses/agpl.html. Removal of this
| copyright header is strictly prohibited without
| written permission from the original author(s).
+--------------------------------------------------------*/
if (!defined("IN_FUSION")) { die("Access Denied"); }
 
// Version of the user fields api
$user_field_api_version = "1.01.00";
$user_field_name = $locale['uf_beziehung_name'];
$user_field_desc = $locale['uf_beziehung_desc'];
$user_field_dbname = "user_beziehung";
$user_field_group = 1;
$user_field_dbinfo = "smallint(1) UNSIGNED NOT NULL default '0'";
?>



user_gender_include.php


<?php
/*-------------------------------------------------------+
| PHP-Fusion Content Management System
| Copyright � 2002 - 2008 Nick Jones
| http://www.php-fusion.co.uk/
+--------------------------------------------------------+
| Filename: user_gender_include.php
| Author: Gr@n@dE
| Homepage: www.granade.eu
+--------------------------------------------------------+
| This program is released as free software under the
| Affero GPL license. You can redistribute it and/or
| modify it under the terms of this license which you
| can read by viewing the included agpl.txt or online
| at www.gnu.org/licenses/agpl.html. Removal of this
| copyright header is strictly prohibited without
| written permission from the original author(s).
+--------------------------------------------------------*/
// Check Access
if (!defined("IN_FUSION")) { die("Access Denied"); }
 
if(!iMEMBER || iADMIN) {
 
// Handle Input
if ($profile_method == "input") {
   $user_gender = isset($user_data['user_gender']) ? $user_data['user_gender'] : "0";
   if ($this -> isError()) {
      $user_gender = (isset($_POST['user_gender']) && isNum($_POST['user_gender']) && $_POST['user_gender'] && $_POST['user_gender'] <= 2) ? $_POST['user_gender'] : $user_gender;
   }
   echo "<tr>\n";
   echo "<td class='tbl".$this -> getErrorClass("user_gender")."'>".$locale['uf_gender_001']."</td>\n";
   echo "<td class='tbl".$this -> getErrorClass("user_gender")."'>\n";
   echo "<label><input type='radio' name='user_gender' value='1'".($user_gender == "1" ? " checked='checked'" : "")." /> ".$locale['uf_gender_002']."</label>&nbsp;&nbsp;";
   echo "<label><input type='radio' name='user_gender' value='2'".($user_gender == "2" ? " checked='checked'" : "")." /> ".$locale['uf_gender_003']."</label>";
   echo "\n</td>\n";
   echo "</tr>\n";
 
// Handle Display
} elseif ($profile_method == "display") {
   if ($user_data['user_gender'] && $user_data['user_gender'] <= 2) {
      echo "<tr>\n";
      echo "<td width='1%' class='tbl1' style='white-space:nowrap'>".$locale['uf_gender_001']."</td>\n";
      echo "<td align='right' class='tbl1'>".($user_data['user_gender'] == 1 ? $locale['uf_gender_002'] : $locale['uf_gender_003'])."</td>\n";
      echo "</tr>\n";
   }
 
// Handle Register and Update
} elseif ($profile_method == "validate_insert"  || $profile_method == "validate_update") {
   if ((isset($_POST['user_gender']) && isNum($_POST['user_gender']) && $_POST['user_gender'] && $_POST['user_gender'] <= 2) || $this -> _isNotRequired("user_gender")) {
      $this -> _setDBValue("user_gender", $_POST['user_gender']);
   } else {
      $this -> _setError("user_gender", $locale['uf_gender_error'], true);
   }
}
}
?>


user_gender_include_var.php


<?php
/*-------------------------------------------------------+
| PHP-Fusion Content Management System
| Copyright � 2002 - 2008 Nick Jones
| http://www.php-fusion.co.uk/
+--------------------------------------------------------+
| Filename: user_gender_include_var.php
| Author: Gr@n@dE
| Homepage: www.granade.eu
+--------------------------------------------------------+
| This program is released as free software under the
| Affero GPL license. You can redistribute it and/or
| modify it under the terms of this license which you
| can read by viewing the included agpl.txt or online
| at www.gnu.org/licenses/agpl.html. Removal of this
| copyright header is strictly prohibited without
| written permission from the original author(s).
+--------------------------------------------------------*/
// Check Access
if (!defined("IN_FUSION")) { die("Access Denied"); }
 
// Version of the user fields api
$user_field_api_version = "1.01.00";
$user_field_name        = $locale['uf_gender'];
$user_field_desc        = $locale['uf_gender_desc'];
$user_field_dbname      = "user_gender";
$user_field_group       = 2;
$user_field_dbinfo      = "TINYINT(1) NOT NULL DEFAULT '0'";
 
?>
 
Information:
PHP Version: Nicht ausgewählt •  MySQL Version: Nicht ausgewählt •  PHP-Fusion: Nicht ausgewählt
 
Krelli
Für das Geschlecht muss die user_gender_include.php hiermit ausgetauscht werden:

<?php
/*-------------------------------------------------------+
| PHP-Fusion Content Management System
| Copyright © 2002 - 2008 Nick Jones
| http://www.php-fusion.co.uk/
+--------------------------------------------------------+
| Filename: user_gender_include.php
| Author: Gr@n@dE
| Homepage: www.granade.eu
+--------------------------------------------------------+
| This program is released as free software under the
| Affero GPL license. You can redistribute it and/or
| modify it under the terms of this license which you
| can read by viewing the included agpl.txt or online
| at www.gnu.org/licenses/agpl.html. Removal of this
| copyright header is strictly prohibited without
| written permission from the original author(s).
+--------------------------------------------------------*/

// Check Access
if (!defined("IN_FUSION")) { die("Access Denied"); }

// Handle Display, viewed by all
if ($profile_method == "display") {
   if ($user_data['user_gender'] && $user_data['user_gender'] <= 2) {
      echo "<tr>\n";
      echo "<td width='1%' class='tbl1' style='white-space:nowrap'>".$locale['uf_gender_001']."</td>\n";
      echo "<td align='right' class='tbl1'>".($user_data['user_gender'] == 1 ? $locale['uf_gender_002'] : $locale['uf_gender_003'])."</td>\n";
      echo "</tr>\n";
   }
}

// Handle Input, only if admin or unregistered
elseif ($profile_method == "input" && (!iMEMBER || iADMIN)) {
   $user_gender = isset($user_data['user_gender']) ? $user_data['user_gender'] : "0";
   if ($this -> isError()) {
      $user_gender = (isset($_POST['user_gender']) && isNum($_POST['user_gender']) && $_POST['user_gender'] && $_POST['user_gender'] <= 2) ? $_POST['user_gender'] : $user_gender;
   }
   echo "<tr>\n";
   echo "<td class='tbl".$this -> getErrorClass("user_gender")."'>".$locale['uf_gender_001']."</td>\n";
   echo "<td class='tbl".$this -> getErrorClass("user_gender")."'>\n";
   echo "<label><input type='radio' name='user_gender' value='1'".($user_gender == "1" ? " checked='checked'" : "")." /> ".$locale['uf_gender_002']."</label>&nbsp;&nbsp;";
   echo "<label><input type='radio' name='user_gender' value='2'".($user_gender == "2" ? " checked='checked'" : "")." /> ".$locale['uf_gender_003']."</label>";
   echo "\n</td>\n";
   echo "</tr>\n";
}

// Handle Register and Update, Update only if admin or unregistered
elseif (($profile_method == "validate_insert"  || $profile_method == "validate_update")  && (!iMEMBER || iADMIN)) {
   if ((isset($_POST['user_gender']) && isNum($_POST['user_gender']) && $_POST['user_gender'] && $_POST['user_gender'] <= 2) || $this -> _isNotRequired("user_gender")) {
      $this -> _setDBValue("user_gender", $_POST['user_gender']);
   } else {
      $this -> _setError("user_gender", $locale['uf_gender_error'], true);
   }
}
?>
Ist ungetestet, sollte aber funktionieren. Wenn das so passt mach ich dir bei nächster Gelegenheit noch das Geburtsdatum fertig
Information:
PHP Version: 8.2.x •  MySQL Version: Nicht ausgewählt •  PHP-Fusion: IPv9-DE-MOD
 
TBR
Vielen Dank , Systemweb.

Das ist ja doch mehr Aufwand gewesen, als ich dachte. Wird aber jetzt angezeigt und die Adminfunktion ist auch so geblieben wie gedacht. Fehlerlog ist auch sauber. *Top* :YAHOO:
Information:
PHP Version: Nicht ausgewählt •  MySQL Version: Nicht ausgewählt •  PHP-Fusion: Nicht ausgewählt
 
Krelli
Ok, dann das gleiche noch fürs Geburtsdatum. Ersetze die user_birthdate_include.php mit folgendem Inhalt:

<?php
/*
+--------------------------------------------------------+
| PHP-Fusion Content Management System                   |
| Copyright © 2002 - 2012 Nick Jones                     |
| http://www.php-fusion.co.uk/                           |
+--------------------------------------------------------+
| This program is released as free software under the    |
| Affero GPL license. You can redistribute it and/or     |
| modify it under the terms of this license which you    |
| can read by viewing the included agpl.txt or online    |
| at www.gnu.org/licenses/agpl.html. Removal of this     |
| copyright header is strictly prohibited without        |
| written permission from the original author(s).        |
+--------------------------------------------------------+
| Birthdate User Field                                   |
| Copyright © 2012 PHP-Fusion.at Development Team        |
| http://www.php-fusion.at/                              |
| http://development.php-fusion.at/                      |
+--------------------------------------------------------+
| Filename: user_birthdate_include.php                   |
| Fileversion: 1.0                                       |
+--------------------------------------------------------+
*/

if (!defined("IN_FUSION")) {
   die("Access Diened");
}

// Handle Display, viewed by all
if ($profile_method == "display") {
    if (isset($user_data['user_birthdate']) && $user_data['user_birthdate'] != "0000-00-00") {
      $user_birthdate = explode("-", $user_data['user_birthdate']);
      $months = explode("|", $locale['months']);
      // nachfolgend entfernt, da fehlerhafte Altersberechnung
      /*$years = date("Y") - $user_birthdate[0];
      if (date("m-d") < ($user_birthdate[1]."-".$user_birthdate[2])) {
         $years--;
      }*/
      // neue Berechnung:
      $today = date("Ymd");
      $birthday = $user_birthdate[0].($user_birthdate[1]<10 ? "0" : "").$user_birthdate[1].($user_birthdate[2]<10 ? "0" : "").$user_birthdate[2];
      $years = floor(($today - $birthday) / 10000);
      
      echo "<tr>\n";
      echo "<td class='tbl1'>".$locale['uf_birthdate']."</td>\n";
      echo "<td class='tbl1' align='right'>".number_format($user_birthdate[2])." ".$months[number_format($user_birthdate[1])]." ".$user_birthdate[0]." (".$years." ".($years == 1 ? $locale['uf_birthdate_year'] : $locale['uf_birthdate_years']).")</td>\n";
      echo "</tr>\n";
   }
}

// Handle Input, only if admin or unregistered
elseif ($profile_method == "input" && (!iMEMBER || iADMIN)) {
   if (isset($user_data['user_birthdate'])) {
      $user_birthdate = $user_data['user_birthdate'];
   } else {
      $user_birthdate = "0000-00-00";
   }
   $user_birthdate = explode("-", $user_birthdate);
   $months = explode("|", $locale['months']);
   echo "<tr>\n";
   echo "<td class='tbl".$this -> getErrorClass("user_birthdate")."'><label for='user_day'>".$locale['uf_birthdate'].$required."</label></td>\n";
   echo "<td class='tbl".$this -> getErrorClass("user_birthdate")."'>\n";
   echo "<select name='user_day' id='user_day' class='textbox'>\n";
   echo "<option value='00'".($user_birthdate[2] == "00" ? " selected='selected'" : "").">".$locale['uf_birthdate_day']."</option>\n";
   for ($j = 1; $j <= 31; $j++) {
      echo "<option value='".$j."'".($user_birthdate[2] == $j ? " selected='selected'" : "").">".$j."</option>\n";
   }
   echo "</select>\n";
   echo "<select name='user_month' id='user_month' class='textbox'>\n";
   echo "<option value='00'".($user_birthdate[1] == "00" ? " selected='selected'" : "").">".$locale['uf_birthdate_month']."</option>\n";
   for ($j = 1; $j <= 12; $j++) {
      echo "<option value='".$j."'".($user_birthdate[1] == $j ? " selected='selected'" : "").">".$months[$j]."</option>\n";
   }
   echo "</select>\n";
   echo "<select name='user_year' id='user_year' class='textbox'>\n";
   echo "<option value='00'".($user_birthdate[0] == "0000" ? " selected='selected'" : "").">".$locale['uf_birthdate_year']."</option>\n";
   for ($j = date("Y"); (date("Y") - 99) <= $j; $j--) {
      echo "<option value='".$j."'".($user_birthdate[0] == $j ? " selected='selected'" : "").">".$j."</option>\n";
   }
   echo "</select>\n";
    echo "</td>\n";
   echo "</tr>\n";
    if ($required) {
      $this -> setRequiredJavaScript("user_day",   $locale['uf_birthdate_error']);
      $this -> setRequiredJavaScript("user_month", $locale['uf_birthdate_error']);
      $this -> setRequiredJavaScript("user_year",  $locale['uf_birthdate_error']);
   }
}

// Handle Register and Update, Update only if admin or unregistered
elseif (($profile_method == "validate_insert"  || $profile_method == "validate_update")  && (!iMEMBER || iADMIN)) {
   $user_day = "00";
   $user_month = "00";
   $user_year = "0000";
   if (isset($_POST['user_day']) && isNum($_POST['user_day']) && $_POST['user_day'] != "00") {
      $user_day = $_POST['user_day'];
   }
   if (isset($_POST['user_month']) && isNum($_POST['user_month']) && $_POST['user_month'] != "00") {
      $user_month = $_POST['user_month'];
   }
   if (isset($_POST['user_year']) && isNum($_POST['user_year']) && $_POST['user_year'] != "0000") {
      $user_year = $_POST['user_year'];
   }
   if (($user_day != "00" && $user_month != "00" && $user_year != "0000") || $this -> _isNotRequired("user_birthdate")) {
      $this -> _setDBValue("user_birthdate", $user_year."-".$user_month."-".$user_day);
   } else {
      $this -> _setError("user_birthdate", $locale['uf_birthdate_error'], TRUE);
   }
}
?>


Hab wie vorher des "display" Bereich nach oben gezogen. Hier wurde mit switch und case gearbeitet, geändert auf if und else.

Die Altersberechnung war falsch, beim Test war ich wieder 1 Jahr jünger. Das hab ich ebenfalls korrigiert.
Viel Spaß! :)
Information:
PHP Version: 8.2.x •  MySQL Version: Nicht ausgewählt •  PHP-Fusion: IPv9-DE-MOD
 
TBR
Das ging ja fix.

Wird jetzt angezeigt, aber das Alter wird wohl falsch berechnet.

Bei mir wird es jetzt so angezeigt 1 Januar 1975 (-195484 Jahre). Nur bei den Admin Profilen. In den Userprofilen wird es richtig angezeigt.
Information:
PHP Version: Nicht ausgewählt •  MySQL Version: Nicht ausgewählt •  PHP-Fusion: Nicht ausgewählt
 
Krelli
Ich schau das später nochmal in Ruhe an, muss wohl was übersehen haben. War so zwischen Telefon und Forenposts reingequetscht.

Speichere bitte bei dem betreff. Admin das Geburtsdatum nochmal neu. Evtl. ist da noch ein anderes Format in der DB.

Deine user_birthdate_include_var.php enthält den Code der user_beziehung_include_var.php? Haste da was verwechselt?
Bearbeitet von Krelli am 25. August 2017 17:43:01
Information:
PHP Version: 8.2.x •  MySQL Version: Nicht ausgewählt •  PHP-Fusion: IPv9-DE-MOD
 
TBR
ja, da bin ich wohl in der Zeile verrutscht :-(


<?php

/*
+--------------------------------------------------------+
| PHP-Fusion Content Management System                   |
| Copyright © 2002 - 2012 Nick Jones                     |
| http://www.php-fusion.co.uk/                           |
+--------------------------------------------------------+
| This program is released as free software under the    |
| Affero GPL license. You can redistribute it and/or     |
| modify it under the terms of this license which you    |
| can read by viewing the included agpl.txt or online    |
| at www.gnu.org/licenses/agpl.html. Removal of this     |
| copyright header is strictly prohibited without        |
| written permission from the original author(s).        |
+--------------------------------------------------------+
| Birthdate User Field                                   |
| Copyright © 2012 PHP-Fusion.at Development Team        |
| http://www.php-fusion.at/                              |
| http://development.php-fusion.at/                      |
+--------------------------------------------------------+
| Filename: user_birthdate_include_var.php               |
| Fileversion: 1.0                                       |
+--------------------------------------------------------+
*/

if (!defined("IN_FUSION")) {
   die("Access Diened");
}

$user_field_api_version = "1.01.00";
$user_field_name  = $locale['uf_birthdate'];
$user_field_desc = $locale['uf_birthdate_desc'];
$user_field_dbname = "user_birthdate";
$user_field_group = 2;
$user_field_dbinfo = "DATE NOT NULL DEFAULT '0000-00-00'";

?>


Hab das Benutzerfeld jetzt einmal deaktiviert und wieder aktiviert, nun zeigt er mir gar nichts mehr an.

Zusammengefügt am 27. August 2017 um 19:16:57:
Hab gerade festgestellt, wenn man sich registriert zeigt er nun auch Fehler im Fehlerlog an.
Bearbeitet von TBR am 27. August 2017 17:16:57
Information:
PHP Version: Nicht ausgewählt •  MySQL Version: Nicht ausgewählt •  PHP-Fusion: Nicht ausgewählt
 
Krelli
Die Zeile

$user_field_dbinfo = "DATE NOT NULL DEFAULT '0000-00-00'";
in der user_birthdate_include_var.php ist für den Fehler verantwortlich.
In MySQL/MariaDB gibt es den Vorgabewert für ein Feld vom Typ "DATE" nicht mehr als "0000-00-00".
Eine gültige Vorgabe wäre aktuell "1001-01-01".

Das können wir aber nicht so einfach verwenden, denn Fusion geht nur dann von einem noch nicht angegebenen Geburtsdatum aus, wenn alles auf Null steht.

Hier müssen wir also ein bisschen "mogeln". Deaktiviere zunächst erst mal das Geburtsdatum, falls es noch als aktiviert gelistet wird.
Danach änderst du obige Zeile so ab:

$user_field_dbinfo = "VARCHAR(10) NOT NULL DEFAULT '0000-00-00'";
Nun lässt sich das Userfield auch wieder installieren.

Damit die Altersberechnung weiterhin funktioniert müssen wir noch sicherstellen, das einstellige Monatsnummern und Tage mit führenden Nullen in der DB gespeichert werden, so dass das zu speichernde Datum immer 10 Zeichen (inkl. der Bindestriche) hat.

Hierfür änderst du in der Datei user_birthdate_include.php folgende Zeile

$this -> _setDBValue("user_birthdate", $user_year."-".$user_month."-".$user_day);
so ab:

$this -> _setDBValue("user_birthdate", $user_year."-".str_pad($user_month, 2, "0", STR_PAD_LEFT)."-".str_pad($user_day, 2, "0", STR_PAD_LEFT));

Bearbeitet von Krelli am 28. August 2017 09:25:12
Information:
PHP Version: 8.2.x •  MySQL Version: Nicht ausgewählt •  PHP-Fusion: IPv9-DE-MOD
 
TBR
Hallo Systemweb,
danke für die Arbeit und super Beschreibung.

Das Alter wird bei mir nicht im Profil angezeigt, weder als User noch als Admin. Im Fehlerlog wird aber auch nichts angezeigt.

Hab es jetzt so drinne:


<?php
 
/*
+--------------------------------------------------------+
| PHP-Fusion Content Management System                   |
| Copyright � 2002 - 2012 Nick Jones                     |
| http://www.php-fusion.co.uk/                           |
+--------------------------------------------------------+
| This program is released as free software under the    |
| Affero GPL license. You can redistribute it and/or     |
| modify it under the terms of this license which you    |
| can read by viewing the included agpl.txt or online    |
| at www.gnu.org/licenses/agpl.html. Removal of this     |
| copyright header is strictly prohibited without        |
| written permission from the original author(s).        |
+--------------------------------------------------------+
| Birthdate User Field                                   |
| Copyright � 2012 PHP-Fusion.at Development Team        |
| http://www.php-fusion.at/                              |
| http://development.php-fusion.at/                      |
+--------------------------------------------------------+
| Filename: user_birthdate_include_var.php               |
| Fileversion: 1.0                                       |
+--------------------------------------------------------+
*/
 
if (!defined("IN_FUSION")) {
   die("Access Diened");
}
 
$user_field_api_version = "1.01.00";
$user_field_name  = $locale['uf_birthdate'];
$user_field_desc = $locale['uf_birthdate_desc'];
$user_field_dbname = "user_birthdate";
$user_field_group = 2;
$user_field_dbinfo = "VARCHAR(10) NOT NULL DEFAULT '0000-00-00'";
 
?>



<?php
/*
+--------------------------------------------------------+
| PHP-Fusion Content Management System                   |
| Copyright © 2002 - 2012 Nick Jones                     |
| http://www.php-fusion.co.uk/                           |
+--------------------------------------------------------+
| This program is released as free software under the    |
| Affero GPL license. You can redistribute it and/or     |
| modify it under the terms of this license which you    |
| can read by viewing the included agpl.txt or online    |
| at www.gnu.org/licenses/agpl.html. Removal of this     |
| copyright header is strictly prohibited without        |
| written permission from the original author(s).        |
+--------------------------------------------------------+
| Birthdate User Field                                   |
| Copyright © 2012 PHP-Fusion.at Development Team        |
| http://www.php-fusion.at/                              |
| http://development.php-fusion.at/                      |
+--------------------------------------------------------+
| Filename: user_birthdate_include.php                   |
| Fileversion: 1.0                                       |
+--------------------------------------------------------+
*/
 
if (!defined("IN_FUSION")) {
   die("Access Diened");
}
 
// Handle Display, viewed by all
if ($profile_method == "display") {
    if (isset($user_data['user_birthdate']) && $user_data['user_birthdate'] != "0000-00-00") {
      $user_birthdate = explode("-", $user_data['user_birthdate']);
      $months = explode("|", $locale['months']);
      // nachfolgend entfernt, da fehlerhafte Altersberechnung
      /*$years = date("Y") - $user_birthdate[0];
      if (date("m-d") < ($user_birthdate[1]."-".$user_birthdate[2])) {
         $years--;
      }*/
      // neue Berechnung:
      $today = date("Ymd");
      $birthday = $user_birthdate[0].($user_birthdate[1]<10 ? "0" : "").$user_birthdate[1].($user_birthdate[2]<10 ? "0" : "").$user_birthdate[2];
      $years = floor(($today - $birthday) / 10000);
 
      echo "<tr>\n";
      echo "<td class='tbl1'>".$locale['uf_birthdate']."</td>\n";
      echo "<td class='tbl1' align='right'>".number_format($user_birthdate[2])." ".$months[number_format($user_birthdate[1])]." ".$user_birthdate[0]." (".$years." ".($years == 1 ? $locale['uf_birthdate_year'] : $locale['uf_birthdate_years']).")</td>\n";
      echo "</tr>\n";
   }
}
 
// Handle Input, only if admin or unregistered
elseif ($profile_method == "input" && (!iMEMBER || iADMIN)) {
   if (isset($user_data['user_birthdate'])) {
      $user_birthdate = $user_data['user_birthdate'];
   } else {
      $user_birthdate = "0000-00-00";
   }
   $user_birthdate = explode("-", $user_birthdate);
   $months = explode("|", $locale['months']);
   echo "<tr>\n";
   echo "<td class='tbl".$this -> getErrorClass("user_birthdate")."'><label for='user_day'>".$locale['uf_birthdate'].$required."</label></td>\n";
   echo "<td class='tbl".$this -> getErrorClass("user_birthdate")."'>\n";
   echo "<select name='user_day' id='user_day' class='textbox'>\n";
   echo "<option value='00'".($user_birthdate[2] == "00" ? " selected='selected'" : "").">".$locale['uf_birthdate_day']."</option>\n";
   for ($j = 1; $j <= 31; $j++) {
      echo "<option value='".$j."'".($user_birthdate[2] == $j ? " selected='selected'" : "").">".$j."</option>\n";
   }
   echo "</select>\n";
   echo "<select name='user_month' id='user_month' class='textbox'>\n";
   echo "<option value='00'".($user_birthdate[1] == "00" ? " selected='selected'" : "").">".$locale['uf_birthdate_month']."</option>\n";
   for ($j = 1; $j <= 12; $j++) {
      echo "<option value='".$j."'".($user_birthdate[1] == $j ? " selected='selected'" : "").">".$months[$j]."</option>\n";
   }
   echo "</select>\n";
   echo "<select name='user_year' id='user_year' class='textbox'>\n";
   echo "<option value='00'".($user_birthdate[0] == "0000" ? " selected='selected'" : "").">".$locale['uf_birthdate_year']."</option>\n";
   for ($j = date("Y"); (date("Y") - 99) <= $j; $j--) {
      echo "<option value='".$j."'".($user_birthdate[0] == $j ? " selected='selected'" : "").">".$j."</option>\n";
   }
   echo "</select>\n";
    echo "</td>\n";
   echo "</tr>\n";
    if ($required) {
      $this -> setRequiredJavaScript("user_day",   $locale['uf_birthdate_error']);
      $this -> setRequiredJavaScript("user_month", $locale['uf_birthdate_error']);
      $this -> setRequiredJavaScript("user_year",  $locale['uf_birthdate_error']);
   }
}
 
// Handle Register and Update, Update only if admin or unregistered
elseif (($profile_method == "validate_insert"  || $profile_method == "validate_update")  && (!iMEMBER || iADMIN)) {
   $user_day = "00";
   $user_month = "00";
   $user_year = "0000";
   if (isset($_POST['user_day']) && isNum($_POST['user_day']) && $_POST['user_day'] != "00") {
      $user_day = $_POST['user_day'];
   }
   if (isset($_POST['user_month']) && isNum($_POST['user_month']) && $_POST['user_month'] != "00") {
      $user_month = $_POST['user_month'];
   }
   if (isset($_POST['user_year']) && isNum($_POST['user_year']) && $_POST['user_year'] != "0000") {
      $user_year = $_POST['user_year'];
   }
   if (($user_day != "00" && $user_month != "00" && $user_year != "0000") || $this -> _isNotRequired("user_birthdate")) {
      $this -> _setDBValue("user_birthdate", $user_year."-".str_pad($user_month, 2, "0", STR_PAD_LEFT)."-".str_pad($user_day, 2, "0", STR_PAD_LEFT));
   } else {
      $this -> _setError("user_birthdate", $locale['uf_birthdate_error'], TRUE);
   }
}
?>
 


Zusammengefügt am 28. August 2017 um 15:49:43:
Ich hänge nochmal den ursprünglichen Code ran, der einwandfrei funktioniert.

Wenn es weniger Aufwand ist, reicht es auch wenn es bei der Registrierung ein Pflichtfeld ist und nicht nachträglich unter "Profil bearbeiten" geändert werden kann, auch für den Admin. Diese Daten ändern sich ja nicht.

user_birthdate_include_var

<?php

/*
+--------------------------------------------------------+
| PHP-Fusion Content Management System                   |
| Copyright © 2002 - 2012 Nick Jones                     |
| http://www.php-fusion.co.uk/                           |
+--------------------------------------------------------+
| This program is released as free software under the    |
| Affero GPL license. You can redistribute it and/or     |
| modify it under the terms of this license which you    |
| can read by viewing the included agpl.txt or online    |
| at www.gnu.org/licenses/agpl.html. Removal of this     |
| copyright header is strictly prohibited without        |
| written permission from the original author(s).        |
+--------------------------------------------------------+
| Birthdate User Field                                   |
| Copyright © 2012 PHP-Fusion.at Development Team        |
| http://www.php-fusion.at/                              |
| http://development.php-fusion.at/                      |
+--------------------------------------------------------+
| Filename: user_birthdate_include_var.php               |
| Fileversion: 1.0                                       |
+--------------------------------------------------------+
*/

if (!defined("IN_FUSION")) {
   die("Access Diened");
}

$user_field_api_version = "1.01.00";
$user_field_name  = $locale['uf_birthdate'];
$user_field_desc = $locale['uf_birthdate_desc'];
$user_field_dbname = "user_birthdate";
$user_field_group = 2;
$user_field_dbinfo = "DATE NOT NULL DEFAULT '0000-00-00'";

?>


user_birthdate_include

<?php

/*
+--------------------------------------------------------+
| PHP-Fusion Content Management System                   |
| Copyright © 2002 - 2012 Nick Jones                     |
| http://www.php-fusion.co.uk/                           |
+--------------------------------------------------------+
| This program is released as free software under the    |
| Affero GPL license. You can redistribute it and/or     |
| modify it under the terms of this license which you    |
| can read by viewing the included agpl.txt or online    |
| at www.gnu.org/licenses/agpl.html. Removal of this     |
| copyright header is strictly prohibited without        |
| written permission from the original author(s).        |
+--------------------------------------------------------+
| Birthdate User Field                                   |
| Copyright © 2012 PHP-Fusion.at Development Team        |
| http://www.php-fusion.at/                              |
| http://development.php-fusion.at/                      |
+--------------------------------------------------------+
| Filename: user_birthdate_include.php                   |
| Fileversion: 1.0                                       |
+--------------------------------------------------------+
*/

if (!defined("IN_FUSION")) {
   die("Access Diened");
}

switch ($profile_method) {
   case "input":
      if (isset($user_data['user_birthdate'])) {
         $user_birthdate = $user_data['user_birthdate'];
      } else {
         $user_birthdate = "0000-00-00";
      }
      $user_birthdate = explode("-", $user_birthdate);
      $months = explode("|", $locale['months']);

      echo "<tr>\n";
      echo "<td class='tbl".$this -> getErrorClass("user_birthdate")."'><label for='user_day'>".$locale['uf_birthdate'].$required."</label></td>\n";
      echo "<td class='tbl".$this -> getErrorClass("user_birthdate")."'>\n";
         echo "<select name='user_day' id='user_day' class='textbox'>\n";
         echo "<option value='00'".($user_birthdate[2] == "00" ? " selected='selected'" : "").">".$locale['uf_birthdate_day']."</option>\n";
         for ($j = 1; $j <= 31; $j++) {
            echo "<option value='".$j."'".($user_birthdate[2] == $j ? " selected='selected'" : "").">".$j."</option>\n";
         }
         echo "</select>\n";
         echo "<select name='user_month' id='user_month' class='textbox'>\n";
         echo "<option value='00'".($user_birthdate[1] == "00" ? " selected='selected'" : "").">".$locale['uf_birthdate_month']."</option>\n";
         for ($j = 1; $j <= 12; $j++) {
            echo "<option value='".$j."'".($user_birthdate[1] == $j ? " selected='selected'" : "").">".$months[$j]."</option>\n";
         }
         echo "</select>\n";
         echo "<select name='user_year' id='user_year' class='textbox'>\n";
         echo "<option value='00'".($user_birthdate[0] == "0000" ? " selected='selected'" : "").">".$locale['uf_birthdate_year']."</option>\n";
         for ($j = date("Y"); (date("Y") - 99) <= $j; $j--) {
            echo "<option value='".$j."'".($user_birthdate[0] == $j ? " selected='selected'" : "").">".$j."</option>\n";
         }
         echo "</select>\n";
      echo "</td>\n";
      echo "</tr>\n";

      if ($required) {
         $this -> setRequiredJavaScript("user_day",   $locale['uf_birthdate_error']);
         $this -> setRequiredJavaScript("user_month", $locale['uf_birthdate_error']);
         $this -> setRequiredJavaScript("user_year",  $locale['uf_birthdate_error']);
      }
      break;
      
   case "display":
      if (isset($user_data['user_birthdate']) && $user_data['user_birthdate'] != "0000-00-00") {
         $user_birthdate = explode("-", $user_data['user_birthdate']);
         $months = explode("|", $locale['months']);
         $years = date("Y") - $user_birthdate[0];
         if (date("m-d") < ($user_birthdate[1]."-".$user_birthdate[2])) {
            $years--;
         }

         echo "<tr>\n";
         echo "<td class='tbl1'>".$locale['uf_birthdate']."</td>\n";
         echo "<td class='tbl1' align='right'>".number_format($user_birthdate[2])." ".$months[number_format($user_birthdate[1])]." ".$user_birthdate[0]." (".$years." ".($years == 1 ? $locale['uf_birthdate_year'] : $locale['uf_birthdate_years']).")</td>\n";
         echo "</tr>\n";
      }
      break;

   case "validate_insert":
   case "validate_update":
      $user_day = "00";
      $user_month = "00";
      $user_year = "0000";
      
      if (isset($_POST['user_day']) && isNum($_POST['user_day']) && $_POST['user_day'] != "00") {
         $user_day = $_POST['user_day'];
      }
      if (isset($_POST['user_month']) && isNum($_POST['user_month']) && $_POST['user_month'] != "00") {
         $user_month = $_POST['user_month'];
      }
      if (isset($_POST['user_year']) && isNum($_POST['user_year']) && $_POST['user_year'] != "0000") {
         $user_year = $_POST['user_year'];
      }
      
      if (($user_day != "00" && $user_month != "00" && $user_year != "0000") || $this -> _isNotRequired("user_birthdate")) {
         $this -> _setDBValue("user_birthdate", $user_year."-".$user_month."-".$user_day);
      } else {
         $this -> _setError("user_birthdate", $locale['uf_birthdate_error'], TRUE);
      }
      break;
      
}

?>


local-german

<?php

/*
+--------------------------------------------------------+
| PHP-Fusion Content Management System                   |
| Copyright © 2002 - 2012 Nick Jones                     |
| http://www.php-fusion.co.uk/                           |
+--------------------------------------------------------+
| This program is released as free software under the    |
| Affero GPL license. You can redistribute it and/or     |
| modify it under the terms of this license which you    |
| can read by viewing the included agpl.txt or online    |
| at www.gnu.org/licenses/agpl.html. Removal of this     |
| copyright header is strictly prohibited without        |
| written permission from the original author(s).        |
+--------------------------------------------------------+
| Birthdate User Field                                   |
| Copyright © 2012 PHP-Fusion.at Development Team        |
| http://www.php-fusion.at/                              |
| http://development.php-fusion.at/                      |
+--------------------------------------------------------+
| Filename: user_birthdate.php                           |
| Fileversion: 1.0                                       |
+--------------------------------------------------------+
*/

if (!defined("IN_FUSION")) {
   die("Access Diened");
}

$locale['uf_birthdate'] = "Geburtsdatum";
$locale['uf_birthdate_desc'] = "Zeigt das Geburtsdatum eines Benutzers an.";
$locale['uf_birthdate_error'] = "Du musst dein Geburtsdatum angeben.";
$locale['uf_birthdate_day'] = "Tag";
$locale['uf_birthdate_month'] = "Monat";
$locale['uf_birthdate_year'] = "Jahr";
$locale['uf_birthdate_years'] = "Jahre";

?>

Bearbeitet von TBR am 28. August 2017 13:49:43
Information:
PHP Version: Nicht ausgewählt •  MySQL Version: Nicht ausgewählt •  PHP-Fusion: Nicht ausgewählt
 
Krelli
Der ursprüngliche Code hatte ja nicht mehr funktioniert, da damit das Geburtsdatum nicht reaktivierbar ist und außerdem das Alter falsch berechnet wurde.

Hast du denn nach dem Einbau meiner Änderungen und reaktivieren des Userfields das Geburtsdatum neu gespeichert? Nach Entfernen und neu hinzufügen dieses Userfields sind nämlich alle Werte auf 0000-00-00 gesetzt.

Zusammengefügt am 28. August 2017 um 22:07:16:
Ich habe es gerade durchgetestet.
Bei der neuen Altersberechnung mussten die führenden Nullen raus, beim Speichern in der Datenbank müssen die aber bleiben.

Die Datei user_birthdate_include.php muss folgenden Inhalt haben:

<?php
/*
+--------------------------------------------------------+
| PHP-Fusion Content Management System                   |
| Copyright © 2002 - 2012 Nick Jones                     |
| http://www.php-fusion.co.uk/                           |
+--------------------------------------------------------+
| This program is released as free software under the    |
| Affero GPL license. You can redistribute it and/or     |
| modify it under the terms of this license which you    |
| can read by viewing the included agpl.txt or online    |
| at www.gnu.org/licenses/agpl.html. Removal of this     |
| copyright header is strictly prohibited without        |
| written permission from the original author(s).        |
+--------------------------------------------------------+
| Birthdate User Field                                   |
| Copyright © 2012 PHP-Fusion.at Development Team        |
| http://www.php-fusion.at/                              |
| http://development.php-fusion.at/                      |
+--------------------------------------------------------+
| Filename: user_birthdate_include.php                   |
| Fileversion: 1.0                                       |
+--------------------------------------------------------+
*/
 
if (!defined("IN_FUSION")) {
   die("Access denied");
}
 
// Handle Display, viewed by all
if ($profile_method == "display") {
    if (isset($user_data['user_birthdate']) && $user_data['user_birthdate'] != "0000-00-00") {
      $user_birthdate = explode("-", $user_data['user_birthdate']);
      $months = explode("|", $locale['months']);

      // neue Berechnung des Alters:
      $today = date("Ymd");
      $birthday = $user_birthdate[0].$user_birthdate[1].$user_birthdate[2];
      $years = floor(($today - $birthday) / 10000);
 
      echo "<tr>\n";
      echo "<td class='tbl1'>".$locale['uf_birthdate']."</td>\n";
      echo "<td class='tbl1' align='right'>".number_format($user_birthdate[2]).". ".$months[number_format($user_birthdate[1])]." ".$user_birthdate[0]." (".$years." ".($years == 1 ? $locale['uf_birthdate_year'] : $locale['uf_birthdate_years']).")</td>\n";
      echo "</tr>\n";
   }
}
 
// Handle Input, only if admin or unregistered
elseif ($profile_method == "input" && (!iMEMBER || iADMIN)) {
   if (isset($user_data['user_birthdate'])) {
      $user_birthdate = $user_data['user_birthdate'];
   } else {
      $user_birthdate = "0000-00-00";
   }
   $user_birthdate = explode("-", $user_birthdate);
   $months = explode("|", $locale['months']);
   echo "<tr>\n";
   echo "<td class='tbl".$this -> getErrorClass("user_birthdate")."'><label for='user_day'>".$locale['uf_birthdate'].$required."</label></td>\n";
   echo "<td class='tbl".$this -> getErrorClass("user_birthdate")."'>\n";
   echo "<select name='user_day' id='user_day' class='textbox'>\n";
   echo "<option value='00'".($user_birthdate[2] == "00" ? " selected='selected'" : "").">".$locale['uf_birthdate_day']."</option>\n";
   for ($j = 1; $j <= 31; $j++) {
      echo "<option value='".$j."'".($user_birthdate[2] == $j ? " selected='selected'" : "").">".$j."</option>\n";
   }
   echo "</select>\n";
   echo "<select name='user_month' id='user_month' class='textbox'>\n";
   echo "<option value='00'".($user_birthdate[1] == "00" ? " selected='selected'" : "").">".$locale['uf_birthdate_month']."</option>\n";
   for ($j = 1; $j <= 12; $j++) {
      echo "<option value='".$j."'".($user_birthdate[1] == $j ? " selected='selected'" : "").">".$months[$j]."</option>\n";
   }
   echo "</select>\n";
   echo "<select name='user_year' id='user_year' class='textbox'>\n";
   echo "<option value='00'".($user_birthdate[0] == "0000" ? " selected='selected'" : "").">".$locale['uf_birthdate_year']."</option>\n";
   for ($j = date("Y"); (date("Y") - 99) <= $j; $j--) {
      echo "<option value='".$j."'".($user_birthdate[0] == $j ? " selected='selected'" : "").">".$j."</option>\n";
   }
   echo "</select>\n";
    echo "</td>\n";
   echo "</tr>\n";
    if ($required) {
      $this -> setRequiredJavaScript("user_day",   $locale['uf_birthdate_error']);
      $this -> setRequiredJavaScript("user_month", $locale['uf_birthdate_error']);
      $this -> setRequiredJavaScript("user_year",  $locale['uf_birthdate_error']);
   }
}
 
// Handle Register and Update, Update only if admin or unregistered
elseif (($profile_method == "validate_insert"  || $profile_method == "validate_update")  && (!iMEMBER || iADMIN)) {
   $user_day = "00";
   $user_month = "00";
   $user_year = "0000";
   if (isset($_POST['user_day']) && isNum($_POST['user_day']) && $_POST['user_day'] != "00") {
      $user_day = $_POST['user_day'];
   }
   if (isset($_POST['user_month']) && isNum($_POST['user_month']) && $_POST['user_month'] != "00") {
      $user_month = $_POST['user_month'];
   }
   if (isset($_POST['user_year']) && isNum($_POST['user_year']) && $_POST['user_year'] != "0000") {
      $user_year = $_POST['user_year'];
   }
   if (($user_day != "00" && $user_month != "00" && $user_year != "0000") || $this -> _isNotRequired("user_birthdate")) {
      $this -> _setDBValue("user_birthdate", $user_year."-".str_pad($user_month, 2, "0", STR_PAD_LEFT)."-".str_pad($user_day, 2, "0", STR_PAD_LEFT));
   } else {
      $this -> _setError("user_birthdate", $locale['uf_birthdate_error'], TRUE);
   }
}
?>

Die Datei user_birthdate_include_var.php muss wie oben bereits gezeigt so aussehen:

<?php 
/*
+--------------------------------------------------------+
| PHP-Fusion Content Management System                   |
| Copyright © 2002 - 2012 Nick Jones                     |
| http://www.php-fusion.co.uk/                           |
+--------------------------------------------------------+
| This program is released as free software under the    |
| Affero GPL license. You can redistribute it and/or     |
| modify it under the terms of this license which you    |
| can read by viewing the included agpl.txt or online    |
| at www.gnu.org/licenses/agpl.html. Removal of this     |
| copyright header is strictly prohibited without        |
| written permission from the original author(s).        |
+--------------------------------------------------------+
| Birthdate User Field                                   |
| Copyright © 2012 PHP-Fusion.at Development Team        |
| http://www.php-fusion.at/                              |
| http://development.php-fusion.at/                      |
+--------------------------------------------------------+
| Filename: user_birthdate_include_var.php               |
| Fileversion: 1.0                                       |
+--------------------------------------------------------+
*/
 
if (!defined("IN_FUSION")) {
   die("Access denied");
}

$user_field_api_version = "1.01.00";
$user_field_name  = $locale['uf_birthdate'];
$user_field_desc = $locale['uf_birthdate_desc'];
$user_field_dbname = "user_birthdate";
$user_field_group = 2;
$user_field_dbinfo = "VARCHAR(10) NOT NULL DEFAULT '0000-00-00'";
?>


Profilfeld am besten nach dem Aktualisieren dieser 2 Dateien entfernen und dann reaktivieren.
Bereits registrierte User müssen dann aber ihr Geburtsdatum durch einen Admin speichern lassen.

Die zugehörige locale-Datei bleibt wie sie ist.
Bearbeitet von Krelli am 28. August 2017 20:25:40
Information:
PHP Version: 8.2.x •  MySQL Version: Nicht ausgewählt •  PHP-Fusion: IPv9-DE-MOD
 
TBR
Ich bin jetzt mal auf Nummer sicher gegangen und habe das Benutzerfeld deaktiviert und dann die Dateien ganz vom Server gelöscht und deinen Code neu hochgeladen.

Es funktioniert jetzt einwandfrei. Ein grosses Dankeschön, dass du dir so viel Mühe gemacht hast.

Aber eine Frage hab ich noch, ich habe einen Chat integriert, der natürlich das Alter übernimmt.
Im Fehlerlog wird mir jetzt folgendes angezeigt:

Fehler: Undefined index: user_birthdate
Benutzer-Level: 103



30   // Set up age
31   $myage = get_age($userdata['user_birthdate']);


Das verstehe ich so gar nicht, es ist doch weiterhin user_birthdate nach der Änderung,oder?
Information:
PHP Version: Nicht ausgewählt •  MySQL Version: Nicht ausgewählt •  PHP-Fusion: Nicht ausgewählt
 
Springe ins Forum: