Array returnen en echo'en uit functie. Iets is fout maar wat?

Status
Niet open voor verdere reacties.

killer4all2

Gebruiker
Lid geworden
26 mei 2009
Berichten
449
#Opgelost: http://www.helpmij.nl/forum/showthr...out-maar-wat?p=4720009&viewfull=1#post4720009

Goeden dag,

Ik heb op het moment een functie geschreven die informatie uit een database haalt en deze in een array plaats. Als volgt returned hij de array met een id. Dit id bevat weer een array die de overige informatie uit de table row bevat.

Alles doet het alleen er gaat iets fout. Ik moet persee ($arr[$pid]['category'] = $category;, $arr[$pid]['title'] = $title; ) in mijn script hebben staan ander returned hij niks. Maar als ze er beide in staan dan returned hij 1 keer een leeg resultaat en 1 keer het resultaat die ik wou opvragen.

Hij returned ook alleen de eerste letter wat ik niet helemaal snap.

Database structuur + inhoud
structuur.jpg

De fout ligt volgens mij in de volgende functie:

function getPage - haalt alle pagina informatie uit de table pages
PHP:
 function getPage($id = '')
    {
        global $Database;
        
        if($stmt = $Database->prepare("SELECT id, title, category FROM pages"))
        {
            $stmt->execute();
            $stmt->bind_result($pid, $title, $category);
            
            $arr = array();
            
            while ($stmt->fetch()) 
            {
                $arr[$pid]['category'] = $category;
                $arr[$pid]['title'] = $title;
            }
            
            return $arr;
        }
    }

Script dat de informatie uit de arrays op het beeld toont, gebruikmakend van de bovenstaande functie
PHP:
$thearray = $Pages->getPage();
        
        foreach($thearray as $array => $category)
        {
            echo "id = " . $array . "<br />";
            
            foreach($category as $tweede)
            {
                echo "category name = " . $tweede['category'] . "<br/>";
                echo "page title= " . $tweede['title'] . "<br/>";
            }
            echo "_______________________________________________<br /><br />";
        }

Wat hij momenteel returned:
Code:
page titles
id = 1
category name = 
page title= 
category name = H
page title= H
_______________________________________________

id = 2
category name = 
page title= 
category name = O
page title= O
_______________________________________________

id = 3
category name = 
page title= 
category name = I
page title= I
_______________________________________________

id = 4
category name = 
page title= 
category name = M
page title= M
_______________________________________________

id = 5
category name = 
page title= 
category name = P
page title= P
_______________________________________________

id = 6
category name = 
page title= 
category name = C
page title= C
_______________________________________________

Database structuur + inhoud
structuur.jpg

Ik hoop dat iemand weet wat er fout is hier :)

Mvg,
Rowan
 
Laatst bewerkt:
Wat is het resultaat van dit:
PHP:
$thearray = $Pages->getPage();
print_r($thearray);

Ik begrijp dat je zowel de categorie als alle pagina's in die categorie wilt opvragen?
Waarom gebruik je in dat geval geen JOIN?

[sql]SELECT
*
FROM
pages p, categories c
WHERE c.id = p.category[/sql]
Iets in die richting :)

Dan krijg je één array terug met alle informatie :)
 
Heel erg bedankt voor je reactie!,

Maar helaas daar ligt het probleem niet. Het probleem ligt hem in hoe ik de array aanmaak. Maar op een of andere manier heb ik hier altijd nog moeite mee :$.

Wat de bedoeling is, is dat ik de informatie in een array terug krijg en dat alle informatie in bij zijn eigen id hoort zodat ik de result makkelijk apart kan behandelen. Het probleem is dat hij lege waardes terug geeft (wat ik niet snap) en ik snap ook niet waarom hij maar 1 letter returned. :)

Ik hoop dat iemand mij hier nog verder mee kan helpen :)
 
Vandaar ook de print_r(); ;)

Je verwacht een ander resultaat dan dat je terugkrijgt, kwestie van op verschillende punten variabelen controleren of ze het juiste resultaat hebben.

Door de output van de functie is je beginpunt, vervolgens terugwerken binnen de functie.
 
Manier van array opvragen

Ey bedankt de waardes die hij nu terug geeft zijn wel goed. Alleen als ik een specifiek item probeer op te halen zoals alleen een title, dan geeft die alleen de eerste letter van het resultaat (deze letter klopt wel). Weet jij misschien waarom ? :)

Result print_r
Code:
int 1
Home

int 2
Over Eden Interieur

int 3
Interieur

int 4
Maatwerk

int 5
Projecten

int 6
Contact

Result echo specifiek item
Code:
int 1
H

int 2
O
int 3
I

int 4
M

int 5
P

int 6
C

Functie
PHP:
function getPage($id = '')
    {
        global $Database;
        
        if($stmt = $Database->prepare("SELECT p.id, p.title, p.category FROM pages p, category c WHERE c.id = p.category"))
        {
            $stmt->execute();
            $stmt->bind_result($pid, $title, $category);
            
            $arr = array();
            
            while ($stmt->fetch()) 
            {
                $arr[$pid]['title'] = $title;
            }
            
            return $arr;
        }
    }

Manier van opvragen met print_r
PHP:
  $thearray = $Pages->getPage();
        
        foreach($thearray as $array => $category)
        {
            //echo "id = " . $array . "<br />";
            
            var_dump($array);
            
            foreach($category as $tweede)
            {
                print_r($tweede);
                //echo "category name = " . $tweede['category'] . "<br/>";
                //echo "page title= " . $tweede['title'] . "<br/>";
            }
        }

Manier van opvragen met echo en specifiek item
PHP:
 $thearray = $Pages->getPage();
        
        foreach($thearray as $array => $category)
        {
            //echo "id = " . $array . "<br />";
            
            var_dump($array);
            
            foreach($category as $tweede)
            {
                //print_r($tweede);
                echo $tweede['title'];
                //echo "category name = " . $tweede['category'] . "<br/>";
                //echo "page title= " . $tweede['title'] . "<br/>";
            }
        }

Ik dat je mij verder kunt helpen of dat iemand anders mij kan helpen! :)
 
Fout is helemaal opgelost !

Het opvragen is simpelweg fout, het scriptje hier benede werkt prima :) Heel erg bedankt :)

PHP:
<?php
        $thearray = $Pages->getPage();
        
        foreach($thearray as $array => $category)
        {
            //echo "id = " . $array . "<br />";
            
            //var_dump($array);
            echo $array . ". ";
            
            foreach($category as $tweede)
            {
                //print_r($tweede);
                
                
                echo $category['title'] . "<br/>";
                //echo "category name = " . $tweede['category'] . "<br/>";
                //echo "page title= " . $tweede['title'] . "<br/>";
            }
        }
    ?>

#Opgelost
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan