[php] Array wordt niet goed uitgelezen

Pagina: 1
Acties:

  • judgem
  • Registratie: December 2001
  • Laatst online: 28-04-2014

judgem

Lord of Metal

Topicstarter
Gegroet,

Ik heb een PHP script geschreven om gegevens uit de tabel reviews in mijn database op diverse manieren te sorteren.

Om te sorteren geef ik elke sorteermogelijkheid een eigen SQL statement mee:

code:
1
2
3
4
5
if ($sortorder == 'poster')
{
    $sql = $conn->find_record("SELECT * FROM reviews WHERE auto_id NOT IN (271) ORDER BY poster ASC") or die(mysql_error());
    $action = 'view';
}


De $action == 'view' ziet er vervolgens zo uit:

code:
1
2
3
4
5
6
7
8
9
if ($action == 'view')
{
    <knip>

    while ($reviews = $conn->get_record($sql)) 
    {
        <statement>
    }
}

en de functie "get_record" is als volgt samengesteld:

code:
1
2
3
4
5
6
7
function get_record($queryname)
   { if ($this->result[$queryname])
        $value = mysql_fetch_array($this->result[$queryname]);
     else
        $value = 0;
     return $value;
   }

Het rare is dat als ik de waarde van $sql laat echo'en elders in de pagina hij me de waarde Array geeft...

Wat doe ik fout en hoe los ik dit op?


Bij voorbaat dank!

- Ik bespreek ook harde waren en dan wel op www.lordsofmetal.nl - en ik draai en programmeer ze in DYNAMO


  • SuperRembo
  • Registratie: Juni 2000
  • Laatst online: 20-08-2025
dan zal hier:

$sql = $conn->find_record("SELECT * ...")

wel een array uitkomen, maar wat er in die funtie staat laat je niet zien.

| Toen / Nu


  • Apollo_Futurae
  • Registratie: November 2000
  • Niet online
Kennelijk retourneert $conn->find_record() een array (van de gevonden records?). Je kunt de indeling van die array bekijken door print_r($sql) te doen. Wat je met dit script wilt is mij trouwens niet helemaal duidelijk; als je verder geholpen wilt worden, zul je denk ik iets meer toelichting moeten geven.

Pas de replâtrage, la structure est pourrie.


  • judgem
  • Registratie: December 2001
  • Laatst online: 28-04-2014

judgem

Lord of Metal

Topicstarter
Apollo_Futurae schreef op 21 augustus 2002 @ 19:40:
Kennelijk retourneert $conn->find_record() een array (van de gevonden records?). Je kunt de indeling van die array bekijken door print_r($sql) te doen. Wat je met dit script wilt is mij trouwens niet helemaal duidelijk; als je verder geholpen wilt worden, zul je denk ik iets meer toelichting moeten geven.
Ik heb print_r($sql) laten echo'en maar deze geeft tot mijn teleurstelling slechts de inhoud van 1 record weer waar er bijna 1000 in de tabel staan. De bedoeling is dus om alle 1000 records onder elkaar te laten sorteren met diverse sorteervolgorden. Deze records worden in een table op het scherm getoond. De table heb ik al aangemaakt maar in de bovenstaande weggeknipt omdat deze in dit probleem niet relevant is en in een gestripte versie van het script wel werkt.

In deze gestripte versie kies ik voor 1 sorteervolgorde en daar werkt de while-loop wel... Ik vraag me heel sterk af waarom dat hier nu niet het geval is. Zowel waarom er maar 1 record geselecteerd wordt en waarom dit alles niet op mijn scherm getoond wordt..

Hopelijk dat iemand me dat kan verklaren en me een passende oplossing kan aandragen....

- Ik bespreek ook harde waren en dan wel op www.lordsofmetal.nl - en ik draai en programmeer ze in DYNAMO


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 07:40
Waarom gebruik je trouwens niet gewoon de PHP/MySQL API? Het lijkt er niet op alsof je iets 'bijzonders' doet.

Verder: tja, debuggen.

  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 22-08 16:45
Voor het volgende record roep je weer mysql_fetch_array() aan.

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09-2025

djc

find_record() klinkt als een functie die sowieso maar een record teruggeeft. Ik weet niet wat je voor API gebruikt voor je db, maar ik zou een betere functie zoeken (of standaard mysql_*()'s gebruiken).

Rustacean


  • judgem
  • Registratie: December 2001
  • Laatst online: 28-04-2014

judgem

Lord of Metal

Topicstarter
Sjaaky schreef op 21 augustus 2002 @ 20:32:
Voor het volgende record roep je weer mysql_fetch_array() aan.
Het lijkt mij normaal dat hij dat zelf in de while-loop al doet.

Concretere vraag: Hoe pas ik mijn code dusdanig aan dat hij alle records afgaat?

- Ik bespreek ook harde waren en dan wel op www.lordsofmetal.nl - en ik draai en programmeer ze in DYNAMO


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

Fetch array geeft 1 record terug in de vorm van een array. Dit is dus geen kolom. Om een array van een kolom te maken zul je eerst alle records moeten fetchen en deze 1 voor 1 in een array stoppen. Dit is echter niet zo handig. MySQL is veel beter in sorteren. Het is veel handiger om je query aan te passen zodat je je records in de juiste volgorde krijgt.

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


  • paulh
  • Registratie: Juli 1999
  • Laatst online: 22-06 15:30
judgem gebruikt mijn db-api .... die is hier natuurlijk niet bekend.
Maar je moet het ongeveer zo doen:

PHP:
1
2
3
4
5
6
7
$conn->open_query("querynaam", "SELECT * FROM table");
while($value = $conn->get_record("querynaam"))
{
    // hier je repeterende code gebruiken
    // in $value zit dan de array met de velden uit de recordset
}
$conn->close_query("querynaam");


Voor mensen die bekend zijn met Progress-db zullen dit heel bekend vinden ;)

[ZwareMetalen.com] - [Kom in aktie tegen de CO2 maffia]

Pagina: 1