anpera.net
https://anpera.dyndns.org/phpbb3/

Waffenkammer/Stalltier funktioniert nicht. Gilde Dl V2.5
https://anpera.dyndns.org/phpbb3/viewtopic.php?f=34&t=5150
Seite 1 von 1

Autor:  Shira [ So 09 Mai, 2010 19:38 ]
Betreff des Beitrags:  Waffenkammer/Stalltier funktioniert nicht. Gilde Dl V2.5

Ich hab ein Problem mit der Waffenkammer und den Stalltier bei der Gilde Klappt nicht. Ich bekomme dort immer Wieder eine Fehler meldung. Ich hab die Dragonslayer V 2.5
Ich hab nur das Wort Gilde mit dem Wort Rudel ersetzt aber auch die Original variante geht bei mir nicht.

Waffenkammer kommt.
Fatal error: Cannot use string offset as an array in /var/www/virtual/wolfsrealm.de/htdocs/dg_builds.php on line 538
hier die Zeilen 536 bis 539
PHP:
$min = 65 - pow(1.3,$lvl) * 4;

$item = $guild['building_vars'][DG_BUILD_WAFFENKAMMER]['itemlist'][$session['user']['acctid']];
if(is_array($item)) {

Hab schon einiges versucht bei der Waffenkammer mit hilfe.
Wenn ich bei Zeile 538 es so schreibe bringt es mir den fehler mit der Zeile 1306
$item = $guild['building_vars'];//[DG_BUILD_WAFFENKAMMER]['itemlist'][$session['user']['acctid']];


Beim den Stalltieren so ähnlich.
Fatal error: Cannot use string offset as an array in /var/www/virtual/wolfsrealm.de/htdocs/dg_builds.php on line 1306
hier die Zeilen 1304 bis 1307
PHP:
dg_show_header('Der Tierstall ('.$dg_build_levels[$lvl].')');

$arr_names = $guild['building_vars']['stall']['names'];
$arr_animals = array(


Zu finden ist das ganze in der dg_builds.php
Ich wäre für jede idee dankbar.

Autor:  Patzue [ So 09 Mai, 2010 20:26 ]
Betreff des Beitrags:  Re: Waffenkammer/Stalltier funktioniert nicht. Gilde Dl V2.5

Datei kann nich angezeigt werden.. Aber mal so gesagt.. $item wird wohl, wenn ich die Fehlermeldung richtig versteh.. entweder weiter oben im script oder in einem anderen script, dass die Datei aurfruft als String verwendet. Kann daher nicht gleichzeitig als array benutzt werden

Autor:  MySql [ Mo 10 Mai, 2010 01:40 ]
Betreff des Beitrags:  Re: Waffenkammer/Stalltier funktioniert nicht. Gilde Dl V2.5

Suche in dem Script mal jede Zuweisung die $guild bekommt. (STRG+F $guild = / $guild=).

Sollte das nicht weiterhelfen, kannst Du auch zwischendurch einfach mal prüfen, wann $guild ein String wird.

$this->bbcode_second_pass_code('', 'if( !is_array($guild) || is_string($guild) ) {

$str_out .= '$guild ist kein Array. Zeile: '.__LINE__;

}

# Kurz vor page_footer():

output($str_out);')

Kannst es natürlich auch via var_dump machen..

Allerdings scheint $guild ein Array zu sein. Denn sobald sie ein paar Mitanweisungen auskommentiert, funktioniert es. Überprüfe doch mal, ob es eventuell an der Konstante (Define) DG_BUILD_WAFFENKAMMER liegt.

@ Patzue: Eigentlich sollte eine Variable komplett überschrieben werden, wenn man es mit dem "=" Operator macht. Lediglich ".=" zählt neue Werte hinzu.

Autor:  Patzue [ Mo 10 Mai, 2010 13:12 ]
Betreff des Beitrags:  Re: Waffenkammer/Stalltier funktioniert nicht. Gilde Dl V2.5

MySql hat geschrieben:

@ Patzue: Eigentlich sollte eine Variable komplett überschrieben werden, wenn man es mit dem "=" Operator macht. Lediglich ".=" zählt neue Werte hinzu.


Gut zu wissen. Man lernt nier aus ;) Danke^^

Autor:  Shira [ Mo 10 Mai, 2010 20:22 ]
Betreff des Beitrags:  Re: Waffenkammer/Stalltier funktioniert nicht. Gilde Dl V2.5

Erstmal Danke für die Hilfe.
MySql hat geschrieben:
$this->bbcode_second_pass_code('', 'if( !is_array($guild) || is_string($guild) ) {

$str_out .= '$guild ist kein Array. Zeile: '.__LINE__;

}

# Kurz vor page_footer():

output($str_out);')


Ich hab das versucht. Wenn ich den ersten Teil anfangs mache zeigt er mir das aus Fehler an.
Mach ich den weiter unten hat er noch immer den selben Fehler wie oben beschrieben.

Wenn ich alle Datein durchsuche finde ich [DG_BUILD_WAFFENKAMMER] noch in lib/dg_funcs.lib.php
PHP:
define('DG_BUILD_WAFFENKAMMER',1);

$dg_builds = array(
DG_BUILD_WAFFENKAMMER => array('name'=>'Waffenkammer','special_types'=>true,'forbidden_types'=>array(),'goldcost'=>120000,'gemcost'=>120,'color'=>'','op'=>'waffenkammer','desc'=>'Die `bWaffenkammer`b stellt einen sicheren Aufbewahrungsort für Waffen dar - auch über den Fuchskill hinaus.'),


Wo gegen ich ['itemlist'] nicht gefunden habe.


Ich hab nun die phps freigeben. Bin leider noch nicht auf die Lösung gekommen.

Edit:
Ich hab nun die sql befehle und die datei von einem anderen Server genommen wo die Gilden gehen und trotzdem hab ich noch den selben fehler.

Autor:  Shira [ Mi 19 Mai, 2010 15:35 ]
Betreff des Beitrags:  Re: Waffenkammer/Stalltier funktioniert nicht. Gilde Dl V2.5

Wenn ich den
PHP:
foreach($guild['building_vars'][DG_BUILD_WAFFENKAMMER]['itemlist']as $acctid=>$i) {
if(!isset($arr_member_list[$acctid])) {
unset($guild['building_vars'][DG_BUILD_WAFFENKAMMER]['itemlist'][$acctid]);
}
}
vor
PHP:
$item = $guild['building_vars'][DG_BUILD_WAFFENKAMMER]['itemlist'][$session['user']['acctid']];
if(is_array($item)) {

Dann geht es zwar weiter aber ganz oben über page_header bei der php
Warning: Invalid argument supplied for foreach() in /var/www/virtual/wolfsrealm.de/htdocs/dg_builds.php on line 539
Sobald ich da itemlist weg mache ist die warnung weg.

Der Tierstall geht dann irgendwie fehler und warnung frei.

Autor:  Bathory [ Fr 21 Mai, 2010 00:16 ]
Betreff des Beitrags:  Re: Waffenkammer/Stalltier funktioniert nicht. Gilde Dl V2.5

Ungetestet aber bei so nem simplen Fehler (die Fehlermeldung sagt ja schon alles) denke ich mal, dass es hiermit gehen wird:

öffne lib/dg_funcs.php

und ersetze die function &dg_load_guild

durch folgende:

PHP:
function &dg_load_guild ($gid=0,$fields=array(),$overwrite=false,$order_sql='guildid ASC') {

global $session,$dg_session_copy,$dg_child_types;

$fields_str = '*';

if(sizeof($fields) > 0) {

if($gid && !$overwrite) { // Überprüfung, ob bereits vorhanden

foreach($fields as $k=>$a) {

if(isset($session['guilds'][$gid][$a])) {unset($fields[$k]);}

}

if(sizeof($fields) == 0) {
return($session['guilds'][$gid]);
}
}

$fields_str = implode(',',$fields);
$fields_str .= (strstr($fields_str,'guildid') === false) ? ',guildid' : '';

}

else {

if( is_array($session['guilds'][$gid]) ) {$ref = &$GLOBALS['session']['guilds'][$gid];return($ref);}

}
$sql = 'SELECT '.$fields_str.' FROM dg_guilds '.( ($gid) ? 'WHERE guildid='.$gid : '').' ORDER BY '.$order_sql;
$res = db_query($sql);

if(!db_num_rows($res)) {return(false);}

while($g = db_fetch_assoc($res)) {

if($g['type']) {
$g['ptype'] = $dg_child_types[$g['type']][3];
}

if(strlen($g['treaties']) > 3) {

$g['treaties'] = unserialize($g['treaties']);

}

if(strlen($g['ranks']) > 3) {

$g['ranks'] = unserialize($g['ranks']);

}

if(strlen($g['transfers']) > 3) {

$g['transfers'] = unserialize($g['transfers']);

}

if(strlen($g['build_list']) > 3) {

$g['build_list'] = unserialize($g['build_list']);

}

if(strlen($g['hitlist']) > 3) {

$g['hitlist'] = unserialize($g['hitlist']);

}

if(strlen($g['building_vars']) > 3) {

$g['building_vars'] = unserialize($g['building_vars']);

}

if(!is_array($g['treaties']))$g['treaties']=array();
if(!is_array($g['ranks']))$g['ranks']=array();
if(!is_array($g['transfers']))$g['transfers']=array();
if(!is_array($g['build_list']))$g['build_list']=array();
if(!is_array($g['hitlist']))$g['hitlist']=array();
if(!is_array($g['building_vars']))$g['building_vars']=array();

if(is_array($session['guilds'][$g['guildid']])) {
$session['guilds'][$g['guildid']] = array_merge($g,$session['guilds'][$g['guildid']]);
}
else {
$session['guilds'][$g['guildid']] = $g;
}
//$dg_session_copy[$g['guildid']] = $g;

if($session['user']['guildid'] == $g['guildid']) {

$session['userguild'] =& $session['guilds'][$g['guildid']];

}

if(!is_array($dg_session_copy[$g['guildid']])) {
$dg_session_copy[$g['guildid']] = array();
}
// Manche Arrays muss man zu ihrem Glück (und einer Übergabe OHNE Referenz) zwingen..
// Funktioniert möglicherw. auch durch Verwendung des GLOBALS-Arrays
$dg_session_copy[$g['guildid']] = array_merge($dg_session_copy[$g['guildid']],$session['guilds'][$g['guildid']]);

}

//if($session['user']['superuser'] > 3) output('LOAD-Query: '.$sql);

db_free_result($res);

if($gid) {
$ref = &$GLOBALS['session']['guilds'][$gid];
return($ref);
}

// return($GLOBALS['session']['guilds'][$gid]);

}



alles was ich an der Funktion geändert habe ist

PHP:
if(!is_array($g['treaties']))$g['treaties']=array();
if(!is_array($g['ranks']))$g['ranks']=array();
if(!is_array($g['transfers']))$g['transfers']=array();
if(!is_array($g['build_list']))$g['build_list']=array();
if(!is_array($g['hitlist']))$g['hitlist']=array();
if(!is_array($g['building_vars']))$g['building_vars']=array();


Generell bei dieser Fehlermeldung nie in der Datei suchen wo sie auftritt sondern immer an der ersten Stelle nachgucken WO dieser Array initialisiert wird und sicherstellen, dass auch immer ein Array rauskommt, was gerade in Verbindung mit unserialize und/oder if-Konstrukte wie man sieht nicht immer der Fall ist.

Autor:  Bathory [ Fr 21 Mai, 2010 00:37 ]
Betreff des Beitrags:  Re: Waffenkammer/Stalltier funktioniert nicht. Gilde Dl V2.5

Ich denke dass noch die eine oder andere Stelle im Code angepasst werden muss:

z.B. dg_output.php

zeile 264: if(!is_array($guild['transfers'])) {$out .= '<tr><td colspan="5">`iKeine Transfers vorhanden!</td></tr>';}

müsste:

if(count($guild['transfers']) == 0 ) {$out .= '<tr><td colspan="5">`iKeine Transfers vorhanden!</td></tr>';}

lauten.

oder dg_output.php

zeile 387: if(is_array($guild['build_list'])) {

müsste:

if(count($guild['build_list']) > 0) {

lauten.

Spontan fällt mir aber keine weitere Stelle ein.

Autor:  Shira [ So 23 Mai, 2010 14:06 ]
Betreff des Beitrags:  Re: Waffenkammer/Stalltier funktioniert nicht. Gilde Dl V2.5

Danke für die Hilfe nun geht es einwandfrei.

Ich hab meine Bruder gefragt und wir haben ja auch alle Datein dannach durchsucht aber nicht gefunden was der fehler ist.
Leider ist meine Englisch nicht so gut und mit übersetzer wird das nie genau. Uach bin ich obwohl ich es schon einige Zeit mache noch nicht sehr gut in php.

Jetzt klappt es aber einwandfrei und ich bin sehr dankbar für alle die sich die mühe gemacht haben mir zuhelfen.

Seite 1 von 1 Alle Zeiten sind UTC + 1 Stunde
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/