[PHP] Hulp bij zoeken naar fout in code

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • tsteoh
  • Registratie: Januari 2010
  • Laatst online: 13-04 00:57
Geachte forumleden,

Ik heb een vraag over mijn php-code, en ik kan het antwoord niet op internet vinden. Ik heb mijn tekst nu gewoon in de index.php staan, en daar werkt het prima. Maar het is makkelijker en overzichterlijker als het in de geinclude functions.php komt. Maar toen ik dit daar neer gezet had, deed hij het niet meer. De fout lijkt te zijn dat hij de foreach's niet uitvoerd. Maar ik kan nergens vinden waarom hij dit niet doet.

De code in de index:
PHP:
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
                <div id="settings-tab-widgets" class="settings-tab">
                    <div class="settings-tab-wrap">
                    
                        <h4>Voeg widgets toe</h4>
                        <?php
                        $widgets = scanWidgetsFolder();
                        $sortedTitle = sortWidgetTitle($widgets);
                        
                        foreach($sortedTitle as $title){
                            foreach($widgets as $widget){           
                                if($title == $widget['title']){
                                    
                                ?>
                                <div class="settings-widget <?php 
                                                                if(checkIfUserHasTheWidget(getFromSession('userName'),$widget['package_name'])){
                                                                    $disabled = ' disabled';
                                                                    echo 'settings-widget-added';
                                                                }
                                                           ?>">
                                    
                                    <div class="settings-widget-image-wrap">
                                        <img class="settings-widget-image" src="<?php print(IW_WH_URI); ?>/iw-content/widgets/<?php echo $widget['package_name']?>/preview.png" alt="" />
                                    </div>
                                    
                                    <div class="settings-widget-info">
                                        <h4><?php echo $widget['title'];?></h4>
                                        <p><?php echo $widget['description'];?></p>
                                    </div>
                                    
                                    <p class="settings-widget-extrainfo">
                                    <?php
                                        
                                        echo '<span class="settings-widget-add button' . $disabled . '" title="'. $widget['package_name'] .'">Toevoegen</span>';
                                    ?>
                                    
                                    
                                        Door <?php echo $widget['author']; ?><br/>
                                        Versie <?php echo $widget['version']; ?>
                                    </p>    
                                    
                                </div>
                                <?php
                                $disabled = '';
                                }
                            }
                        }
                        ?>
                    </div>                  
                </div>


De code in de functions.php:

PHP:
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
    function widgetTab()
    {
        $widgettab =    '<div id="settings-tab-widgets" class="settings-tab">
                        <div class="settings-tab-wrap">
        
                            <h4>Voeg widgets toe</h4>
                        ';
        $widgets = scanWidgetsFolder();
        $sortedTitle = sortWidgetTitle($widgets);
        
        foreach($sortedTitle as $title){    
            foreach($widgets as $widget){   
                if($title == $widget['title']){
                
                    $widgettab .= '<div class="settings-widget ';
                    if(checkIfUserHasTheWidget(getFromSession('userName'),$widget['package_name'])){
                        $disabled = ' disabled';
                        $widgettab .= 'settings-widget-added';
                    }
                    $widgettab .= '">';
                    $widgettab .=   '<div class="settings-widget-image-wrap">
                                        <img class="settings-widget-image" src="
                                    iets/iw-content/widgets/'.$widget["package_name"].'/preview.png" alt="" />
                                     </div>';
                    $widgettab .=  '<div class="settings-widget-info">
                                        <h4>'.$widget["title"].'</h4>
                                        <p>'.$widget["description"].'</p>
                                    </div>';
                    $widgettab .=   '<p class="settings-widget-extrainfo">
                                        <span class="settings-widget-add button' . $disabled . '" title="'. $widget["package_name"] .'">Toevoegen</span>
                                        Door '.$widget["author"].'<br/>
                                        Versie '.$widget["version"].'
                                    </p>
                                    </div>';
                    $disabled = '';
                    
                }
            }
        }
        $widgettab .='</div></div>';
        
        return $widgettab;
    }


En als output krijg ik:

PHP:
1
2
3
4
5
<div id="settings-tab-widgets" class="settings-tab">
                        <div class="settings-tab-wrap">
        
                            <h4>Voeg widgets toe</h4>
                        </div></div>


