[PHP] MySQL / PHP navigatie script probleem

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Goede morgen dames en heren

(zou een modderator deze topic verplaatsen naar het juiste sectie van dit forum? ik zie nu ook dat ik het in het verkeerde sectie heb gepost excuses)

Ik ben een beetje nieuw op dit forum. Ik lees het forum meestal voordat ik wat post (het is mijn eerste topic)
Ook heb ik op google gezocht en op dit forum om dit probleem op te lossen maar ik kom er niet uit.

(Orginele pagina van het script http://www.sitemasters.be...navigatie_in_PHP_en_MySQL

In het originele script staat ook een functie (deel 5) uitgelegd, alleen ik weet niet hoe ik dat moet ontcijferen.)

Ik ben bezig om een tabel uit mijn MySQL systeem te halen en het op te delen in "stukjes" van 10.
Dus mijn tabel bestaat uit bijvoorbeeld 30 records dan zou ik totaal 3x 10 rijen moeten krijgen.

Nou heb ik een script dat het wel uitvoert met "harde" MySQL links. maar zo gauw ik een "variable" in mijn script zet dan pakt hij alleen de eerste 10 records maar de rest niet, dus zo gauw ik naar een tweede pagina wilt gaan laat hij alleen mij theads zien zonder de informatie er onder.

Dit is het script wat ik gebruik:
PHP: filename
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
<?php

require("c:/Webserver/wwwNet/functies/connect.php"); // maak verbinding met de database

$res1 = mysql_query("SELECT COUNT(id) FROM tijd WHERE idnummer='68561' ") or die("res1: ".mysql_error()); // vraag het AANTAL items op
$items_totaal = mysql_result($res1, 0); // het totaal aantal items
mysql_free_result($res1); // geef het resultaat vrij

$items_per_pagina = 2; // vrij te kiezen
$aantal_paginas =  ceil($items_totaal / $items_per_pagina); // het aantal items per pagina

// de huidige pagina opvragen
$huidige_pagina = 0; // default
if(isset($_GET['p']) && is_numeric($_GET['p']) && $_GET['p'] > 0 && $_GET['p'] < $aantal_paginas) {
    $huidige_pagina = $_GET['p'];
}

// items van de huidige pagina ophalen
$offset = $huidige_pagina * $items_per_pagina;
$res2 = mysql_query("SELECT idnummer, datum FROM tijd WHERE idnummer='68561' ORDER BY id DESC LIMIT ".$offset.","
.$items_per_pagina) or die("res2:". mysql_error());

?>

        <table class='sortable' border='1'>
            <thead>
                <tr>
                    <th>idnummer: </th>
                    <th>datum: </th>
                </tr>
            </thead>
            <tbody>
            
<?

            // Hier wordt de informatie uit de tabel ingevoerd
            while ($row = mysql_fetch_array($res2))
                {
                echo '<tr>' ;
                    echo "<td>" . $row['idnummer'] . "</td>";
                    echo "<td>" . $row['datum'] . "</td>";
                echo "</tr>";
                }
                
?>
            </tbody>
    </table>
<br>

<?

// navigatie
for($i = 0; $i < $aantal_paginas; $i++) {
    if($huidige_pagina == $i) {
        // huidige pagina is niet klikbaar
        echo "<b>".($i+1)."</b>";
    } else {
        // een andere pagina dan de huidige is wel klikbaar
        echo "<a href=\"".$_SERVER['PHP_SELF']."?p=".$i."\">".($i+1)."</a>";
    }
   // deel-streepje tussen alle items
    if($i < $aantal_paginas - 1) {
        echo " - ";
    }
}

?>


Dus als ik nu waar "68561" staat verander naar een variable ' ".$idnummer." ' dan pakt hij alleen het eerste gedeelte van de tabel en niet meer de rest als ik op pagina 2 druk.

Ik hoop dit ik genoeg informatie heb opgegeven voor mijn probleem.

