PHP Foreach () probleem

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Stefan Raijmakers

Stefan Raijmakers

25/12/2014 20:09:10
Quote Anchor link
Hallo,

Ik ben zelf nog zeer onervaren met PHP. En zit met een klein probleem met een script.
Het probleem komt voor op de pagina van mijn website.
http://www.hgwow.nl/guilds/guild-overzicht

Bij het laden van een pagina krijg ik bovenaan de melding:
Warning: Invalid argument supplied for foreach() in /home/user/domains/hgwow.nl/public_html/plugins/raidplanner/wow/wow.php on line 66

Het betreft het ophalen van de data "races".

Hieronder staat het volledige script. Hopelijk is er iemand die me zou kunnen helpen bij het opsporen van de fout.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
<?php
/*------------------------------------------------------------------------
# WoW Armory Sync Plugin
# com_raidplanner - RaidPlanner Component
# ------------------------------------------------------------------------
# author    Taracque
# copyright Copyright (C) 2011 Taracque. All Rights Reserved.
# @license - http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
# Website: http://www.taracque.hu/raidplanner
-------------------------------------------------------------------------*/
// no direct access

defined( '_JEXEC' ) or die( 'Restricted access' );

class PlgRaidplannerWow extends JPlugin
{
    private $guild_id = 0;
    private $rp_params = array();
    private $guild_name = '';
    
    public function onRPInitGuild( $guildId, $params )
    {

        $db = JFactory::getDBO();
        $query = "SELECT guild_name,guild_id FROM #__raidplanner_guild WHERE guild_id=" . intval($guildId);
        $db->setQuery($query);
        if ( $data = $db->loadObject() )
        {

            $this->guild_name = $data->guild_name;
            $this->guild_id = $data->guild_id;
            $this->rp_params = $params;
        }
else {
            $this->guild_id = 0;
        }
    }


    public function onRPBeforeSync()
    {

        return true;
    }