Alvast bedankt voor jullie hulp! _/-\o_

Acties:
  • 0 Henk 'm!

  • RM-rf
  • Registratie: September 2000
  • Laatst online: 18:15

RM-rf

1 2 3 4 5 7 6 8 9

je functie 'return-ed nu gewoon dia variebele...

waarschijnlijk moet je die nog eerst echo() of print() doen:

PHP:
1
echo  widgetTab();

Intelligente mensen zoeken in tijden van crisis naar oplossingen, Idioten zoeken dan schuldigen


Acties:
  • 0 Henk 'm!

  • tsteoh
  • Registratie: Januari 2010
  • Laatst online: 13-04 00:57
??

Die output krijg ik als output van test.php:
PHP:
1
2
3
4
5
<?php
    include('header.inc.php');

    echo widgetTab();;
?>

Acties:
  • 0 Henk 'm!

  • SinergyX
  • Registratie: November 2001
  • Laatst online: 02:41

SinergyX

____(>^^(>0o)>____

Heeft $sortedTitle wel een waarde, na de scanWidgetFolder()?

Nog 1 keertje.. het is SinergyX, niet SynergyX
Im as excited to be here as a 42 gnome warlock who rolled on a green pair of cloth boots but was given a epic staff of uber awsome noob pwning by accident.


Acties:
  • 0 Henk 'm!

Verwijderd

Waar staan de functies?

scanWidgetsFolder();
sortWidgetTitle($widgets);

Staan deze voor of na de widgetTab-functie? Ze moeten voor de widgetTab-functie staan en kijk of het dan wel werkt. Anders staat er een fout in een van die functies...Zou je die ook even moeten posten.

[ Voor 2% gewijzigd door Verwijderd op 22-02-2010 18:45 . Reden: typo ]


Acties:
  • 0 Henk 'm!

  • tsteoh
  • Registratie: Januari 2010
  • Laatst online: 13-04 00:57
SinergyX schreef op maandag 22 februari 2010 @ 18:37:
Heeft $sortedTitle wel een waarde, na de scanWidgetFolder()?
Ja, volgens mij wel:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    function widgetTab()
    {
        $widgettab =    '<div id="settings-tab-widgets" class="settings-tab">
                        <div class="settings-tab-wrap">
        
                            <h4>Voeg widgets toe</h4>
                        ';
        $widgets = scanWidgetsFolder();
        $sortedTitle = sortWidgetTitle($widgets);
        
    ...
        
        return $sortedTitle;
    }


geeft:

code:
1
<html><head></head><body>Array</body></html>

Acties:
  • 0 Henk 'm!

  • tsteoh
  • Registratie: Januari 2010
  • Laatst online: 13-04 00:57
Verwijderd schreef op maandag 22 februari 2010 @ 18:44:
Waar staan de functies?

scanWidgetsFolder();
sortWidgetTitle($widgets);

Staan deze voor of na de widgetTab-functie? Ze moeten voor de widgetTab-functie staan en kijk of het dan wel werkt. Anders staat er een fout in een van die functies...Zou je die ook even moeten posten.
Voor

en:

PHP:
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
    function scanWidgetsFolder()
    {
        $currentdir = getcwd();
        chdir('../iw/iw-content/widgets/');
        $dir = "./";
        
        /*
         * 1. Check if the requested dir is a dir
         * 2. Open the dir
         * 3. Initialize the variable
         * 4. Check if the found object is a dir, and if it's not called . or ..
         * 5. Check if the file info.php is found in the opened dir
         * 6. Include the info.php file
         * 7. Load a array, with the filename and widget information
         * */
        if (is_dir($dir)) {
            if ($dh = opendir($dir)) {
                $widgets = array();
                while (($file = readdir($dh)) !== false) {
                    if(filetype($file) == 'dir' && substr($file, 0, 1) != '.'){
                        if(file_exists($file.'/info.php')){
                            include($file.'/info.php');
                            $widgets[$file] = $widget_info;
                        }       
                    }   
                }
                closedir($dh);
                
            }
        }
        chdir($currentdir);
        
        return $widgets;
    }



PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    function sortWidgetTitle($widget)
    {
        /*
         * This function will sort the widgets
         * 1. Make the new array
         * 2. Cut the old array into pieces
         * 3. The new array is loaded with the old array data
         * 4. Sort the data in alphabetic order
         * 5. Return the new array
         */
        $wid = array();
        foreach($widget as $w){
            $wid[] = $w['title'];
            natcasesort($wid);
        }
        return($wid);
    }


En anders zou 't toch al fout gaan als het nog in de index.php staat :?

Acties:
  • 0 Henk 'm!

Verwijderd

code:
1
<html><head></head><body>Array</body></html>
Wat staat er precies in de array?

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Wat verwacht je nou helemaal van ons? Dat wij voor jou gaan debuggen? Druk zelf eens de waarde af die in je variabele(n) staat. Kijk of alles wat jij verwacht dat er is ook écht zo is. Kortom, ga debuggen. Je post nu een lap code en zegt essentieel "hij doettutnie!". Weinig constructief en bovendien nutteloos voor de oplossing van je probleem. ;)

