Toon posts:

[PHP] Bladeren door database gegevens

Pagina: 1
Acties:
  • 59 views sinds 30-01-2008

Verwijderd

Topicstarter
Ik ben bijna klaar met een php site waarin een gebruiker gegevens over projecten kan toevoegen aanpassen verwijderen en bekijken, nu alles werkt ben ik tegen een probleempje opgelopen.

Op het moment dat er heel veel prohjeckten in de database geplaatst worden, en hij de projectnamen op het scherm plaatst, verpest dit de layout van de pagina.

Daarom wil ik een soort van blader systeem maken, waarbij hij steeds 5 project namen laat zien en je naar de volgende/vorige 5 kan bladeren. Het probleem is, dat ik niet weet hoe ik blader knopjes moet maken als er spraken is van een variabele inhoud.

Dus als iemand mij op weg kan helpen, graag!

  • PrinsEdje80
  • Registratie: Oktober 2001
  • Laatst online: 01-01 15:26

PrinsEdje80

Holographic, not grated...

Probeer maar eens wat met een for-loopje om allemaal linkjes te maken a:
code:
1
1 2 3 4 5 ...

Maar dan aanklikbaar en dat bijv. 1 van 1 t/m 9 aangeeft en 2 van 10 t/m 19 etc..
Het is niet super moeilijk om dat te doen... Je moet dan wel wat variabelen doorgeven in de link, zoals bijv. &no=10 oid...

Used to be Down Under... Foto gallery


Verwijderd

Topicstarter
Ok. maar het probleem is, als je project 10 verwijderd op het moment dat je 12 projecten hebt, heeft het nieuwe projeckt ID 13 als je dan verwijstr naar ID 10 werkt het niet meer aangezien die niet meer bestaat, Of begrijp ik je verkeerd?

Verwijderd

Met het LIMIT statement in SQL kan je aangeven dat je bv de eerste 10 records wilt ophalen, en de keer daarna haal je gewoon de volgende 10 op.

  • PrinsEdje80
  • Registratie: Oktober 2001
  • Laatst online: 01-01 15:26

PrinsEdje80

Holographic, not grated...