    public function onRPSyncGuild( $showOkStatus = false, $syncInterval = 4, $forceSync = false )
    {

        $db = JFactory::getDBO();

        $query = "SELECT IF(lastSync IS NULL,-1,DATE_ADD(lastSync, INTERVAL " . intval( $syncInterval ) . " HOUR)-NOW()) AS needSync,guild_name FROM #__raidplanner_guild WHERE guild_id=" . intval($this->guild_id);
        $db->setQuery($query);
        if ( (!$forceSync) && ( !($needsync = $db->loadResult()) || ( $needsync>=0 ) ) )
        {

            /* Sync not needed, exit */
            return false;
        }


        JLoader::register('RaidPlannerHelper', JPATH_ADMINISTRATOR . '/components/com_raidplanner/helper.php' );

        $region = $this->rp_params['guild_region'];
        $realm = $this->rp_params['guild_realm'];

        /* load database ids race array */
        $races = array();
        $query = "SELECT race_id, race_name FROM #__raidplanner_race";
        $db->setQuery( $query );
        $tmp1 = $db->loadAssocList( 'race_name' );

        $url = "http://" . $region . ".battle.net/api/wow/data/character/races";
        $tmp = json_decode( RaidPlannerHelper::downloadData( $url ) ,true );

        foreach ($tmp['races'] as $race) {
            $races[ $race['id'] ] = $tmp1[ $race['name'] ]['race_id'];
        }

        
        /* load database ids race array */
        $classes = array();
        $query = "SELECT class_id, class_name FROM #__raidplanner_class";
        $db->setQuery( $query );
        $tmp1 = $db->loadAssocList( 'class_name' );

        $url = "http://" . $region . ".battle.net/api/wow/data/character/classes";
        $tmp = json_decode( RaidPlannerHelper::downloadData( $url ) ,true );

        foreach ($tmp['classes'] as $class) {
            $classes[ $class['id'] ] = $tmp1[ $class['name'] ]['class_id'];
        }


        $url = "http://" . $region . ".battle.net/api/wow/guild/";
        $url .= rawurlencode( $realm ) . "/";
        $url .= rawurlencode( $this->guild_name );
        $url = $url . "?fields=members";

        $data = json_decode( RaidPlannerHelper::downloadData( $url ) );
        if (function_exists('json_last_error')) {
            if (json_last_error() != JSON_ERROR_NONE)
            {

                JError::raiseWarning('100','ArmorySync data decoding error');
                return null;
            }
        }

        if (isset($data->status) && ($data->status=="nok"))
        {

            JError::raiseWarning('100','ArmorySync failed');
            return null;
        }


        if (($this->guild_name == @$data->name) && ($data->name!=''))
        {

            $params = array(
                'achievementPoints' => $data->achievementPoints,
                'side'        => ($data->side==0)?"Alliance":"Horde",
                'emblem'    => get_object_vars( $data->emblem ),
                'link'        => "http://" . $region . ".battle.net/wow/guild/" . rawurlencode($realm) . "/" . rawurlencode($data->name) ."/",
                'char_link'    => "http://" . $region . ".battle.net/wow/character/%s/%s/advanced",
                'guild_realm'    =>    $data->realm,
                'guild_region'    =>    $region,
                'guild_level'    =>    $data->level
            );

            $this->rp_params = array_merge( $this->rp_params, $params );
            
            $query = "UPDATE #__raidplanner_guild SET
                            guild_name="
.$db->Quote($data->name).",
                            params="
.$db->Quote(json_encode($params)).",
                            lastSync=NOW()
                            WHERE guild_id="
.intval($this->guild_id);
            $db->setQuery($query);
            $db->query();
            
            /* if we atleast one member in listed */
            if ( (is_array($data->members)) && (count($data->members) > 0) ) {    
                /* detach characters from guild */
                $query = "UPDATE #__raidplanner_character SET guild_id=0 WHERE guild_id=".intval($this->guild_id)."";
                $db->setQuery($query);
                $db->query();

                foreach($data->members as $member)
                {

                    // check if character exists
                    $query = "SELECT character_id FROM #__raidplanner_character WHERE char_name LIKE BINARY ".$db->Quote($member->character->name)."";
                    $db->setQuery($query);
                    $char_id = $db->loadResult();
                    // not found insert it
                    if (!$char_id) {
                        $query="INSERT INTO #__raidplanner_character SET char_name=".$db->Quote($member->character->name)."";
                        $db->setQuery($query);
                        $db->query();
                        $char_id=$db->insertid();
                    }

                    $query = "UPDATE #__raidplanner_character SET class_id='" . $classes[ intval($member->character->class) ] . "'
                                                                ,race_id='"
. $races[ intval($member->character->race) ] . "'
                                                                ,gender_id='"
. (intval($member->character->gender) + 1) . "'
                                                                ,char_level='"
. intval($member->character->level) . "'
                                                                ,rank='"
. intval($member->rank) . "'
                                                                ,guild_id='"
. intval($this->guild_id) . "'
                                                                WHERE character_id="
. $char_id;
                    $db->setQuery($query);
                    $db->query();
                }


                /* delete all guildless characters */
                $query = "DELETE FROM #__raidplanner_character WHERE guild_id=0";
                $db->setQuery($query);
                $db->query();
            }

            
            if ($showOkStatus)
            {

                JError::raiseNotice('0', 'ArmorySync successed');
            }
        }
else {
            JError::raiseWarning('100', 'ArmorySync data doesn\'t match');
        }
    }


    public function onRPGetCharacterLink( $char_name )
    {

        return sprintf($this->rp_params['char_link'], rawurlencode($this->rp_params['guild_realm']), rawurlencode($char_name) ) . '" target="_blank';
    }

    
    public function onRPGetGuildHeader()
    {

        $document = JFactory::getDocument();
        $document->addScript('media/com_raidplanner/wow_tabards/guild-tabard.js');
        
        $header = array();
        $header[] = '<canvas id="rp_guild_tabard" width="120" height="120" style="float:right;"></canvas>';
        $header[] = '<script type="text/javascript">';
        $header[] = '    window.addEvent("domready",function(){';
        $header[] = '        var tabard = new GuildTabard("rp_guild_tabard", {';
        $header[] = '            "ring": "' . $this->rp_params['side'] . '",';
        $header[] = '            "bg": [ 0, "' . $this->rp_params['emblem']['backgroundColor'] . '" ], ';
        $header[] = '            "border": [ "' . $this->rp_params['emblem']['border'] . '", "' . $this->rp_params['emblem']['borderColor'] . '" ], ';
        $header[] = '            "emblem": [ "' . $this->rp_params['emblem']['icon'] . '", "' . $this->rp_params['emblem']['iconColor'] . '" ], ';
        $header[] = '        }, "' . JURI::base() . 'media/com_raidplanner/wow_tabards/");';
        $header[] = '    });';
        $header[] = '</script>';
        $header[] = '<h2><a href="' . $this->rp_params['link'] . '" target="_blank">' . $this->guild_name . '</a></h2>';
        $header[] = '<strong>' . JText::_('COM_RAIDPLANNER_LEVEL') . " " . $this->rp_params['guild_level'] . " " . $this->rp_params['side'] . " " . JText::_('COM_RAIDPLANNER_GUILD') . '<br />';
        $header[] = $this->rp_params['guild_realm'] . " - " . strtoupper($this->rp_params['guild_region']) . '</strong>';

        return implode("\n", $header);
    }


    public function onRPLoadCSS()
    {

        $document = JFactory::getDocument();
        $document->addStyleSheet( 'media/com_raidplanner/css/raidplanner_wow.css' );
        
        return true;
    }

}
 
PHP hulp

PHP hulp

25/04/2024 10:48:38
 
- Ariën  -
Beheerder

- Ariën -

25/12/2014 21:30:06
Quote Anchor link
Wat doet: var_dump($tmp); na lijn 64?
Gewijzigd op 25/12/2014 21:32:21 door - Ariën -
 
Stefan Raijmakers

Stefan Raijmakers

25/12/2014 21:53:03
Quote Anchor link
- Aar - op 25/12/2014 21:30:06:
Wat doet: var_dump($tmp); na lijn 64?


De warning is verdwenen. Maar de races worden nog niet weergegeven (althans bij 1 van de twee guilds).
http://www.hgwow.nl/guilds/guild-overzicht

Ik heb een vergelijking gemaakt met de code eronder, die van classes, en ze lijken identiek, behalve dan uiteraard de verschillende data zoektermen. Die van Classes werkt namelijk wel volledig foutloos. Ook de link naar de verschillende races werkt prima. https://eu.battle.net/api/wow/data/character/races

Is er iets waar ik overheen kijk of mis?

EDIT:

Hij geefr nu een volgende foutmelding, namelijk:

NULL
Warning: Invalid argument supplied for foreach() in /home/user/domains/hgwow.nl/public_html/plugins/raidplanner/wow/wow.php on line 67



Hier nogmaals het script, maar dan aangepast met de tip van Aar.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
<?php
/*------------------------------------------------------------------------
# WoW Armory Sync Plugin
# com_raidplanner - RaidPlanner Component
# ------------------------------------------------------------------------
# author    Taracque
# copyright Copyright (C) 2011 Taracque. All Rights Reserved.
# @license - http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
# Website: http://www.taracque.hu/raidplanner
-------------------------------------------------------------------------*/
// no direct access

defined( '_JEXEC' ) or die( 'Restricted access' );

class PlgRaidplannerWow extends JPlugin
{
    private $guild_id = 0;
    private $rp_params = array();
    private $guild_name = '';
    
    public function onRPInitGuild( $guildId, $params )
    {

        $db = JFactory::getDBO();
        $query = "SELECT guild_name,guild_id FROM #__raidplanner_guild WHERE guild_id=" . intval($guildId);
        $db->setQuery($query);
        if ( $data = $db->loadObject() )
        {

            $this->guild_name = $data->guild_name;
            $this->guild_id = $data->guild_id;
            $this->rp_params = $params;
        }
else {
            $this->guild_id = 0;
        }
    }


    public function onRPBeforeSync()
    {

        return true;
    }