Ga dus eens debuggen en geef als je nog steeds problemen hebt eens wat meer info dan je tot nu toe gedaan hebt. Hier kunnen we bar weinig mee.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • tsteoh
  • Registratie: Januari 2010
  • Laatst online: 13-04 00:57
NMe schreef op maandag 22 februari 2010 @ 18:56:
Wat verwacht je nou helemaal van ons? Dat wij voor jou gaan debuggen? Druk zelf eens de waarde af die in je variabele(n) staat. Kijk of alles wat jij verwacht dat er is ook écht zo is. Kortom, ga debuggen. Je post nu een lap code en zegt essentieel "hij doettutnie!". Weinig constructief en bovendien nutteloos voor de oplossing van je probleem. ;)

Ga dus eens debuggen en geef als je nog steeds problemen hebt eens wat meer info dan je tot nu toe gedaan hebt. Hier kunnen we bar weinig mee.
Ik verwacht niet dat jullie gaan debuggen voor mij, ik had gehoopt dat jullie wisten dat bv een foreach niet in een functie kon ofzoiets. Ik was aan het debuggen gegaan, en erachter gekomen dat hij de foreach nooit ingaat, wat ik raar vind, want in de index.php deed hij bij vrijwel dezelfde code dit wel.. En wat voor soort info wil je dan hebben?

En een print_r van de $sortedTitle geeft hier: Array (), terwijl hij bij de index dit geeft:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Array
(
    [0] => Aex
    [1] => Buienradar
    [2] => Favorieten
    [3] => Klok
    [5] => Notes
    [7] => Poll
    [4] => Roosters
    [8] => RSS Lezer
    [6] => Webmail
    [9] => Weer
    [10] => Wrts
)

Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

tsteoh schreef op maandag 22 februari 2010 @ 19:04:
En een print_r van de $sortedTitle geeft hier: Array (), terwijl hij bij de index dit geeft:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Array
(
    [0] => Aex
    [1] => Buienradar
    [2] => Favorieten
    [3] => Klok
    [5] => Notes
    [7] => Poll
    [4] => Roosters
    [8] => RSS Lezer
    [6] => Webmail
    [9] => Weer
    [10] => Wrts
)
Dit gedeelte van je post heeft voor de overige lezers geen waarde. Als jij constateert dat een bepaalde array op de ene pagina wel en op de andere niet gevuld wordt, moet je gaan kijken waar 'ie al dan niet gevuld wordt en waarom dan niet. Dat heet debuggen.

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • tsteoh
  • Registratie: Januari 2010
  • Laatst online: 13-04 00:57
CodeCaster schreef op maandag 22 februari 2010 @ 19:07:
[...]

Dit gedeelte van je post heeft voor de overige lezers geen waarde. Als jij constateert dat een bepaalde array op de ene pagina wel en op de andere niet gevuld wordt, moet je gaan kijken waar 'ie al dan niet gevuld wordt en waarom dan niet. Dat heet debuggen.
NHeezemans wou graag weten wat in de array stond, vandaar.

