[php]Return Array in funtie

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Speedener
  • Registratie: September 2000
  • Laatst online: 12:54
Ik ben aan het stoeien met funties, ff de does en dont's aan het uitzoeken.

Nu vroeg ik me af.

Ik heb deze functie:
PHP:
1
2
3
4
5
6
7
// MySQL fetch array
    function db_array($database_query)
    {
        $database_result = mysql_query($database_query) or die(mysql_error());        
        $database_array = mysql_fetch_array($database_result, MYSQL_ASSOC);
        return $database_array;
    }


En er komt dus een array uit.
Als ik het nu probeer weer te geven dmv een while, dan komt er een loop van hier tot tokio.

Hoe kan ik dat oplossen?

LG Therma V Split WP: HU143MA.U33-HN1636M NK5


Acties:
  • 0 Henk 'm!

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 02-09 11:02

D2k

ik gok dat je je returnwaarde niet goed afvangt?
wat is je functie aanroep?

Doet iets met Cloud (MS/IBM)


Acties:
  • 0 Henk 'm!

  • Speedener
  • Registratie: September 2000
  • Laatst online: 12:54
PHP:
1
2
3
4
    while($row = db_array("SELECT * FROM frontpage ORDER BY posttime DESC LIMIT 10"))
    {
        echo $row['id'] . '<br>';
    }

[ Voor 17% gewijzigd door Speedener op 14-01-2003 10:05 ]

LG Therma V Split WP: HU143MA.U33-HN1636M NK5


Acties:
  • 0 Henk 'm!

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 02-09 11:02

D2k

hmmz
en wat levert print_r($row); op?

Doet iets met Cloud (MS/IBM)


Acties:
  • 0 Henk 'm!

Verwijderd

ja gek he dat ie oneindig loopt.... kijk eens wat er gebeurd!

Acties:
  • 0 Henk 'm!

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 02-09 11:02

D2k

Verwijderd schreef op 14 January 2003 @ 10:09:
ja gek he dat ie oneindig loopt.... kijk eens wat er gebeurd!

:X
ik ziet um

* D2k needs coffee

Doet iets met Cloud (MS/IBM)


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Let je wel ff op dat de teruggegeven array alleen maar een lijstje van de kolomwaarden van 1 row is? Als je vervolgens je result weer met een neiuwe query vult heb je natuurlijk weer een nieuwe result set. Vandaar dat dat bovenstaande lusje gewoon een oneindige lijst met kopienen van de eerste row weergeeft..

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Speedener
  • Registratie: September 2000
  • Laatst online: 12:54
Hij vraagt hem elke keer aan ofzo?

edit: hoe los ik dat op :?

[ Voor 32% gewijzigd door Speedener op 14-01-2003 10:12 ]

LG Therma V Split WP: HU143MA.U33-HN1636M NK5


Acties:
  • 0 Henk 'm!

Verwijderd

Speedener schreef op 14 januari 2003 @ 10:05:
PHP:
1
2
3
4
    while($row = db_array("SELECT * FROM frontpage ORDER BY posttime DESC LIMIT 10"))
    {
        echo $row['id'] . '<br>';
    }
zoiets?
PHP:
1
2
3
4
5
    $arr = db_array("SELECT * FROM frontpage ORDER BY posttime DESC LIMIT 10");
    while($row = each($arr)))
    {
        echo $row['id'] . '<br>';
    }

Acties:
  • 0 Henk 'm!

  • Speedener
  • Registratie: September 2000
  • Laatst online: 12:54
Verwijderd schreef op 14 januari 2003 @ 10:14:
[...]


zoiets?
PHP:
1
2
3
4
5
    $arr = db_array("SELECT * FROM frontpage ORDER BY posttime DESC LIMIT 10");
    while($row = each($arr)))
    {
        echo $row['id'] . '<br>';
    }
Nee dat is het ook niet want dan toont hij alleen maar Record 1. :/

LG Therma V Split WP: HU143MA.U33-HN1636M NK5


Acties:
  • 0 Henk 'm!

Verwijderd

owja sorry niet echt naar je functie gekeken.
Komt omdat je een array krijgt per record. Normaar lus je niet door een array heen, maar door een resultset en krijg je een array terug.
In dit geval zul je in je functie denk ik door die resultset heen moeten gaan. Dat in een array zetten en die returnen.

vind die or die niet zo netjes in je functie, kun je dan niet beter false returnen?

Acties:
  • 0 Henk 'm!

  • [ash]
  • Registratie: Februari 2002
  • Laatst online: 05-04 18:06

[ash]

Cookies :9

ehhh... misschien je array 'global' maken :?

Acties:
  • 0 Henk 'm!

  • Speedener
  • Registratie: September 2000
  • Laatst online: 12:54
Verwijderd schreef op 14 januari 2003 @ 10:23:
owja sorry niet echt naar je functie gekeken.
Komt omdat je een array krijgt per record. Normaar lus je niet door een array heen, maar door een resultset en krijg je een array terug.
In dit geval zul je in je functie denk ik door die resultset heen moeten gaan. Dat in een array zetten en die returnen.

vind die or die niet zo netjes in je functie, kun je dan niet beter false returnen?
heb je wat documentatie voor dat result set? het ie geen phpfunctie toch?

LG Therma V Split WP: HU143MA.U33-HN1636M NK5


Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Verwijderd schreef op 14 January 2003 @ 10:14:
[...]


zoiets?
PHP:
1
2
3
4
5
    $arr = db_array("SELECT * FROM frontpage ORDER BY posttime DESC LIMIT 10");
    while($row = each($arr)))
    {
        echo $row['id'] . '<br>';
    }