    public function onRPSyncGuild( $showOkStatus = false, $syncInterval = 4, $forceSync = false )
    {

        $db = JFactory::getDBO();

        $query = "SELECT IF(lastSync IS NULL,-1,DATE_ADD(lastSync, INTERVAL " . intval( $syncInterval ) . " HOUR)-NOW()) AS needSync,guild_name FROM #__raidplanner_guild WHERE guild_id=" . intval($this->guild_id);
        $db->setQuery($query);
        if ( (!$forceSync) && ( !($needsync = $db->loadResult()) || ( $needsync>=0 ) ) )
        {

            /* Sync not needed, exit */
            return false;
        }


        JLoader::register('RaidPlannerHelper', JPATH_ADMINISTRATOR . '/components/com_raidplanner/helper.php' );

        $region = $this->rp_params['guild_region'];
        $realm = $this->rp_params['guild_realm'];

        /* load database ids race array */
        $races = array();
        $query = "SELECT race_id, race_name FROM #__raidplanner_race";
        $db->setQuery( $query );
        $tmp1 = $db->loadAssocList( 'race_name' );

        $url = "http://" . $region . ".battle.net/api/wow/data/character/races";
        $tmp = json_decode( RaidPlannerHelper::downloadData( $url ) ,true );
        var_dump($tmp);

        foreach ($tmp['races'] as $race) {
            $races[ $race['id'] ] = $tmp1[ $race['name'] ]['race_id'];
        }

        
        /* load database ids race array */
        $classes = array();
        $query = "SELECT class_id, class_name FROM #__raidplanner_class";
        $db->setQuery( $query );
        $tmp1 = $db->loadAssocList( 'class_name' );

        $url = "http://" . $region . ".battle.net/api/wow/data/character/classes";
        $tmp = json_decode( RaidPlannerHelper::downloadData( $url ) ,true );

        foreach ($tmp['classes'] as $class) {
            $classes[ $class['id'] ] = $tmp1[ $class['name'] ]['class_id'];
        }


        $url = "http://" . $region . ".battle.net/api/wow/guild/";
        $url .= rawurlencode( $realm ) . "/";
        $url .= rawurlencode( $this->guild_name );
        $url = $url . "?fields=members";

        $data = json_decode( RaidPlannerHelper::downloadData( $url ) );
        if (function_exists('json_last_error')) {
            if (json_last_error() != JSON_ERROR_NONE)
            {

                JError::raiseWarning('100','ArmorySync data decoding error');
                return null;
            }
        }

        if (isset($data->status) && ($data->status=="nok"))
        {

            JError::raiseWarning('100','ArmorySync failed');
            return null;
        }


        if (($this->guild_name == @$data->name) && ($data->name!=''))
        {

            $params = array(
                'achievementPoints' => $data->achievementPoints,
                'side'        => ($data->side==0)?"Alliance":"Horde",
                'emblem'    => get_object_vars( $data->emblem ),
                'link'        => "http://" . $region . ".battle.net/wow/guild/" . rawurlencode($realm) . "/" . rawurlencode($data->name) ."/",
                'char_link'    => "http://" . $region . ".battle.net/wow/character/%s/%s/advanced",
                'guild_realm'    =>    $data->realm,
                'guild_region'    =>    $region,
                'guild_level'    =>    $data->level
            );

            $this->rp_params = array_merge( $this->rp_params, $params );
            
            $query = "UPDATE #__raidplanner_guild SET
                            guild_name="
.$db->Quote($data->name).",
                            params="
.$db->Quote(json_encode($params)).",
                            lastSync=NOW()
                            WHERE guild_id="
.intval($this->guild_id);
            $db->setQuery($query);
            $db->query();
            
            /* if we atleast one member in listed */
            if ( (is_array($data->members)) && (count($data->members) > 0) ) {    
                /* detach characters from guild */
                $query = "UPDATE #__raidplanner_character SET guild_id=0 WHERE guild_id=".intval($this->guild_id)."";
                $db->setQuery($query);
                $db->query();

                foreach($data->members as $member)
                {

                    // check if character exists
                    $query = "SELECT character_id FROM #__raidplanner_character WHERE char_name LIKE BINARY ".$db->Quote($member->character->name)."";
                    $db->setQuery($query);
                    $char_id = $db->loadResult();
                    // not found insert it
                    if (!$char_id) {
                        $query="INSERT INTO #__raidplanner_character SET char_name=".$db->Quote($member->character->name)."";
                        $db->setQuery($query);
                        $db->query();
                        $char_id=$db->insertid();
                    }

                    $query = "UPDATE #__raidplanner_character SET class_id='" . $classes[ intval($member->character->class) ] . "'
                                                                ,race_id='"
. $races[ intval($member->character->race) ] . "'
                                                                ,gender_id='"
. (intval($member->character->gender) + 1) . "'
                                                                ,char_level='"
. intval($member->character->level) . "'
                                                                ,rank='"
. intval($member->rank) . "'
                                                                ,guild_id='"
. intval($this->guild_id) . "'
                                                                WHERE character_id="
. $char_id;
                    $db->setQuery($query);
                    $db->query();
                }


                /* delete all guildless characters */
                $query = "DELETE FROM #__raidplanner_character WHERE guild_id=0";
                $db->setQuery($query);
                $db->query();
            }

            
            if ($showOkStatus)
            {

                JError::raiseNotice('0', 'ArmorySync successed');
            }
        }
else {
            JError::raiseWarning('100', 'ArmorySync data doesn\'t match');
        }
    }


