25. september 2003 - 10:00Der er
48 kommentarer og 1 løsning
dele dataudtræk op på flere sider
hej !
Jeg har en funtion der viser en masse records fra en mysql database. Jeg har set på mange sider at man kan begrænse antallet af records på en side og istedet have et link "next page" eller næste knap. Således at man kan bladre i sit dataudtræk.
Jeg ville lave det ved kun at hive, lad os sige 20 poster ud af gangen. Og så lave det for hver side. Enten det eller lave et "for" loop de kun tæller 20. Lad så nogle variabler beskrive hvorlangt du er kommet og så en href på næste. <a href="_PHP_SELF?start=21&antal=20">næste</a>
når du henter fra databasen kan du bruge LIMIT...hvis du har phpmyadmin, er det nemmeste næsten at kigge der hvordan det ser ud og hvad det betyder. Så skal du bare sende et offset med hver gang...
Altså bruge 'for' istedet for 'foreach'. Det du vil er jo at undgå at den løber igennem alle poster, men starter og slutter et bestemt sted i et array.. Klassisk 'for' løkke.
Det eneste du laver om er vist de to øverste ligner.. Hvor du lige laver en for header i stedet for foreach.. og så selv hiver elementet ud. Og så har vi de to elementer der tæller...
Men jeg vil stadig mene den bedste løsning, performancemæssigt, er kun at hive det ud af db som du skal bruge. Så måske GetCustomerReports kan laves om til det.. Jeg ved ikke hvor store poster der er tale om, men hvis man hiver 200 poster ud hver gang man viser 20, er det jo et rimeligt stort overhead..
hmm... der er lige et tegn der vender forkert.. my bad... >= siger større end lige med.. Det der skal bruges er <= et fejltryk på shift... for($i=$start; $i<=$start+$antal; $i++) {
Nej... forløkken tæller selv og afslutter. Den har strukturen for ( tællevariabel ; begrænsning ; tællemekanisme) i vores eksempel for ( $i ; $i <= $antal+start ; $i++)
Men jeg forstår ikke at den ikke skriver noget ud, jeg har jo ikke lavet om i koden, blot sat en begrænsning på. Den getCustomerReports() function er jo den samme, og hiver det ud i reports. Det skrev det fint ud før?
Hvis du bare lige skriver: echo "bla bla"; lige efter forløkken, så kan vi se om den kører den... altså: for($i=$start; $i<=$start+$antal; $i++) { echo "bla bla"; $rep=$report[$i];
prøv lige at skrive print("start: $start inden loop <br>"); lige inden du kalder $reports = getCustom.... Og så skriv tilbage hvad den skriver både første gang, og når du har trykket på linket...
Prøv lige at kopiere hele koden herind, med "isset" delen og det hele.. Bare lige for at jeg kan se sammenhængen.. Forstår ikke at den ikke bliver sat første gang.. også den sidste print skal med...
Jeg ville faktisk også gerne have print sætningen efter det med _GET og isset. Altså lige inden if(isset($reports) Så skulle den gerne være sat hver gang $start.
Det har jeg allerede i den :-) echo "<td>$i</td><tr>"; i forloop
giver følgende Subject Name Date count start: inden loop start: 0 inden loop endnu enttttesttete fdsfsdf fssfsdfsdf,sæld Simon Jespersen 2003-09-18 0 asdasddas Simon Jespersen 2003-09-25 1 wqeqwe eqwe qe Simon Jespersen 2003-09-25 2 qwerwqewqeqweqwe Simon Jespersen 2003-09-25 3 eqweqewqeqweqw Simon Jespersen 2003-09-25 4 dsadadasdadada Simon Jespersen 2003-09-25 5 dasdasdasdasdada Simon Jespersen 2003-09-25 6 dasdsadasdasdasd Simon Jespersen 2003-09-25 7 saddasdasdasda Simon Jespersen 2003-09-25 8 dasdasdadasdada Simon Jespersen 2003-09-25 9 dasdadadadasd Simon Jespersen 2003-09-25 10
Det gjore desværre ingen forskel, tror du det kan have noget at gøre med at $reports = GetCustomerReports($custId,$repId); disse variabler, ikke kommer med når når man kalder $PHP_SELF og derfor er $reports tom.
Ja... hvis de er med første gang du kalder... så kan det sagtens... vi overfører jo kun start og antal... godt bud.. Prøv at find ud af hvad der bliver overført første gang du kalder siden. Hvad står der efter ? - står der noget. Hvis ikke bliver de overført med 'post' så skal vi til at kigge i koden, for at finde ud af hvad de hedder...
denne fil show_customer, er der følgende form De bliver kaldt med følgende form
echo "<form action=\"show_reports.php\" method=POST>"; echo "<td><input type=\"submit\" value =\" Show support reports\"></td>"; echo "<input type = \"hidden\" name = \"custId\" value=$customerId>"; echo "<input type = \"hidden\" name = \"customerName\" value=\"$customerName\">"; echo "</form>";
custId og customername bliver altå medtaget fra en anden side første gang siden kaldes.
Ja.. ok... og med POST. Jeg kan ikke lige huske hvordan man med en <a> overfører med post, eller om man kan... Men hvis vi så skriver: echo "<a href="$_PHP_SELF?start=$nystart&antal=$antal&custId=$custId&repId=$repId\">næste</a>");
og så oppe i toppen tilføjer : if(!isset($custId)){ $custId = $_GET['custId']; } if(!isset($repId)){ $repId = $_GET['repId']; }
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.