Deze website maakt gebruik van cookies. Waarom? Klik hier voor ons privacy- en cookiebeleid. Door op akkoord te klikken of door gebruik te blijven maken van deze website geeft u aan akkoord te zijn met het gebruik van cookies.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

[php & mysql] Gastenboek met vorige | nummering | volgen

None
13 antwoorden
  • Hey, ik heb een gastenboek gemaakt(nee, niet die van C!T :D ), en heb er een vorige | nummering | volgende in gebouwd. Die werkt niet helemaal. In het begin(in de index) krijg ik ze allemaal te zien en als ik op een nummer, vorige of volgende klik blijven ze ook allemaal staan.

    Er zit nog geen invoer of verwijder pagina bij, ik voer ze nu nog gewoon in met PHPMyAdmin omdat het nu alleen nog maar erom gaat dat het werkt. Dit is nu de code:
    [code:1:0a2c90bad0]
    <?php
    mysql_connect('localhost','username','pass');//maak verbinding
    mysql_select_db('db');//selecteer database

    $sql = "SELECT * FROM berichten";//maak sql query

    $resultaat = mysql_query($sql);//voer query uit

    $limiet = 10; // Stel max. aantal resultaten per pagina in
    $deze_pagina="index.php"; //defineer pagina-naam of gebruik $PHP_SELF

    $aantal = mysql_num_rows($resultaat); //tel aantal resultaten vd zoekopdracht

    //Begin vorige | nummering | volgende

    $paginas=intval($aantal/$limiet); // bereken aantal pagina's met resultaten
    if ($aantal%$limiet) //als aantal veelvoud is van de limiet, 1 pagina erbij op tellen
    {
    $paginas++;
    }

    if ($aantal !="0")
    {
    if (empty($_GET["offset"]))
    {
    $offset=0;
    }
    else
    {
    $offset = $_GET["offset"];
    }

    //begin while loop om gegevens te laten zien
    while($record = mysql_fetch_object($resultaat)){

    echo "<center>";//begin met centreren

    echo "<table border='1' bordercolor='green' cellpadding='1' cellspacing='1' width='80%'>";//begin tabel

    echo "<tr width='70%'><td width='10%'>Bericht ID: </td><td width='60%'>$record->bericht_id</td></tr>";//display bericht_id

    echo "<tr width='70%'><td width='10%'>Naam: </td><td width='60%'>$record->username</td></tr>";//display naam

    echo "<tr width='70%'><td width='10%'>Email: </td><td width='60%'><A HREF='MAILTO:$record->email'>$record->email</A></td></tr>";//display email met mailto

    echo "<tr width='70%'><td width='10%'>Website: </td><td width='60%'><A HREF='$record->url'>$record->url</A></td></tr>";//display website met url

    echo "<tr width='70%'><td width='10%'>Datum: </td><td width='60%'>$record->datum</td></tr>";//display datum

    echo "<tr width='70%'><td width='10%'>Bericht: </td><td width='60%' height='5%'>$record->bericht</td></tr>";//display bericht

    echo "</table>";//einde tabel

    echo "</center>";//einde centreren
    echo "<br>";

    } //einde while loop

    // Hieronder wordt Vorige | nummering | Volgende gecreëerd

    if ($aantal > $limiet)
    {
    if ($offset!=0) // indien niet eerste pagina, druk "Vorige" af
    {
    $vorige_offset=$offset-$limiet;
    print "<a href=\"$deze_pagina?offset=$vorige_offset\">Vorige</a> |
    ";
    }
    for ($i=1;$i<=$paginas;$i++) // de nummering van de pagina's wordt hier afgedrukt
    {
    $nieuwe_offset=$limiet*($i-1);
    if ($nieuwe_offset==$offset) // indien huidige pagina, dan vet afdrukken
    {
    print "<a href=\"$deze_pagina?offset=$nieuwe_offset\"><b>$i</b></a> |
    ";
    }
    else
    {
    print "<a href=\"$deze_pagina?offset=$nieuwe_offset\">$i</a> |
    ";
    }
    }
    if (!(round($offset/$limiet)==$paginas-1) && $paginas!=1)
    //volgende afdrukken (behalve indien laatste pagina of bij maar 1 pagina)
    {
    $nieuwe_offset=$offset+$limiet;
    print "<a href=\"$deze_pagina?offset=$nieuwe_offset\">Volgende</a>
    ";
    }
    }
    }
    ?>
    [/code:1:0a2c90bad0]

    Kan iemand me helpen?
  • Beetje rigoureus:
    "SELECT * FROM berichten"

    Probeer het eens met (bijvoorbeeld):
    "SELECT * FROM berichten LIMIT $pagnr*10, 10"

    LIMIT heeft twee argumenten, start en increment. Als je als start de increment met het paginanummer vermenigvuldigt, heb je steeds de juiste selectie en haal je niet meer op dan je nodig hebt.

    Om het totaal aantal te bepalen kun je een count opdracht doen.
    "SELECT count * FROM berichten"

    Alles even snel uit het hoofd, maar het principe klopt.
  • Zodra ik de LIMIT invoeg krijg ik deze error:

    Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in c:\phpdev\www\gastenboek\index.php on line 34

    lijn 34:[code:1:19957788f1]while($record = mysql_fetch_object($resultaat)){[/code:1:19957788f1]
  • Lijkt me een syntax probleem. Kijk eens of dit wel werkt:

    $sql = "SELECT * FROM berichten LIMIT ".($pagnr*10).",10"

    Je kunt de query ook even tussendoor naar scherm printen. Dan moet er zoiets uitkomen:

    SELECT * FROM berichten LIMIT 10,10
  • [edit]
    Ik heb wat zitten knutselen en heb nu een andere code. Er zitten een paar opties meer in. De links worden nu gemaakt maar er staan teveel links. Er staan 12 links (tot 120 querys) maar er staan maar 12 querys in de database.

    [code:1:53ee7d4355]
    <?php
    include "ipadres.php"; //berheerders ip adres
    $ip2 = $HTTP_SERVER_VARS["REMOTE_ADDR"]; // bezoekers ip adres
    ?>
    <html>
    <head>
    <link rel='stylesheet' type='text/css' href='gastenboek.css'><!–include css file–>
    </head>
    <body>
    <center>
    <table border='1' bordercolor="#743A3A"><br><!–begin form tabel–>
    <br>
    <form action="plaatsbericht.php" method="POST"><!–begin form–>
    <tr><td>*Naam: </td><td><input type="text" name="afzender"></td></tr>
    <tr><td>Email: </td><td><input type="text" name="email"></td></tr>
    <tr><td>Website: </td><td><input type="text" name="url" value="http://www."></td></tr>
    <tr><td>*Bericht: </td><td><textarea name="bericht" cols="50" rows="4"></textarea></td></tr>
    <tr><td><input type="submit" value="Plaats bericht!"></td>
    <td><center>De velden met een * zijn verplicht</center></td></tr>
    </form><!–einde form–>
    </table><!–einde form tabel–>
    <?php
    echo($ip2);
    ?><!–echo bezoekers ip–>
    </center>
    <hr>
    </body>
    </html>
    <center>
    <?php
    $db = mysql_connect("localhost", "username", "password");//maakt verbinding
    mysql_select_db("gastenboek");//selecteerd database

    $sql = mysql_query("SELECT * FROM berichten ORDER by datum DESC");//maakt sql query
    $number = ceil(mysql_num_rows($sql)/10);
    $start = (isset($_GET['start']))? $_GET['start'] : 10;
    $pages = mysql_num_rows($sql);

    $sql = mysql_query("SELECT * FROM berichten ORDER by datum DESC LIMIT $start, 10");//maakt sql query

    while ($record = mysql_fetch_assoc($sql)){//while lus die de gegevens laat zien

    echo("<table border='1' bordercolor='#743A3A'>");
    echo("<tr><td width='100'>Afzender: </td><td width='300'>{$record['username']}</td></tr>");
    if (strlen($record['email']) > 0)
    {
    echo("<tr><td width='100'>Email: </td><td width='300'><A HREF='mailto:{$record['email']}'>{$record['email']}</A></td></tr>");
    }
    else {
    echo("<tr><td width='100'>Email: </td><td width='300'>Geen e-mail opgegeven</td></tr>");
    }
    if (strlen($record['url']) > 0)
    {
    echo("<tr><td width='100'>Website: </td><td width='300'><A HREF='{$record['url']}'>{$record['url']}</A></td></tr>");
    }
    else{
    echo("<tr><td width='100'>Website: </td><td width='300'>Geen website opgegeven</td></tr>");
    }
    echo ("<tr><td width='100'>Berichtdatum: </td><td>{$record['datum']}</td></tr>");
    echo ("<tr><td width='100'>Bericht: </td><td width='300' height='50'>{$record['bericht']}</td></tr>");
    echo("<br>");
    if ($ip == $ip2){ //kijken of bezoekers ip gelijk is aan beheerders ip, zoja, echo verwijderen
    echo("<tr><td><A HREF='bericht_verwijderen.php?bericht_id={$record['bericht_id']}'>Verwijderen</A></td></tr></table><hr>");
    }
    elseif ($ip3 == $ip2){
    echo("<tr><td><A HREF='bericht_verwijderen.php?bericht_id={$record['bericht_id']}'>Verwijderen</A></td></tr></table><hr>");
    }
    else
    {
    echo("</table><hr>");
    }
    }
    echo("<center>Copyright by Webmasters <A HREF='http://www.computeren.tk'>.:{Computeren.tk}:.</A> 2003-2004</center>");
    ?>
    <?
    if($pages > 0){
    for($i = 1; $i <= $pages; $i++){
    echo " <a href=\"gastenboek.php?start=".(($i-1) * 10)."\">|".$i."|</a> ";
    }
    }
    ?>
    </center>
    [/code:1:53ee7d4355]

    Ow ja, hij echoot de querys wel goed, maar het gaat nu om de nummering. Als die werkt werkt het gastenboek:D
  • Daarvoor was die COUNT opdracht.
  • Owkeej, maar hoe moet ik die dan in dit script gebruiken? In dat eerste lukte dat wel, maar nu weet ik het niet. :oops:
  • Met count krijg je het totaal aantal. Dat deel je door de paginagrootte, en je hebt dan het aantal pagina's. Met een loopje produceer je dan zoveel links als er pagina's zijn. Of je maakt volgende/vorige links, adhv. het huidige paginanummer.
  • [edit]Na nog meer kloten, is hij er weer ingekomen en werkt hij :D Alleen het laatste bericht wordt niet weergeven(bericht met id = 1)

    [code:1:2e06b5cfc1]<?php
    mysql_connect("localhost", "username", "password");//maakt verbinding
    mysql_select_db("gastenboek");//selecteerd database
    $sql = mysql_query("SELECT * FROM berichten ORDER by bericht_id DESC");//maakt sql query
    $berichten = mysql_num_rows($sql);
    include "ipadres.php"; //berheerders ip adres
    $ip2 = $HTTP_SERVER_VARS["REMOTE_ADDR"]; // bezoekers ip adres
    ?>
    <html>
    <head>
    <link rel='stylesheet' type='text/css' href='gastenboek.css'><!–include css file–>
    </head>
    <body>
    <center>
    <table border='1' bordercolor="#743A3A"><br><!–begin form tabel–>
    <br>
    <form action="plaatsbericht.php" method="POST"><!–begin form–>
    <tr><td>*Naam: </td><td><input type="text" name="afzender" value="<?PHP echo $afzender; ?>"></td></tr>
    <tr><td>Email: </td><td><input type="text" name="email" value="<?PHP echo $email; ?>"></td></tr>
    <tr><td>Website: </td><td><input type="text" name="url" value="<?PHP echo $url; ?>"></td></tr>
    <tr><td>*Bericht: </td><td><textarea name="bericht" cols="50" rows="4" value="<?PHP echo $bericht; ?>"></textarea></td></tr>
    <tr><td><input type="submit" value="Plaats bericht!"></td>
    <td><center>De velden met een * zijn verplicht</center></td></tr>
    </form><!–einde form–>
    </table><!–einde form tabel–>
    <?php
    echo($ip2);
    echo "<br>";
    ?><!–echo bezoekers ip–>
    <?php echo "Er zijn \"$berichten\" berichten"; ?>
    </center>
    <hr>
    </body>
    </html>
    <center>
    <center>
    <?php
    $number = round(mysql_num_rows($sql)/10);
    $start = (isset($_GET['start']))? $_GET['start'] : 10;

    $sql = "SELECT * FROM berichten ORDER by bericht_id DESC LIMIT $start, 10";//maakt sql query

    $resultaat = mysql_query($sql);

    while ($record = mysql_fetch_object($resultaat)){//while lus die de gegevens laat zien

    echo("<table border='1' bordercolor='#743A3A'>");
    echo("<tr><td width='100'>Bericht id: </td><td width='300'>$record->bericht_id</td></tr>");
    echo("<tr><td width='100'>Afzender: </td><td width='300'>$record->afzender</td></tr>");
    if (strlen($record['email']) > 0)
    {
    echo("<tr><td width='100'>Email: </td><td width='300'><A HREF='mailto:{$record['email']}'>$record->email</A></td></tr>");
    }
    else {
    echo("<tr><td width='100'>Email: </td><td width='300'>Geen e-mail opgegeven</td></tr>");
    }
    if (strlen($record->url) > 0)
    {
    echo("<tr><td width='100'>Website: </td><td width='300'><A HREF='{$record['url']}'>$record->url</A></td></tr>");
    }
    else{
    echo("<tr><td width='100'>Website: </td><td width='300'>Geen website opgegeven</td></tr>");
    }
    echo ("<tr><td width='100'>Bericht: </td><td width='300' height='50'>$record->bericht</td></tr>");
    echo ("<tr><td width='100'>Berichtdatum: </td><td>$record->berichtdatum</td></tr>");
    echo("<br>");
    if ($ip == $ip2){ //kijken of bezoekers ip gelijk is aan beheerders ip, zoja, echo verwijderen
    echo("<tr><td><A HREF='bericht_verwijderen.php?bericht_id=$record->bericht_id'>Verwijderen</A></td></tr></table><hr>");
    }
    elseif ($ip3 == $ip2){
    echo("<tr><td><A HREF='bericht_verwijderen.php?bericht_id=$record->bericht_id'>Verwijderen</A></td></tr></table><hr>");
    }
    else
    {
    echo("</table><hr>");
    }
    }
    echo("<center>Copyright by Webmasters <A HREF='http://www.computeren.tk'>.:{Computeren.tk}:.</A> 2003-2004</center>");
    ?>
    <?

    if($number != 0){
    echo " <a href=\"gastenboek.php?start=".(($i > 1) / 10)."\">| vorige 10 |</A> ";//creëer vorige link

    for($i = 1; $i <= $number; $i++){
    echo " <a href=\"gastenboek.php?start=".(($i-1) * 10)."\">|".$i."|</a> ";
    }
    echo " <a href=\"gastenboek.php?start=".(($i > 1) * 10)."\">| volgende 10 | </A> ";//creëer volgende link

    }
    ?>
    </center>
    [/code:1:2e06b5cfc1]
  • [quote:d5144a1290="Rens_uit_His"][edit]Na nog meer kloten, is hij er weer ingekomen en werkt hij :D Alleen het laatste bericht wordt niet weergeven(bericht met id = 1)[/quote:d5144a1290]Zonder je code echt helemaal bekeken te hebben…
    [b:d5144a1290]>[/b:d5144a1290] ergens vervangen door [b:d5144a1290]>=[/b:d5144a1290] ?
    (Comparison Operators)
  • Thnx, nu werkt het. Alleen is de vorige link de eerste link geworden. De volgende link is laatste link geworden. Maar jah, dat is niet erg.

    [edit]
    Ik weet al iets hoe ik een volgende link kan maken, maar daarvoor heb ik de url van de gebruiker nodig. Hoe kan ik die opvragen? bijvoorbeeld:
    De gebruiker zit op: http://localhost/computeren.tk/gastenboek.php?start=10. Hoe kan ik die dan opvragen? Want als ik die heb hoef ik dit maar te doen:
    [code:1:ebd496066d]
    <?php
    $url = hier de weburl;
    $nieuwe_url=$url+10;
    print "<a href=\"gastenboek.php?start=$nieuwe_url\">Volgende</a>
    ";
    }
    ?>
    [/code:1:ebd496066d]
    En dan werkt het :D En dan kunnen we daar trouwens ook de vorige link mee maken :D .
  • start kun je via $_GET['start'] uitlezen.
    Levert in dit geval dus 10 op.

    Komplete url: $url = $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
    http://forum.computertotaal.nl/phpBB2/viewtopic.php?t=107707
  • Thnx voor de hulp. Nu werkt m'n gastenboekje perfect :D. De vorige, volgende, eerste, laatste en nummers werken allemaal :D.

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.