Ik ben het geheel met Disreaction eens... Ik geef aan dat het dan gaat om id 1 t/m 9 maar ik bedoel gewoon 10 stuks per linkje, maar ach: mag graag moeilijker spreken dan noodzakelijk is (8>

Used to be Down Under... Foto gallery


  • Peetman
  • Registratie: Oktober 2001
  • Laatst online: 15:35

Peetman

Tjah....

Let wel op dat mysql wel limit gebruikt maar bijv MSSQL geen limit ondersteund

Verwijderd

- Eerst totaal aantal records ophalen.
- Dan kijken of dit er meer zijn dan 5, zoja een 'volgende' knopje maken.
- Als daar op gedrukt is, kijken of (totaal - 5) > 0, zo ja 'volgende' knopje maken, enz.

Dit geld ook voor de vorige knop. Stel je zit bij de records 5 tm 10 dan kijk je naar het eerste getal welke een 5 is en maak je dus een vorige knopje: vorige 5 records.

Ik hoop dat het duidelijk is, het belangrijkste is om te kijken naar de totale hoeveelheid records en hier mee te spelen.

Verwijderd

Topicstarter
Ok ik snap wat jullie bedoelen, maar ik kom er gewoon niet uit.Daarom zal ik ff het script posten, voor een eventueel conkreet voorbeeld.

Wat ik heb is:

$ph_main["pro_lopend"] .= "<table>";
$result = $db->db_query("SELECT id,project_naam FROM projects WHERE type='1'");
while (list($id, $project_naam) = mysql_fetch_row ($result))
{
$ph_main["pro_lopend"] .= "<TR><TD>".$id."</TD><TD><A HREF=\"index.php?op=showproject&id=".$id."\">".$project_naam."</a></TD></TR>\n";
}
$ph_main["pro_lopend"] .= "</TABLE>";

voor alle duidelijkheid: pro_lopend is een placeholder op de sjabloom pagina.

Wat ik nu heb is dit:
$result = $db->db_query("SELECT id,project_naam FROM projects WHERE type='1'");
$rows=mysql_num_row ($result);
$pagdisplay=$rows/5;

waarvan ik niet helemaal weet of het klopt...

Nu zou ik iets moeten hebben dat lijkt op

if($i <$rows){
Limit =$i ,$b+5}

En dat moet gelinkt worden aan de while en een link vormen..

Verwijderd

Met een modulus berekening kun je dit het netste doen. FF goed zeggen hoor want ik vind modulus ingewikkeld: als je per 5 records wilt tonen, moet je het totaal aantal records % 5 doen, waarbij '%' dus het modulus teken is. Wat je dan weet is dit: ik heb records/5 aantal pagina's aantal results, en de laatste pagina bevat records % 5 records.
Wbt. je probleem met het deleten van records; vervang de betreffende waarde in de array met iets dat aangeeft dat de waarde is verwijderd, en schoon dan later het record op (bij submit).

  • Norjee
  • Registratie: April 2000
  • Niet online
Zo uit mijn hoofd zou dit moeten kunnen werken

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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
$SETUP_maxPerPagina = 10;

$p = myQuery("
    SELECT 
        COUNT() AS aantal
        
    FROM 
        projects 
    
    #evt nog restricties en blah blah
    ");
    
$r = mysql_fetch_assoc($p);
$aantal = ceil($r["aantal"] / $SETUP_maxPerPagina);

$bovenGrens = $_GET["pagina"] * $SETUP_maxPerPagina;
$onderGrens = ($_GET["pagina"] + 1) * $SETUP_maxPerPagina;
 
if ($_GET["pagina"] != 0)
    {       
    echo "<a href=script.php?pagina=".($_GET["pagina"]-1).">Vorige</a><br>";        
    }

for ($i = 0 ; $i < $aantal ; $i++)
    {
    echo "<a href=script.php?pagina=$i>Pagina ".($i+1)."</a><br>";      
    }

if ($aantal != 1 && $_GET["pagina"] < $aantal - 1)
    {       
    echo "<a href=script.php?pagina=".($_GET["pagina"]+1).">Volgende</a><br>";      
    }

$p = myQuery("
    SELECT 
        #jou data
        
    FROM 
        projects 
    
    #evt nog restricties en blah blah
    
    LIMIT 
        $bovenGrens , $onderGrens
    ");
    
while ($r = mysql_fetch_assoc($p))
    {
    // doe iets met jou data    
        
    }

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

dit soort dingen zijn echt wel in diverse topics te vinden
zal wel ff searchen en dan gaat dit dicht :)

Doet iets met Cloud (MS/IBM)


  • XdeckX
  • Registratie: September 2002
  • Niet online
ff snel uit het hoofd... kan helaas niet even kijken hoe ik het ookweer gedaan heb...

totaal aantal records ophalen
delen door aantal records per pagina (in dit geval dus 5)
die moet volledig naar boven worden afgerond door middel van ceil
een variable voor welke pagina getoond moet worden noemen we even page.
dan als page niet bestaat (dus als ie de eeste pagina moet laten zien) dan is startrange (de waarde waar ie moet beginnen in de de database) gelijk aan 0.

ff wat code..
if(!$page)
{
$startrange = "0";
}
else
{
$startrange = $page;
}

$query = mysql_query("SELECT * FROM project WHERE type = 1 LIMIT $startrange, 5");

en dan moet je nog even een for loopje maken om het totaal aantal pagina's te laten zien.

for($f=0, $f<="totaal aantal pagina's", $f++)
{
print("<a href=\"project.php?page=$f\">$f</a> ");
}

zoiets...

als je dan projecten verwijderd maakt dat niet uit omdat ie niet afhankelijk is van je id maar van het totaal aantal projecten in je projectentable.

maar zoals ik al zei... ik doe dit allemaal even uit het hoofd. zie maar wat je ermee kan...

massol
XdeckX

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

kan het voorbeeld ff niet vinden
de oplossing mag duidelijk zijn en dit is ook nog wel zelf te verzinnen

Doet iets met Cloud (MS/IBM)

Pagina: 1

Dit topic is gesloten.