Acties:
  • 0 Henk 'm!

  • wackmaniac
  • Registratie: Februari 2004
  • Laatst online: 19-09 18:02
Ik gok dat je in een ander forum moet zijn: PRG.

Druk je query eens af, volgens mij sluit je hem niet goed af.

[ Voor 49% gewijzigd door wackmaniac op 01-04-2008 10:48 . Reden: verkeerd gelezen ]

Read the code, write the code, be the code!


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Waar hoort mijn topic?
WEB >> PRG
Verwijderd schreef op dinsdag 01 april 2008 @ 10:41:
(zou een modderator deze topic verplaatsen naar het juiste sectie van dit forum? ik zie nu ook dat ik het in het verkeerde sectie heb gepost excuses)
Doe dan even een TR ( Afbeeldingslocatie: http://gathering.tweakers.net/global/templates/tweakers/images/icons/icon_hand.gif ) ;)
Verwijderd schreef op dinsdag 01 april 2008 @ 10:41:
Ik hoop dit ik genoeg informatie heb opgegeven voor mijn probleem.
Als je even onze Programming Beleid Quickstart doorneemt hoef je niet te hopen, maar weet je zeker ;)
Wij tweakers doen elkaar permanent de groeten ;)


Dan ben je nu in 1 klap bijgeschoold :>

