2017-07-11 2 views
0

Alors, je me demandais si quelqu'un se soucierait de vérifier cette tâche et de la corriger? Je suis sûr que j'ai brouillé Python avec le peu de PHP que je connais, et qu'il y a des tags ouverts.Tâche d'auto-vieillissement de PHP pour MyBB

Fondamentalement, il y aura un champ où l'âge décimal méchant va ($ age, qui sera plus tard remplacé par l'id de champ approprié). Notre site travaille en mois pour les juvéniles, puis les années et les saisons pour les adultes. En utilisant l'âge désagréable, j'essaye de calculer les valeurs d'âge arrondies et puis les stocker comme valeur de chaîne qui sera alors définie comme la valeur du champ qui montrera l'âge ($ displayagefid, sera remplacé plus tard par le approprié identifiant de champ). Seuls certains groupes d'utilisateurs seront mis à jour (la liste est énorme, donc je l'ai omis).

Je n'ai également aucune idée de comment définir une variable comme une chaîne en utilisant à la fois la chaîne et la valeur d'une autre variable.

S'il vous plaît sachez que je suis un débutant complet à PHP. Ceci est destiné à fonctionner comme une tâche sur un forum MyBB auto-hébergé. Merci d'avance!

<?php 

function task_age($task) 
{ 
global $mybb, $db; 

$increment = 0.04167 
$age = $age + $increment 
floor($age*4) = $seasons 
floor($age) = $years 
floor($age*12) = $months 

if ($year < 1) { 
$display_age = $months, "mnths" 
} 
elseif (! filter_var($year, FILTER_VALIDATE_INT)){ 
$display_age = $year, "yrs" 
} 
else { 
$display age = $display_age = $years, "yrs", $seasons, "s" 
}; 

$query = $db->query(" 
UPDATE mybb_userfields userfields 
for ($usergroup = a || b || d || all that other crap) { 
SET $dispalyagefid = $display_age; 
}; 
"); 

add_task_log($task, "The age characters task successfully ran."); 

Répondre

0

J'ai eu un coup d'oeil rapide sur votre code et la première chose qui colle sur est que vous avez certains de vos affectations de variables arrière vers l'avant:

$increment = 0.04167 
$age = $age + $increment 
floor($age*4) = $seasons 
floor($age) = $years 
floor($age*12) = $months 

Quel que soit sur la gauche se prépare à tout est sur la droite, donc vos deux premiers sont OK, mais les trois derniers doivent changer.

Après avoir dit cela, il me semble que vous n'approchez pas cela correctement. J'entre mon âge décimal dans votre site mais comment allez-vous travailler les saisons? Ce pourrait être mon anniversaire demain, il pourrait avoir été mon anniversaire hier.

Il vaudrait mieux que l'utilisateur entre une date de naissance, à partir de laquelle calculer son âge. Maintenant, dans la variable $ diff, vous pouvez vérifier tous les éléments d'une date PHP. Alors d'abord vérifier si elles sont moins de 18 ans:

if ($diff->format("%y") < 18) { 
$ageInMonths = ($diff->format("%y") * 12) + $diff->format("%m"); 
$age = "$ageInMonths months"; 
} 

Si elles sont plus de 18 ans que vous voulez dans les années, puis calculer les saisons des mois restants.

else { 
$ageInYears = $diff->format("%y"); 
$ageInSeasons = floor($diff->format("%m")/4); 
if ($ageInSeasons > 0) { 
$age = "$ageInYears years and $ageInSeasons seasons"; 
} else { 
$age = "$ageInYears years"; 
} 
} 
+0

Bonjour à tous! À l'origine, je n'ai pas jugé bon d'ajouter plus de détails, mais je peux voir comment l'absence de circonstance provoque la confusion. Ceci est pour un site de jeu de rôle fantastique et puisque le temps du site est beaucoup plus rapide que le temps réel et enregistré principalement dans les saisons, il est nécessaire de calculer l'âge de cette manière. Désolé pour le manque d'explication et merci d'avoir regardé ça! – tig