    public function onRPGetCharacterLink( $char_name )
    {

        return sprintf($this->rp_params['char_link'], rawurlencode($this->rp_params['guild_realm']), rawurlencode($char_name) ) . '" target="_blank';
    }

    
    public function onRPGetGuildHeader()
    {

        $document = JFactory::getDocument();
        $document->addScript('media/com_raidplanner/wow_tabards/guild-tabard.js');
        
        $header = array();
        $header[] = '<canvas id="rp_guild_tabard" width="120" height="120" style="float:right;"></canvas>';
        $header[] = '<script type="text/javascript">';
        $header[] = '    window.addEvent("domready",function(){';
        $header[] = '        var tabard = new GuildTabard("rp_guild_tabard", {';
        $header[] = '            "ring": "' . $this->rp_params['side'] . '",';
        $header[] = '            "bg": [ 0, "' . $this->rp_params['emblem']['backgroundColor'] . '" ], ';
        $header[] = '            "border": [ "' . $this->rp_params['emblem']['border'] . '", "' . $this->rp_params['emblem']['borderColor'] . '" ], ';
        $header[] = '            "emblem": [ "' . $this->rp_params['emblem']['icon'] . '", "' . $this->rp_params['emblem']['iconColor'] . '" ], ';
        $header[] = '        }, "' . JURI::base() . 'media/com_raidplanner/wow_tabards/");';
        $header[] = '    });';
        $header[] = '</script>';
        $header[] = '<h2><a href="' . $this->rp_params['link'] . '" target="_blank">' . $this->guild_name . '</a></h2>';
        $header[] = '<strong>' . JText::_('COM_RAIDPLANNER_LEVEL') . " " . $this->rp_params['guild_level'] . " " . $this->rp_params['side'] . " " . JText::_('COM_RAIDPLANNER_GUILD') . '<br />';
        $header[] = $this->rp_params['guild_realm'] . " - " . strtoupper($this->rp_params['guild_region']) . '</strong>';

        return implode("\n", $header);
    }


    public function onRPLoadCSS()
    {

        $document = JFactory::getDocument();
        $document->addStyleSheet( 'media/com_raidplanner/css/raidplanner_wow.css' );
        
        return true;
    }

}
Gewijzigd op 26/12/2014 08:53:03 door Stefan Raijmakers
 
- Ariën  -
Beheerder

- Ariën -

26/12/2014 09:09:40
Quote Anchor link
Dit is geen oplossing, maar een stapje verder om tot de oplossing te komen (debugging).

Je zou nu minstens een echo moeten zien waarin vermeld staat wat er daadwerkelijk in $tmp bevindt. Die moet een array zijn.

Probeer anders eens $tmp['races'] in je var_dump()

Ik stel verder voor dat we het bij relevante code van 20 max. regels houden om het leesbaarder te houden. Weinig mensen voelen zich ervoor om 400 regels door te gaan spitten, terwijl de error al aangeeft waar de fout zich bevindt.
Gewijzigd op 26/12/2014 09:16:04 door - Ariën -
 
Stefan Raijmakers

Stefan Raijmakers

26/12/2014 13:08:22
Quote Anchor link
- Aar - op 26/12/2014 09:09:40:
Dit is geen oplossing, maar een stapje verder om tot de oplossing te komen (debugging).

Je zou nu minstens een echo moeten zien waarin vermeld staat wat er daadwerkelijk in $tmp bevindt. Die moet een array zijn.