[ Voor 109% gewijzigd door RobIII op 01-04-2008 10:51 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Bozozo
  • Registratie: Januari 2005
  • Laatst online: 20-02 16:10

Bozozo

Your ad here?

Je syntax klopt niet helemaal, dus hij zou eigenljik een error moeten geven.
PHP:
1
2
3
4
5
6
$res2 = mysql_query("SELECT idnummer, datum FROM tijd WHERE idnummer='68561' ORDER BY id DESC LIMIT ".$offset.","
.$items_per_pagina)

-->

$res2 = mysql_query("SELECT idnummer, datum FROM tijd WHERE idnummer='68561' ORDER BY id DESC LIMIT $offset, $items_per_pagina;")


Je kunt trouwens gewoon variabelen tussen " " tekens plaatsen; PHP herkent dat en voegt de waarde van de variabele dan in. Als je ' ' gebruikt gebeurt dat dan weer niet.

TabCinema : NiftySplit


Acties:
  • 0 Henk 'm!

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

Kortom, je wil ook gewoon een extra idnummer meepassen in die URL die zegt naar welke pagina gaat? dat is wel best basic hoor, je ziet hoe je de P parameter meepaast, paas dan ook een '&idnummer=dingetje' mee en vraag die op in je query?

Stop uploading passwords to Github!


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
SchizoDuckie schreef op dinsdag 01 april 2008 @ 10:49:
Kortom, je wil ook gewoon een extra idnummer meepassen in die URL die zegt naar welke pagina gaat? dat is wel best basic hoor, je ziet hoe je de P parameter meepaast, paas dan ook een '&idnummer=dingetje' mee en vraag die op in je query?
Helaas snap ik niet wat je precies bedoelt :?

Ik heb dit probleem (misschien is dit beter uitgelegd)

Ik heb een tabel met records die tabel word naar een tijdje erg lang dus wou ik hem opdelen in steeds maximaal 30 lang.

Ik heb script dat hier boven staat gevonden en hij werkt als ik "harde" MySQL query's er in plaats. Maar zo gauw ik bij de "WHERE" statement een variabel neer zet dan pakt hij alleen de eerste pagina en als ik dan naar het tweede pagina laat hij geen verdere informatie zien.

Dat gebeurt alleen als ik met een variabel werk

Acties:
  • 0 Henk 'm!

  • Webgnome
  • Registratie: Maart 2001
  • Laatst online: 06:21
Verwijderd schreef op dinsdag 01 april 2008 @ 11:06:
[...]


Helaas snap ik niet wat je precies bedoelt :?

Ik heb dit probleem (misschien is dit beter uitgelegd)

Ik heb een tabel met records die tabel word naar een tijdje erg lang dus wou ik hem opdelen in steeds maximaal 30 lang.

Ik heb script dat hier boven staat gevonden en hij werkt als ik "harde" MySQL query's er in plaats. Maar zo gauw ik bij de "WHERE" statement een variabel neer zet dan pakt hij alleen de eerste pagina en als ik dan naar het tweede pagina laat hij geen verdere informatie zien.

Dat gebeurt alleen als ik met een variabel werk
offtopic:
Waarom zou je een tabel vullen met maar maximaal 30 regels? Select[..] limit 30 ;(

Strava | AP | IP | AW


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
offtopic:
@Webgnome
Omdat ik dan meerdere pagina's krijg met maximaal 30 regels

voorbeeldje
Mijn tabel bestaat nu uit 9 records.
Ik wil de opdelen in 3 paginas van 3 records

omdat het dan een stuk overzichtelijker is

Het script laat de eerste pagina goed zien. Met al de juiste informatie ect.
Maar zo gauw ik naar de 2de pagina of 3de pagina wilt gaan om de informatie op te vragen laat hij alleen mijn heads zien zonder de informatie die er onder staat.

De eerste pagina laat hij goed zien:
------------------------------
| idnummer | datum |
------------------------------
| 68561 | 2008-03-01 |
------------------------------
| 68561 | 2008-03-02 |
------------------------------
| 68561 | 2008-03-03 |
------------------------------
[1] - 2 - 3

De tweede pagina leest hij niet goed uit. En dit gebeurd alleen als ik met een variabel werk in mijn MySQL query als hem "hard" maak zonder variabel lijst hij de database goed uit ect.
------------------------------
| idnummer | datum |
------------------------------

1 - [2] - 3

[ Voor 18% gewijzigd door Verwijderd op 01-04-2008 11:44 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Je echo't ook alleen idnummer en tijd!
Wat is de opbouw van je database eigenlijk want ook in je select worden alleen je idnummer en tijd opgevraagd.

Sorry verkeerd gelezen

[ Voor 9% gewijzigd door Verwijderd op 01-04-2008 11:50 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op dinsdag 01 april 2008 @ 10:41:
Dit is het script wat ik gebruik:
PHP: filename
1
2
3
4
5
<?php
...
        echo "<a href=\"".$_SERVER['PHP_SELF']."?p=".$i."\">".($i+1)."</a>";
...
?>
Ach natuurlijk, pagina $i wil de gebruiker hebben. Nu alleen nog gokken welk idnummer er bij hoort :P

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
@al_sole
Overige informatie van mijn webserver
Apache: 2.0.63
PHP: 5.2.5
MySQL: 5.0.51a

Door de while statemant vult hij steeds de "rows" aan met de juiste informatie.

Mijn SQL tabel (tijd) ziet er zo in zijn geheel er uit.
PHP: filename
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
+------------------+---------------+------+-----+---------+----------------+
| Field            | Type          | Null | Key | Default | Extra          |
+------------------+---------------+------+-----+---------+----------------+
| id               | mediumint(10) | NO   | PRI | NULL    | auto_increment |
| idnummer         | varchar(8)    | NO   |     | NULL    |                |
| computernaam_in  | varchar(15)   | NO   |     | NULL    |                |
| computernaam_uit | varchar(15)   | YES  |     | NULL    |                |
| datum            | date          | NO   |     | NULL    |                |
| inlog            | time          | NO   |     | NULL    |                |
| uitlog           | time          | YES  |     | NULL    |                |
| totaal           | time          | YES  |     | NULL    |                |
| opmerking        | varchar(255)  | YES  |     | NULL    |                |
| weeknr           | varchar(2)    | NO   |     | NULL    |                |
| jaarnr           | varchar(4)    | NO   |     | NULL    |                |
+------------------+---------------+------+-----+---------+----------------+


De informatie uit mijn tabel van de gebruiker 68561
PHP: filename
1
2
3
4
5
6
7
8
9
10
11
12
13
+----------+------------+
| idnummer | datum      |
+----------+------------+
| 68561    | 2008-03-19 |
| 68561    | 2008-03-20 |
| 68561    | 2008-03-24 |
| 68561    | 2008-03-25 |
| 68561    | 2008-03-26 |
| 68561    | 2008-03-27 |
| 68561    | 2008-03-29 |
| 68561    | 2008-03-30 |
| 68561    | 2008-03-31 |
+----------+------------+


Die gegevens wil ik opdelen over 3 pagina's van 3 records iets (want dan ik gelijk kijken als het werkt)
Het script werkt perfect zonder de variabel maar als ik een variabel gebruik voor mijn '68561' zodat ik ook van andere gebruikers de gegevens kan uitlezen wilt hij alleen de eerste pagina laten zien en de rest niet.

Acties:
  • 0 Henk 'm!

Verwijderd

Bijna weer verkeerd gelezen. Ik zie nergens een $_GET van je $idnummer .

[ Voor 70% gewijzigd door Verwijderd op 01-04-2008 12:02 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
@al_sole

Dat is juist het probleem :'(

Zo gauw ik een $idnummer = $_GET['idnummer']; in mijn script plaats en de '68561' naar '".$idnummer."' verander dan pakt hij alleen de eerste 3 records van de eerste pagina maar als ik dan naar pagina 2 wil gaan dan leest hij geen verdere informatie. dan krijg ik alleen de headers te zien van mijn tabel

Acties:
  • 0 Henk 'm!

Verwijderd

Wss omdat je niet opnieuw je idnummer meegeeft :
<?
echo "<a href=\"".$_SERVER['PHP_SELF']."?p=".$i."&idnummer=".$idnummer." \">".($i+1)."</a>";
?>

o.i.d. moet helpen.

Acties:
  • 0 Henk 'm!

  • Blacksnak
  • Registratie: Oktober 2001
  • Laatst online: 07-07-2024
*laat maar, code op volgende regel niet gezien*

*edit*
PHP:
1
2
// een andere pagina dan de huidige is wel klikbaar 
        echo "<a href=\"".$_SERVER['PHP_SELF']."?p=".$i."\">".($i+1)."</a>";


*knip*
$i is natuurlijk wel goed vermits je id bij 0 begint


Probleem is inderdaad je idnummer, dat moet je terug meegeven, zoals ^^ aangegeven.

[ Voor 195% gewijzigd door Blacksnak op 01-04-2008 12:27 . Reden: grmbl, nog niet wakker blijkbaar (idiote uurwijziging ook) ]


Acties:
  • 0 Henk 'm!

  • Rowdy.nl
  • Registratie: Juni 2003
  • Laatst online: 18-09 14:48

Rowdy.nl

Koekje d'r bij?

Verwijderd schreef op dinsdag 01 april 2008 @ 12:07:
@al_sole

Dat is juist het probleem :'(

Zo gauw ik een $idnummer = $_GET['idnummer']; in mijn script plaats en de '68561' naar '".$idnummer."' verander dan pakt hij alleen de eerste 3 records van de eerste pagina maar als ik dan naar pagina 2 wil gaan dan leest hij geen verdere informatie. dan krijg ik alleen de headers te zien van mijn tabel
Lees even hieronder; Je geeft wel een pagina nummer mee bij je linkje naar pagina 2, maar niet dat id. ;)
Verwijderd schreef op dinsdag 01 april 2008 @ 11:52:
[...]
Ach natuurlijk, pagina $i wil de gebruiker hebben. Nu alleen nog gokken welk idnummer er bij hoort :P
Dit zou dus moeten worden
PHP: filename
1
2
3
4
5
<?php
...
        echo "<a href=\"".$_SERVER['PHP_SELF']."?p=".$i."&idnummer=".$idnummer."\">".($i+1)."</a>";
...
?>

Zo geef je 'm ook weer mee naar je nieuwe pagina.

edit:
Ah, all_sole heeft het inmiddels ook al uitgespeld... ;) Zal es sneller moeten leren typen... ;)

[ Voor 3% gewijzigd door Rowdy.nl op 01-04-2008 12:22 ]

Rowdy.nl - X++ by day. C# by night. I drink coffee in the morning and beer in the evening.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
@ hierboven (allemaal)
Helaas wilt hij dan ook niet op die manier(en) de gegevens goed uitlezen.
met de echo commando

(ik wil jullie wel bedanken alvast voor de hulp :) )

Ik heb wel op de site waar het script oorspronkelijk vandaan kwam dit gevonden (staat ook in TS de link)
Het bovenstaande voorbeeld is een simpel navigatiescript - het kan natuurlijk altijd uitgebreider of netter. Wat je bijvoorbeeld zou kunnen doen, is alle bovenstaande navigatie-code onderbrengen in een functie of een class, zodat je alleen maar een functie- of methode-aanroep hoeft uit te voeren om een navigatie-menu te genereren.

Het principe blijft echter altijd hetzelfde.
We gaan hier nog kort in op een "moeilijkheid" die je hebt wanneer de pagina met de navigatie-structuur zelf al een geinclude pagina is (bijvoorbeeld ?onderdeel=overzicht). Je hebt dan in het navigatie-menu-genereer gedeelte niet genoeg aan enkel $_SERVER['PHP_SELF']."?p=".$i - je gooit dan namelijk de $_GET-variabele "onderdeel" overboord, en dat is natuurlijk niet de bedoeling.

Dit probleem is eenvoudig op te lossen door gebruikmaking van een functie, die alle $_GET-variabelen (BEHALVE $_GET['p'] !) achter elkaar zet in de vorm ?var1=waarde1&var2=waarde2 et cetera.

Hierachter plak je je pagina-navigatie-variabele met bijbehorende waarde.
We doen dit bijvoorbeeld als volgt:


Maar ik snap totaal niet hoe ik die functie dan moet uitlezen en of hoe ik het verder in het script moet plaatsen. 8)7 8)7 8)7

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
28
29
30
31
32
33
34
35
36
<?php
function querystring($nav_var) {
    $qstring = "?"; // de querystring
    if(sizeof($_GET) > 1 || !in_array($nav_var, array_keys($_GET))) {
        // meer queryvariabelen te onthouden dan enkel $_GET[$nav_var]
        foreach($_GET as $k => $v) {
            if($k != $nav_var) {
                $qstring .= $k."=".$v."&amp;";
            }
        }
    }
    return $qstring;
}
?>


