משתנים גלובליים ב PHP, כיצד להגדיר ולאתחל ? - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

משתנים גלובליים ב PHP, כיצד להגדיר ולאתחל ?


amiram

Recommended Posts

ובכן, אני לא יודע כלום ב PHP ואני צריך לסדר בעיה קטנה בפורום כלשהו. אני יודע C++ ככה שאת הכיוון הכללי שת התכנות אני מבין, רק לא יודע כלום מ PHP.

הפורום הנ"ל מכיל פונקציה שמציגה בתחתית הדף הראשי סטטיסטיקה של מספר ההודעות הכללי ומספר ההודעות ליום.

הבעיה: הפורום "חושב" שהוא אותחל בתאריך 01.01.1970 ולכן הסטטיסטיקה של מספר ההודעות ליום שגויי לחלוטין, בלוח הבקרה של האדמין אין שום אפשרות לקבוע את התאריך הנכון ולכן אני מנסה לתקן את זה.

הקוד הרלוונטי:

$installdays = (time() - $installdate) / 86400;

if ($installdays < 1) $postperday = $stats['postcount'];

else $postperday = $stats['postcount'] / $installdays;

משיטוט באינטרנט אני מסיק שמה שקורה פה הוא שהמשתנה (הגלובלי/חיצוני whatever) המצויין installdate אינו מאותחל ולכן בזמן הקריאה שלו מתקבלת התוצאה אפס (0) והיא אכן מתאימה לתוצאה הזו של 01.01.1970 לפי הגדרת פונקצית time() שמודדת בשניות החל מתאריך זה.

ישנו פיתרון אפשרי של איתחול ידני של installdate בשורה הקודמת לקוד לתאריך הרצויי, אבל בגלל שזה הפיתרון האלגנטי פחות, ומשום שהקוד מופיע שוב בפאנל של האדמין ומשום שאני מעוניין להוסיף לפאנל של האדמין אפשרות לשנות את התאריך בלי צורך לערוך את הסקריפטים הייתי שמח אם מישהו היה מסביר איך אני קובע אותו.

יש לציין ששני המופעים של הקוד אינם באותו סקריפט וכמובן שאין צורך לקבוע את הערך שלו בכל פעם שעושים לוגאין או מציגים את הסטטיסטיקה.

אני צריך לייצר משתנה גלובלי installdate ולאתחל אותו משורת קלט בפאנל הניהול, בצורה כזו שכל הסקריפטים האחרים יוכלו להתייחס אל המשתנה.

מצורפת תמונה של הפאנל והשדה שאותו אני מעוניין להפוך לניתן לכתיבה (שיציג את התאריך המוגדר כשהדף נפתח, אבל שיהיה ניתן לערוך אותו).

כמו כן הנה הסקריפט של הדף הנוכחי בפאנל:

<?php

require ("./global.php");

$lang->load("ACP_WELCOME");

$db->unbuffered_query("DELETE FROM bb".$n."_sessions WHERE lastactivity<".(time()-$sessiontimeout),1);

$db->unbuffered_query("DELETE FROM bb".$n."_searchs WHERE searchtime<".(time()-86400*7),1);

$install_date=formatdate($wbbuserdata['dateformat']." ".$wbbuserdata['timeformat'],$installdate);

$stats=$db->query_first("SELECT * FROM bb".$n."_stats");

list($useronlinecount)=$db->query_first("SELECT COUNT(*) FROM bb".$n."_sessions WHERE lastactivity >= '".(time()-60*$useronlinetimeout)."'");

list($pncount)=$db->query_first("SELECT COUNT(*) FROM bb".$n."_privatemessage");

$attachmentinfo = $db->query_first("SELECT COUNT(*) AS attachmentcount, SUM(attachmentsize) AS attachmentsize FROM bb".$n."_attachments");

$attachmentcount = $attachmentinfo['attachmentcount'];

$attachmentsize = formatFilesize($attachmentinfo['attachmentsize']);

$installdays = (time() - $installdate) / 86400;

if($installdays < 1) {

$perday = number_format($stats['postcount'], 2, $lang->get("LANG_GLOBAL_DEC_POINT"), $lang->get("LANG_GLOBAL_THOUSANDS_SEP"));

eval ("\$postsperday = \"".$lang->get4eval("LANG_ACP_WELCOME_PERDAY")."\";");

$perday = number_format($stats['threadcount'], 2, $lang->get("LANG_GLOBAL_DEC_POINT"), $lang->get("LANG_GLOBAL_THOUSANDS_SEP"));

eval ("\$threadsperday = \"".$lang->get4eval("LANG_ACP_WELCOME_PERDAY")."\";");

}