try this
PHP:
1
2
3
4
5
    $arr = db_array("SELECT * FROM frontpage ORDER BY posttime DESC LIMIT 10");
    foreach ($arr as $row)
    {
        echo $row['id'] . '<br>';
    }

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 12:54

Bosmonster

*zucht*

Speedener schreef op 14 januari 2003 @ 10:27:
[...]

heb je wat documentatie voor dat result set? het ie geen phpfunctie toch?


[edit.. heb moeite met deze functie.. :P wat is het nut!]

Misschien moet je je afvragen wat het nut is van een dergelijke functie.. aangezien het geen dubbel werk voorkomt..

Je kunt misschien een functie maken (al zou een volledige db-class meer op zn plek zijn) om een resultset op te vragen (dus wat een mysql_query() teruggeeft), om errorhandling te centraliseren..

[ Voor 94% gewijzigd door Bosmonster op 14-01-2003 10:37 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Speedener schreef op 14 January 2003 @ 10:27:
[...]

heb je wat documentatie voor dat result set? het ie geen phpfunctie toch?
nee het is niet een functie :)
het is een resultaat. die jij dmv functies aan kan roepen.
Php houdt voor die result set (of record set, wat je het ook wil noemen) een interne pointer bij waar hij is gebleven als je functies als mysql_fetch_array($result) gebruikt.
Omdat jij steeds opnieuw die functie uitvoert zal je steeds weer vooraan beginnen en dus nooit eindigen.

Lees mijn 2e reactie, daar kun je meer mee denk ik :)

Acties:
  • 0 Henk 'm!

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 17-09 07:55

thomaske

» » » » » »

de fout zit in je functie.. van je hele recordset geef je alleen je eerste record terug..

[edit]
je moet de functionaliteit dus splitsen in 2 functies: een die de recordset aanmaakt, en een die een array van het huidige record teruggeeft.

[ Voor 47% gewijzigd door thomaske op 14-01-2003 10:38 ]

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


Acties:
  • 0 Henk 'm!

  • Speedener
  • Registratie: September 2000
  • Laatst online: 12:54
Het lukt me echt ff niet :?

heb nu dit in mysql.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
<?php

// MySQL connection maken
    function db_connect($database_host, $database_username, $database_password, $database_databasename)
    {
        $database_connection = mysql_connect($database_host, $database_username, $database_password) or die(mysql_error());
        mysql_select_db($database_databasename, $database_connection);
        return TRUE;
    }

// MySQL query 
    function db_query($database_query)
    {
        $database_result = mysql_query($database_query) or die('<div style="width: 500px"><b>Error:</b><hr>' . mysql_error() . '<br><hr><br><b>Query:</b><hr><pre style="margin: 0px;">' . $database_query . '</pre><hr></div>');
        
        return $database_result;
    }
    
// MySQL fetch array
    function db_array($database_result)
    {
        //$count = 0;
        //if($count == 0){ $database_result = db_query($database_query); $count++; }
        //$database_array = ;
        return mysql_fetch_array($database_result, MYSQL_ASSOC);
    }
?>


en dit in mijn test.php:
PHP:
1
2
3
4
5
6
7
8
9
10
11
    require_once('mysql.php');
    db_connect('localhost', 'Speedener', 'xxx', 'xxx');

    $result = db_query("SELECT * FROM counter_name_country");
    $array = db_array($result);
    
    while($a = each($array))
    {
        echo $a['country_id'];
        echo '<br>';
    }

LG Therma V Split WP: HU143MA.U33-HN1636M NK5


Acties:
  • 0 Henk 'm!

Verwijderd

luisteren naar woeitje ;) je krijgt na een query, als die gelukt is, een resultset terug en daar kun je per row dmv mysql_fetch_array($resultset,$row) arrays uithalen.

Acties:
  • 0 Henk 'm!

Verwijderd

db_array geeft alleen het eerste record terug, daar gaat het fout!
het heeft ook geen zin om dit te doen:
PHP:
1
2
    $result = db_query("SELECT * FROM counter_name_country"); 
    $array = db_array($result);

daar kopieer je gewoon array 1 in array 2 :)

loop in je functie door je result heen met while($record=mysql_fetch_array())
vul de array in die functie en return die.
Dan gaat het wel goed.

Qua performance......... is dat nie een goeie methode want je loopt 2 keer door je resultset terwijl je maar 1 van de 2 keer er echt iets mee doet.

[ Voor 2% gewijzigd door Verwijderd op 14-01-2003 10:54 . Reden: typo ]


Acties:
  • 0 Henk 'm!

  • Speedener
  • Registratie: September 2000
  • Laatst online: 12:54
Dank allen,

Ik ga dus gewoon lekker mysql_fetch_array direct gebruiken ;)

LG Therma V Split WP: HU143MA.U33-HN1636M NK5


Acties:
  • 0 Henk 'm!

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 17-09 07:55

thomaske

» » » » » »

Een mogelijkheid is ook om gebruikt te maken van een database-class

Lijstje van mogelijke classen

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


Acties:
  • 0 Henk 'm!

  • DiveZoner
  • Registratie: Augustus 2001
  • Laatst online: 28-02 14:26
thomaske schreef op 14 January 2003 @ 11:21:
Een mogelijkheid is ook om gebruikt te maken van een database-class

Lijstje van mogelijke classen
kan ook maar zelf bouwen is leuker en leerzamer, toch?

Sign here: _________________

Pagina: 1