Het deel om je navigatie te genereren wordt nu dus:

<?php
// navigatie
// scriptnaam + de querystring, met uitzondering van de navigatie-variabele
$q = $_SERVER['PHP_SELF'].querystring("p"); 
for($i = 0; $i < $aantal_paginas; $i++) {
    if($huidige_pagina == $i) {
        // huidige pagina is niet klikbaar
        echo "<b>".($i+1)."</b>";
    } else {
        // een andere pagina - gebruik hier $q
        echo "<a href=\"".$q."p=".$i."\">".($i+1)."</a>";
    }
    // deel-streepje tussen alle items
    if($i < $aantal_paginas - 1) {
        echo " - ";
    }
}
?>

Acties:
  • 0 Henk 'm!

Verwijderd

Heb je mijn code al geprobeerd ?
uiteraard met een $_GET['idnummer']

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
@al_sola

Ik heb verschillende variaties er op geprobeerd.

Mijn adres word dan dit:
http://localhost/online/act.php?p=1&idnummer=68561

en dan laat hij de juiste informatie zien op de eerste pagina maar als ik dan naar de tweede pagina ga dan laat hij alleen de headers weer zien

Acties:
  • 0 Henk 'm!

Verwijderd

wat echo't $offset ?

Wat er gebeurt is dat je een lege Querie ophaalt in je SELECT, dus het is handig om alle variabelen die je gebruikt in de SELECT eens te echo 'en. Dan kun je daarna analyseren waarom de Querie leeg is.