En dat heb ik gedaan, en na een uur zoeken niet kunnen vinden, dus had ik gehoopt dat jullie, die langer en meer ervaring in php hebben het misschien konden zien, want ik snap niet waarom hij de array nu ineens niet vult en geloof me, ik had het ook liever zelf gevonden, maar dat kan ik niet.. :'(

Acties:
  • 0 Henk 'm!

  • cytherea
  • Registratie: Oktober 2003
  • Laatst online: 12-09 10:22
Misschien iets heel doms maar je hebt wel een include/require in index.php staan om functions.php in te laden?

En misschien error_reporting(E_ALL); uitvoeren om zeker te weten dat je alle warnings/errors krijgt, dat kan soms ook helpen.

Acties:
  • 0 Henk 'm!

  • tsteoh
  • Registratie: Januari 2010
  • Laatst online: 13-04 00:57
cytherea schreef op maandag 22 februari 2010 @ 19:19:
Misschien iets heel doms maar je hebt wel een include/require in index.php staan om functions.php in te laden?

En misschien error_reporting(E_ALL); uitvoeren om zeker te weten dat je alle warnings/errors krijgt, dat kan soms ook helpen.
Haha, niks is dom;) En ja, dat zit in de header.inc.php. En bij de error_reporting krijg ik niks, dus daar ligt het niet aan, toch bedankt:)

Acties:
  • 0 Henk 'm!

  • SinergyX
  • Registratie: November 2001
  • Laatst online: 02:41

SinergyX

____(>^^(>0o)>____

tsteoh schreef op maandag 22 februari 2010 @ 19:04:
Ik verwacht niet dat jullie gaan debuggen voor mij, ik had gehoopt dat jullie wisten dat bv een foreach niet in een functie kon ofzoiets. Ik was aan het debuggen gegaan, en erachter gekomen dat hij de foreach nooit ingaat, wat ik raar vind, want in de index.php deed hij bij vrijwel dezelfde code dit wel.. En wat voor soort info wil je dan hebben?
Als hij in huidige vorm in de index het wel deed, wordt er dus iets te laat, of verkeerd opgehaald.

Desnoods zet je stukje voor stukje in de functions.php, tot je opeens geen widgets meer hebt.

Mogelijk dat je ergens een stukje code heb achtergelaten, na de include maar voor de widgetTab() echo, dat je array weer leegt.

Onderaan bij return $widgettab;, wat geeft een echo hier?

[ Voor 12% gewijzigd door SinergyX op 22-02-2010 19:24 ]

Nog 1 keertje.. het is SinergyX, niet SynergyX
Im as excited to be here as a 42 gnome warlock who rolled on a green pair of cloth boots but was given a epic staff of uber awsome noob pwning by accident.


Acties:
  • 0 Henk 'm!

  • tsteoh
  • Registratie: Januari 2010
  • Laatst online: 13-04 00:57
SinergyX schreef op maandag 22 februari 2010 @ 19:22:
[...]

Als hij in huidige vorm in de index het wel deed, wordt er dus iets te laat, of verkeerd opgehaald.

Desnoods zet je stukje voor stukje in de functions.php, tot je opeens geen widgets meer hebt.

Mogelijk dat je ergens een stukje code heb achtergelaten, na de include maar voor de widgetTab() echo, dat je array weer leegt.

Onderaan bij return $widgettab;, wat geeft een echo hier?
Een lege array, ik heb nu de functie zo omgebouwd dat hij in de index.php de twee arrays ophaald, en die als variabele meegeeft aan de widgetTab() functie, niet precies wat ik in gedachte had, maar het werkt voor nu!

Super super bedankt voor de hulp van de mensen die me geholpen hebben! _/-\o_
You guys owe me one!

Acties:
  • 0 Henk 'm!

Verwijderd

Blijkbaar geeft je functie 'scanWidgetsFolder' in het ene geval een gevulde array terug, en in het andere geval een lege array. Misschien moet je eens kijken waarom dit zo is. Die functie maakt gebruik van relatieve paden; zou het misschien kunnen zijn dat daar iets fout gaat? Is de huidige directory in het ene geval anders dan in het andere? Staat je index.php misschien in een andere directory dan je functions.php? Zo maar wat vragen.
Pagina: 1