Heips taas vaihteeksi.
Ryhdyin pitkästä aikaa tekemääni vieraskirjaa päivittelemään, eli tarkoitus on jaotella viestit 10/sivulle ja linkit 10 edellistä | 10 seuraavaa.
Tuo jaottelu onnistuu ja vieraskirja toimii muuten hyvin, mutta 10 edellistä linkki ei tuo toivottua tulosta.
Viittaa kuitenkin oikein??? ainankin pitäisi niin tehdä.
Jos joku löytyää tuosta jonkin mokan, niin viitsisikö kertoa. Itse olen tuota tutkinut ja hutkinut jo useita tunteja ja en saa siitä nyt mitään irti.
Siis mitään erroreita ei tule. Linkki vaan yksinkertaisesti ei tulosta aikaisempia viestejä, vaan samat viestit uudestaan.
<?php @mysql_connect($db_host, $db_user, $db_password) or die("error connection"); mysql_select_db($db_name, $connection); $result = mysql_query("SELECT * FROM guestbook"); $viestit = mysql_num_rows($result); mysql_close(); if (!isset($s) || $s <= 0) $s = 1; $loppu = $s*10; $alku = $loppu-10; if ($alku <= 0 || $alku >= $viestit) $alku = 0; if ($loppu >= $viestit) $loppu = $viestit; $eka = $viestit-$loppu; $vika = $viestit-$alku; if ($eka <= 0) $eka = 0; if ($vika >= $viestit) $vika = $viestit; ?> <CENTER> <?php if ($loppu >= $viestit) { echo "Edelliset 10 viestiä"; }else{ ?> <A href="?s=<?php echo $s+1; ?>">Edelliset 10 viestiä.</A> <?php } echo " "; if ($alku <= 0) { echo "Seuraavat 10 viestiä"; }else{ ?> <A href="?s=<?php echo $s-1; ?>">Seuraavat 10 viestiä.</A> <?php } echo "<BR>Viestit <B>".$eka." - ".$vika."</B> Yhteensä <B>".$viestit."</B> viestiä.</CENTER><BR>"; $query = "SELECT * FROM guestbook ORDER BY autoID DESC LIMIT $alku, $loppu"; $result = mysql_query($query, $connection); for ($i = 0; $i < mysql_num_rows($result); $i++) { $name = mysql_result($result, $i, "name"); $email = mysql_result($result, $i, "email"); $email_len = strlen($email); $comment = mysql_result($result, $i, "comment"); $comment = nl2br($comment); $date = mysql_result($result, $i, "date_auto"); $show_date = date("H:i:s m/d/Y", $date); echo ' <table border ="1" width="600" cellspacing ="0" cellpading="0" bordercolor="#666666"> <tr> <td width="100" valign="top" bgcolor="#D8E0EB"><font face="Arial, Helvetica, sans-serif" size="2"><b>Kirjoitettu:</b></font></td> <td width="500" valign="top" bgcolor="#E0E0E0"><font face="Arial, Helvetica, sans-serif" size="2"> '.$show_date.' </font></td> </font> </tr> <tr> <td width ="100" bgcolor="#D8E0EB"><font face="Arial, Helvetica, sans-serif" size="2"><b>Nimi:</b></font></td> <td width="200" valign="top" bgcolor="#E0E0E0"> <font size="2">'; if ($email_len > 0) { echo '<font face="Arial, Helvetica, sans-serif" size="2"><a href="mailto:'.$email.'">'.$name.'</font></a>'; } else { echo $name; } echo ' </font> </td> </tr> <tr> <td width="100" valign="top" bgcolor="#D8E0EB"><font face="Arial, Helvetica, sans-serif" size="2"><b>Viesti:</b></font></td> <td width="500" valign="top" bgcolor="#EEEEEE"><font face="Arial, Helvetica, sans-serif" size="2"> '.$comment.' </font></td> </tr> </table><br> '; } ?>
Kuka tuollaista jaksaa tutkia... Ei edes kommentteja....
Jos haluat näyttää seuraavat ja edelliset 10 viestiä olisi sql lause seuraava: SELECT * FROM taulu LIMIT alku, kuin_monta_ettenpäin
Esim. SELECT * FROM taulu LIMIT 10, 10
tarkoittaa, että 10. viestin jälkeen valitaan kymmenen seuraavaa riviä
SELECT * FROM taulu LIMIT 50, 10
Valitsee 10 riviä 50. rivistä eteenpäin
lainaus:
Jos haluat näyttää seuraavat ja edelliset 10 viestiä olisi sql lause seuraava: SELECT * FROM taulu LIMIT alku, kuin_monta_ettenpäin
Esim. SELECT * FROM taulu LIMIT 10, 10
tarkoittaa, että 10. viestin jälkeen valitaan kymmenen seuraavaa riviäSELECT * FROM taulu LIMIT 50, 10
Valitsee 10 riviä 50. rivistä eteenpäin
Tuossahan olen koittanut niin tehdä:
$query = "SELECT * FROM guestbook ORDER BY autoID DESC LIMIT $alku, $loppu";
Ja mitä tulee Tulilinnun viestiin kommentointien puuttumisesta:
Tuo on vielä työnalla ja ainankin itselläni on tapana kommentoida tekemäni scriptit vasta jälkeenpäin "valmiina" varsinkin jos ne ei kasva vielä kovinkaan suuriksi.
Jos on suurempi projekti kyseessä, niin kyllä silloin kommentoin heti, mutta tuo on vielä niin pieni, että mielestäni se ei kummoisia kommentointeja tarvitse, jos lainkaan.
Jaahas. keskustelufoorumi kadottaa tuon lopun tuosta.
Eli $ jälkeen on vielä loppu";
Mielestäni tämä on aivan väärin:
$loppu = $s*10;
$alku = $loppu-10;
Sen pitäisi pikemminkin olla NÄIN:
$alku = ($s * 10) - 10;
SELECT * FROM taulu LIMIT $alku, 10
lainaus:
Mielestäni tämä on aivan väärin:
$loppu = $s*10;
$alku = $loppu-10;Sen pitäisi pikemminkin olla NÄIN:
$alku = ($s * 10) - 10;
SELECT * FROM taulu LIMIT $alku, 10
Ei auttanut. linkki edelleen tuottaa saman tuloksen.
Mikäs siinä sitten on vikana? Siis miten se linkki bugaa?
Koitan tutkia lisää koodia sillä aikaa kun saan vastauksen...
Bugaa siten, että allaolevana tulee sivulle noi linkit:
Edelliset 10 viestiä. Seuraavat 10 viestiä
Viestit 17 - 27 Yhteensä 27 viestiä.
Tuo edelliset 10 viestiä on linkkinä, joka osoittaa:
http://localhost/guestbook.php?s=2
Eli kun sitä klikkaa, pitäisi saada näkyviin 10 aikaisempaa viestiä, eli 6-16
Mutta näin ei käy, vaan tuo sama 17-27 viestit tulee näkyviin. Siis samat kuin pelkällä guestbook.php tiedostollakin.
<A href="?s=<?php echo $s+1; ?>">Edelliset 10 viestiä.</A>
<A href="?s=<?php echo $s-1; ?>">Seuraavat 10 viestiä.</A>
On tainnut pojalla mennä sekaisin Seuraavat ja Edelliset? ;)
<A href="?s=<?php echo $s-1; ?>">Edelliset 10 viestiä.</A>
<A href="?s=<?php echo $s+1; ?>">Seuraavat 10 viestiä.</A>
Piti vähän aikaa lukea viestiäsi, jotta hokasin mitä muutoksia tuossa on, mutta ikävä tuottaa pettymys, että tuokaan ei auttanut ongelmaan.
Jotta selviäisi miten se nyt toimii, niin tuolta se löytyy:
http://80.222.215.137/guestbook.php
register_globals PHP:n conffifilusta on vai off? Jos off (oletus uusimmissa), hae se "s" $_GET:istä.
ööö.
Kokeilin tuota register_globalssin muuttamista on asentoon.
Meneekö se suoraan päälle apachen restartilla? siis kun on tuon muutoksen tehnyt php:n ini tiedostoon ja tallentanut sen.
Tuota koitin, mutta sekään ei auttanut.
Olisiko antaa esimerkkiä, kuinka tuota $_GET käytettäisiin tuossa? En ole nimittäin mikään guru PHP:ssä, vaan vasta opettelemassa.
Ihan vaan
$_GET['muuttuja'];
Ja jos käyttää post:ia niin sitten
$_POST['muuttuja'];
Jos on tottunut käyttämään globaaleja niin yksi mahdollisuus on
$muuttuja = $_GET['muuttuja']; echo "Muuttuja on ". $muuttuja;
Edit: jotakin hämminkiä kooditagissa. Ei oikeen toimi vieläkään kunnolla.
Aihe on jo aika vanha, joten et voi enää vastata siihen.