[ Voor 83% gewijzigd door Verwijderd op 01-04-2008 12:59 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dat is het juiste :'( 8)7

Zou gauw ik een query maak waar een variabel in zit dan doet hij het niet.
De query ziet er zo uit:
PHP:
1
$res2 = mysql_query("SELECT idnummer, datum FROM tijd WHERE idnummer='".$idnummer."' ORDER BY id DESC LIMIT $offset, $items_per_pagina;")


Als ik de variabel hard heb staan dan doet het script wat hij moet doen
De query ziet er dan zo uit:
PHP:
1
$res2 = mysql_query("SELECT idnummer, datum FROM tijd WHERE idnummer='68561' ORDER BY id DESC LIMIT $offset, $items_per_pagina;")


Uitleg over de offset:
$offset = $huidige_pagina * $items_per_pagina;

$offset is de startpositie in de database-tabel "tabel" waar begonnen moet worden met het ophalen van gegevens.
Stel dat we net op de pagina met pagina-navigatie binnenkomen. $_GET['p'] heeft dan nog geen waarde, dus $huidige_pagina heeft dan de waarde 0. $items_per_pagina staat 'vast' op 5. $offset wordt aldus:
$offset = 0 * 5 = 0

We beginnen dus helemaal aan het begin van de database-tabel "tabel" te kijken naar items (de eerste tabelrij heeft nummer 0).
Wanneer $huidige_pagina 1 is, wordt $offset 1 * 5 = 5 et cetera.

Let goed op het volgende:
In het script zelf worden de pagina's genummerd vanaf 0, omdat dit makkelijker is in verband met het maken van queries, en het rekenen met pagina's. In de voor gebruikers zichtbare navigatie zullen de pagina's genummerd zijn vanaf 1, omdat dit voor een gebruiker logischer oogt.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
En nu is het leuk geweest; ga je eerst eens verdiepen in de basics en niet in het diepe duiken met 'geleende' scripts; je moet dit probleem prima kunnen debuggen (zie ook Debuggen: Hoe doe ik dat?). Je hebt meer dan voldoende pointers in de juiste richting gehad en als je even wat verder kijkt dan je neus lang is, is dit probleem zo opgelost. Maar dan moet je wel weten waar je mee bezig bent. Deze manier van 'aan het handje houden' in dit topic is niet de bedoeling in PRG.

Om je dan toch nog/weer eens stuk op weg te helpen:
• Controleer of je uberhaupt de 'p=' en 'idnummer=' parameters binnen krijgt en gebruikt
• Controleer of je uberhaupt de 'p=' en 'idnummer=' parameters in de link zet voor een pagina
• Echo alle benodigde variabelen voordat je de SQL statement uitvoert
• Echo het SQL statement in plaats van dat je het uitvoert
• Als alles goed klopt kun je het SQL statement uitvoeren en kijken of je script dan (verder) werkt.

[ Voor 64% gewijzigd door RobIII op 01-04-2008 13:22 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
@ all

Bedankt voor de hulp ik ga me er weer verder in verdiepen :)

*-* Edit *-*
Ik wil jullie allemaal graag bedanken :) ik was ENORM dom 8)7 bezig ik had de manier van het opvragen verkeerd staan *hides in corner

Hartelijk dank voor de hulp :) _/-\o_ GoT _/-\o_

Dus hier kan een slotje op :)

[ Voor 63% gewijzigd door Verwijderd op 01-04-2008 14:42 ]

Pagina: 1