[php] data verlies bij converteren recordset naar array

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo,

Ik zit met het volgende probleem: Ik ben bezig met een website waarbij bij de eerste keer dat de site wordt geladen direct de hoofdpagina's in een javascript array gekeeperd worden waarna ze met een onclick met innerHtml in een div geladen kunnen worden zonder de pagina te refreshen. Dit principe werkt goed, alleen de data die ik ophaal uit de database met php om deze vervolgens om te zetten naar een js array verliest onderweg ergens delen uit de pagina html.

Ik heb het een en ander al getest:
De maximale array grootte heeft hier volgens mij niets mee te maken (ik kan zo 100.000 tekens in een array stoppen en die succesvol echoen).

De functie die een recordset in een php array omzet doet het volgens mij echter nog niet helemaal goed. Het ligt hierbij wederom niet aan de array, maar volgens mij aan de odbc_result functie. Zodra ik namelijk binnen de functie de waarde die odbc_result($rs, "waardehtml") echo, en er zit een pagina van zo'n 7000 karakters in dan krijg ik er maar 4000 terug en dat zijn dan ook nog eens de onderste 4000 karakters.

Ik heb hier verder totaal geen ervaring mee, en hoop dat iemand mij hier verder mee kan helpen. Naar mijn idee moet alles gewoon werken, maar kennelijk zit er ergens een max waardoor ik delen van de pagina mis.

Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Zou je eens een stukje code laten zien? Ik kan namelijk weinig doen zo. Hoe converteer je bijvoorbeeld een recordset naar een array? En wat is een recordset volgens jou definitie?

Overigens klinkt je methode een beetje vreemd. Het lijkt me namelijk totaal overbodig om alle pagina's te printen. Een gebruiker leest namelijk vrijwel nooit alle pagina's. En je wint er denk ik weinig mee door alles in 1 keer neer te zetten. De totale load zou zelfs hoger kunnen zijn. Overigens haal je ook de back en forward navigatie weg voor de gebruiker. Ik denk dat dat erg verwarrend is.

[ Voor 53% gewijzigd door Michali op 15-04-2005 19:41 ]

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

Ik heb zelf ODBC nog niet hoeven gebruiken in PHP, maar de manualpage van odbc_result verwijst je naar deze functie wanneer je langere kolommen hebt. Misschien dat dat het oplost? Zo nee: dan zul je toch echt wat code moeten laten zien. We zijn hier niet helderziend. ;)

'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!

Verwijderd

Topicstarter
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function dbquery ($sql, $fieldname) {
  $arr    = array(); //initialiseer een $arr als een lege array, hier komt de recordset in te staan
  $conn = odbc_connect('dsn', '', ''); //dsn connectie
  $rs     = odbc_exec($conn, $sql); //voer de sql uit die via de functie binnenkomt, ga er vanuit dat die goed is.
  $x      = 1; //hiermee gaan we tellen hoeveel records er in de array worden gezet
  while (odbc_fetch_row($rs)) { //terwijl ik door de recordset ga
    for ($y = 1; $y <= odbc_num_fields($rs); $y++) { //ga door de colommen van een rij
      if ($fieldname == "") //even niet van toepassing kijk maar bij de else
        $arr[$x][odbc_field_name($rs, $y)] = odbc_result($rs, $y);
      else
        $arr[odbc_result($rs, $fieldname)][odbc_field_name($rs, $y)] = odbc_result($rs, $y); //ik krijg nu in $arr als rij het id terug dus kan ik met $arr['2'] het tweede record aanroepen en met $arr['2']['pValue'] krijg ik de html terug, overigens denk ik dat dit ook niet belangrijk is voor de oplossing
      echo odbc_result($rs, $y) . "<br />"; //dit is om te testen wat odbc_result teruggeeft, wat dus in sommige gevallen te weinig is.
      }
      $x++;
  }
  if ($x > 1) // als er records in de array zijn gezet return dan de array
    return $arr;
  odbc_close($conn);
}


deze functie doet het bij de kleinere waardes in de database goed maar bij meer dan 4000 karakters lijkt het fout te gaan.

Hier heb ik overigens wel een voorbeeldje wat deze functie echo'd. En zoals je kunt zien begint de tekst niet met de koptekst die in de html in dezelfde colom in de database opgelslagen staat.

[ Voor 65% gewijzigd door Verwijderd op 15-04-2005 20:08 ]


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Sorry hoor, maar je code is vrij onbegrijpbaar. Cryptische variabel namen (enkele, niet allen). Waar dient $arr voor bijvoorbeeld? Is het niet beter om hem een betere naam te geven, eentje die beschrijft waar hij voor dient. Zou je de rest ook eens kunnen toelichten? Wat ga je met die array doen?

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Michali schreef op vrijdag 15 april 2005 @ 19:48:
Sorry hoor, maar je code is vrij onbegrijpbaar. Cryptische variabel namen (enkele, niet allen). Waar dient $arr voor bijvoorbeeld? Is het niet beter om hem een betere naam te geven, eentje die beschrijft waar hij voor dient. Zou je de rest ook eens kunnen toelichten? Wat ga je met die array doen?
zie comments die ik net ff toegevoeg heb bij de functie. Die array komt in een class page te staan. Vervolgens moet de array in een functie die er een js array van maakt zodat ik deze op de uiteindelijke pagina kan gebruiken. Zover is het echter nog niet want daarvoor moet eerst de data overdracht compleet zijn.

Wat overigens ook vreemd is, is dat als ik de waarde van de html vanuit de array echo (die in principe gelijk zou moeten zijn aan het result dat ik terug krijg van odbc_result) ik wel meer tekst krijg vanuit de array (4000 karakters en vanuit odbc_result ongeveer 1500), maar nog steeds niet alles. Bovendien geeft de array de tekst van bovenaf en niet van onderen... |:(

[ Voor 21% gewijzigd door Verwijderd op 15-04-2005 20:20 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
-NMe- schreef op vrijdag 15 april 2005 @ 19:41:
Ik heb zelf ODBC nog niet hoeven gebruiken in PHP, maar de manualpage van odbc_result verwijst je naar deze functie wanneer je langere kolommen hebt. Misschien dat dat het oplost? Zo nee: dan zul je toch echt wat code moeten laten zien. We zijn hier niet helderziend. ;)
kheb het antwoord toch hier kunnen vinden:
gewoon in php.ini even
odbc.defaultlrl = 8192
goedzetten en het werkt (tot een max van 8 Kb).

thx nme

[ Voor 3% gewijzigd door Verwijderd op 16-04-2005 02:48 ]

Pagina: 1