else {

$perday = number_format($stats['postcount'] / $installdays, 2, $lang->get("LANG_GLOBAL_DEC_POINT"), $lang->get("LANG_GLOBAL_THOUSANDS_SEP"));

eval ("\$postsperday = \"".$lang->get4eval("LANG_ACP_WELCOME_PERDAY")."\";");

$perday = number_format($stats['threadcount'] / $installdays, 2, $lang->get("LANG_GLOBAL_DEC_POINT"), $lang->get("LANG_GLOBAL_THOUSANDS_SEP"));

eval ("\$threadsperday = \"".$lang->get4eval("LANG_ACP_WELCOME_PERDAY")."\";");

}

list($waiting4Activation)=$db->query_first("SELECT COUNT(*) FROM bb".$n."_users WHERE activation<>1");

eval ("\$lang->items['LANG_ACP_WELCOME_W4ACTIVATION'] = \"".$lang->get4eval("LANG_ACP_WELCOME_W4ACTIVATION")."\";");

$serverinfo = 0;

if($uptime = @exec("uptime")) {

if(preg_match("/averages?: ([0-9\.]+),[\s]+([0-9\.]+),[\s]+([0-9\.]+)/",$uptime,$match)) {

$match[1]*=100;

$match[2]*=100;

$match[3]*=100;

$serverinfo = 1;

}

}

if($stats['usercount']>=1000) $stats['usercount']=number_format($stats['usercount'], 0, "", $lang->get("LANG_GLOBAL_THOUSANDS_SEP"));

if($stats['threadcount']>=1000) $stats['threadcount']=number_format($stats['threadcount'], 0, "", $lang->get("LANG_GLOBAL_THOUSANDS_SEP"));

if($stats['postcount']>=1000) $stats['postcount']=number_format($stats['postcount'], 0, "", $lang->get("LANG_GLOBAL_THOUSANDS_SEP"));

if($pncount>=1000) $pncount=number_format($pncount, 0, "", $lang->get("LANG_GLOBAL_THOUSANDS_SEP"));

if($attachmentcount>=1000) $attachmentcount=number_format($attachmentcount, 0, "", $lang->get("LANG_GLOBAL_THOUSANDS_SEP"));

eval("\$tpl->output(\"".$tpl->get("welcome",1)."\",1);");

?>

הנה ה HTML הרלוונטי

<?xml version="1.0" encoding="{$lang->items['LANG_GLOBAL_ENCODING']}"?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" dir="{$lang->items['LANG_GLOBAL_DIRECTION']}" lang="{$lang->items['LANG_GLOBAL_LANGCODE']}" xml:lang="{$lang->items['LANG_GLOBAL_LANGCODE']}">

<head>

<title></title>

<meta http-equiv="Content-Type" content="text/html; charset={$lang->items['LANG_GLOBAL_ENCODING']}" />

<link rel="stylesheet" href="css/main.css" />

</head>

<body>

<p align="center"><if($wbbuserdata['a_acp_or_mcp']==1)><then>{$lang->items['LANG_ACP_WELCOME_TITLE_ACP']}</then><else>{$lang->items['LANG_ACP_WELCOME_TITLE_MODCP']}</else></if></p>

<table cellpadding="4" cellspacing="1" border="0" class="tblborder" width="100%" align="center">

<tr class="tblhead">

<td colspan="2">{$lang->items['LANG_ACP_WELCOME_INFORMATION']}</td>

</tr>

<tr class="firstrow">

<td><b>{$lang->items['LANG_ACP_WELCOME_BOARDVERSION']}</b></td>

<td>$boardversion</td>

</tr>

<tr class="secondrow">

<td><b>{$lang->items['LANG_ACP_WELCOME_INSTALLDATE']}</b></td>

<td>$install_date</td>

</tr>

<tr class="firstrow">

<td><b>{$lang->items['LANG_ACP_WELCOME_MEMBERS']}</b></td>

<td>$stats[usercount]</td>

</tr>

<tr class="secondrow">

<td><b>{$lang->items['LANG_ACP_WELCOME_USERONLINE']}</b></td>

<td>$useronlinecount</td>

</tr>

<tr class="firstrow">

<td><b>{$lang->items['LANG_ACP_WELCOME_POSTS']}</b></td>

<td>$stats[postcount] $postsperday</td>

[השאר לא נראה רלוונטי]

אודה מאוד למי שיוכל לייעץ לי בנידון :)

קישור לתוכן
שתף באתרים אחרים

ככל הנראה המשתנה הזה של התאריך התחלת הפורום אמור להישמר במסד נתונים.

אז תנסה לחפש במסד נתונים של הפורום טבלה של הגדרות הפורום (אני משער) ושם אמורה להיות השורה של התאריך הזה

קישור לתוכן
שתף באתרים אחרים

אוקיי, הצלחתי באמת לקבוע את המשתנה ע"י הצבה של $installdate=1028418606

השאלה היא איך אני שם שם איזה input box שיאפשר לשנות את זה שוב בלי להתעסק בסקריפטים ?

עדכון, מצאתי אותו מוגדר בקובץ בשם options.inc.php והוא אכן היה מאותחל לאפס, כנראה שזה יספיק לבינתיים.

תודה על הכיוון החיובי :)

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...