Probeer anders eens $tmp['races'] in je var_dump()

Ik stel verder voor dat we het bij relevante code van 20 max. regels houden om het leesbaarder te houden. Weinig mensen voelen zich ervoor om 400 regels door te gaan spitten, terwijl de error al aangeeft waar de fout zich bevindt.



Hey Aar,

Oke perfect. Stond er niet bij stil en ik snap het uiteraard. Mijn excuses.

-

Ik heb twee fouten op het moment en heb er screenshots van gemaakt. Want het gebeurt niet altijd.

Afbeelding
Afbeelding


Hierbij ook het stukje code. Lijn 67 is waar "foreach ($tmp['races'] as $race)" staat.


/* load database ids race array */
$races = array();
$query = "SELECT race_id, race_name FROM #__raidplanner_race";
$db->setQuery( $query );
$tmp1 = $db->loadAssocList( 'race_name' );

$url = "http://" . $region . ".battle.net/api/wow/data/character/races";
$tmp = json_decode( RaidPlannerHelper::downloadData( $url ) ,true );
var_dump($tmp['races']);

foreach ($tmp['races'] as $race) {
$races[ $race['id'] ] = $tmp1[ $race['name'] ]['race_id'];
}

/* load database ids race array */
 
Eddy E

Eddy E

27/12/2014 06:48:21
Quote Anchor link
Zet onder $tmp1 = eens:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
var_dump($tmp1);
?>


Zet onder $url =
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
var_dump($url);
?>


Zet onder $tmp =
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
var_dump($tmp);
?>


Wat komt er dan te staan?
Waarschijnlijk zit er in één van die drie een fout en geeft het niet wat je hoopte te krijgen.
 
Stefan Raijmakers

Stefan Raijmakers

27/12/2014 22:31:58
Quote Anchor link
Eddy E op 27/12/2014 06:48:21:
Zet onder $tmp1 = eens:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
var_dump($tmp1);
?>


Zet onder $url =
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
var_dump($url);
?>


Zet onder $tmp =
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
var_dump($tmp);
?>


Wat komt er dan te staan?
Waarschijnlijk zit er in één van die drie een fout en geeft het niet wat je hoopte te krijgen.





Hey Eddy,

Alvast bedankt voor je reactie. Ik heb de door u vermelde suggesties toegevoegd en krijg de volgende reactie om de zoveel laad beurten.

Afbeelding


Kan het zijn dat als het script niet in staat is om de "races" data op te halen, dat hij dan deze fout weergeeft? Indien dat het geval is, hoe kan ik dan eventueel voorkomen dat er een foutmelding wordt gegeven en er gewoon geen "races" worden weergegeven?

Of indien mogelijk, automatisch een refresh van de pagina wordt gedaan.
 
- Ariën  -
Beheerder

- Ariën -

27/12/2014 22:56:28
Quote Anchor link
Met is_array($tmp['races']) voor je foreach controleren of deze array bestaat.
 
Stefan Raijmakers

Stefan Raijmakers

28/12/2014 11:15:31
Quote Anchor link
- Aar - op 27/12/2014 22:56:28:
Met is_array($tmp['races']) voor je foreach controleren of deze array bestaat.


Ik krijg hierop de volgende error.

Een blanco pagina met bovenaan de boodschap:
Parse error: syntax error, unexpected T_FOREACH in /home/user/domains/hgwow.nl/public_html/plugins/raidplanner/wow/wow.php on line 69


Het script is:

$races = array();
$query = "SELECT race_id, race_name FROM #__raidplanner_race";
$db->setQuery( $query );
$tmp1 = $db->loadAssocList( 'race_name' );
var_dump($tmp1);

$url = "http://" . $region . ".battle.net/api/wow/data/character/races";
var_dump($url);
$tmp = json_decode( RaidPlannerHelper::downloadData( $url ) ,true );
var_dump($tmp);

is_array($tmp['races'])foreach ($tmp['races'] as $race) {
$races[ $race['id'] ] = $tmp1[ $race['name'] ]['race_id'];
}




EDIT:

Na het weghalen van is_array($tmp['races']), kreeg ik de volgende boodschap op de pagina:


array(13) { ["Human"]=> array(2) { ["race_id"]=> string(1) "1" ["race_name"]=> string(5) "Human" } ["Orc"]=> array(2) { ["race_id"]=> string(1) "2" ["race_name"]=> string(3) "Orc" } ["Dwarf"]=> array(2) { ["race_id"]=> string(1) "3" ["race_name"]=> string(5) "Dwarf" } ["Night Elf"]=> array(2) { ["race_id"]=> string(1) "4" ["race_name"]=> string(9) "Night Elf" } ["Undead"]=> array(2) { ["race_id"]=> string(1) "5" ["race_name"]=> string(6) "Undead" } ["Tauren"]=> array(2) { ["race_id"]=> string(1) "6" ["race_name"]=> string(6) "Tauren" } ["Gnome"]=> array(2) { ["race_id"]=> string(1) "7" ["race_name"]=> string(5) "Gnome" } ["Troll"]=> array(2) { ["race_id"]=> string(1) "8" ["race_name"]=> string(5) "Troll" } ["Goblin"]=> array(2) { ["race_id"]=> string(1) "9" ["race_name"]=> string(6) "Goblin" } ["Blood Elf"]=> array(2) { ["race_id"]=> string(2) "10" ["race_name"]=> string(9) "Blood Elf" } ["Draenei"]=> array(2) { ["race_id"]=> string(2) "11" ["race_name"]=> string(7) "Draenei" } ["Worgen"]=> array(2) { ["race_id"]=> string(2) "12" ["race_name"]=> string(6) "Worgen" } ["Pandaren"]=> array(2) { ["race_id"]=> string(2) "13" ["race_name"]=> string(8) "Pandaren" } } string(49) "http://eu.battle.net/api/wow/data/character/races" NULL
Warning: Invalid argument supplied for foreach() in /home/user/domains/hgwow.nl/public_html/plugins/raidplanner/wow/wow.php on line 69

Het valt me op dat hij nu NULL achter de link van de data zet. Betekend dat hij de data hiervan niet kan ophalen?
"http://eu.battle.net/api/wow/data/character/races" NULL

Er is me tevens ook opgevallen dat hij regelmatig de "races" data van onze guild te Shattered Hand niet kan weergeven, maar die van Wildhammer wel.
Gewijzigd op 28/12/2014 11:22:30 door Stefan Raijmakers
 
- Ariën  -
Beheerder

- Ariën -

28/12/2014 12:16:26
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
if(is_array(....)) {
// een array
} else {
// geen array
}
?>


Toevoeging op 28/12/2014 12:16:29:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
if(is_array(....)) {
// een array
} else {
// geen array
}
?>
 
Stefan Raijmakers

Stefan Raijmakers

28/12/2014 13:16:42
Quote Anchor link
Ik moest er even het chinese woordenboek bij pakken. Maar denk dat ik snap wat er staat.

if(is_array(....)) {
Als het een lijst is die kan worden weergegeven, voer dan uit ...

} else {
Anders, ...

Juist?

Ik het volgende gedaan:

if(is_array($tmp['races']))foreach ($tmp['races'] as $race) {
$races[ $race['id'] ] = $tmp1[ $race['name'] ]['race_id'];
} else {
}

Wat zijn eventuele opties voor } else {?
Gewijzigd op 28/12/2014 13:23:01 door Stefan Raijmakers
 
- Ariën  -
Beheerder

- Ariën -

28/12/2014 13:29:52
Quote Anchor link
Je mist een { om mee te beginnen en een } om je foreach mee te beëindigen.

Is de basistutorial op phptuts.nl geen goed idee eerst?
Gewijzigd op 28/12/2014 13:34:08 door - Ariën -
 
Stefan Raijmakers

Stefan Raijmakers

28/12/2014 13:51:07
Quote Anchor link
- Aar - op 28/12/2014 13:29:52:
Je mist een { om mee te beginnen en een } om je foreach mee te beëindigen.

Is de basistutorial op phptuts.nl geen goed idee eerst?


Aha, dat ontbrak inderdaad nog. Heb er dus het volgende van gemaakt:

if(is_array($tmp['races'])) {
foreach ($tmp['races'] as $race){$races[ $race['id'] ] = $tmp1[ $race['name'] ]['race_id'];
}
} else {
}

En ik ga direct eens even kijken naar die tutorial.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.