Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Sivutus

Sivun loppuun

Suominen90 [11.12.2005 18:09:32]

#

Olen käyttänyt sivujeni käyttäjä listassa sivutuksessa tätä https://www.ohjelmointiputka.net/koodivinkit/24487-php-sivutus koodia, mutta kun sivuillani on nyt aika paljon käyttäjiä niin alkaa olemaan sivuja aika paljon.
Joten miten saisin sivutuksen tähän tyyliin: 1 | 2 | 3 | 4 ... 8 | 9

ajv [11.12.2005 18:21:50]

#

Onko käytössä oikea tietokanta vai tekstitiedostot? Listaus tyyliin

a | b | c | ... | ö

voisi olla parempi. Eli listataan käyttäjien ensimmäisen kirjaimen perusteella. Tietokannalla tuon toteuttaminen on helppoa, tekstitiedostoilla joutunee kikkailemaan enemmän.

Suominen90 [11.12.2005 18:27:48]

#

MYSQL tietokanta on käytössä. Voisihan sen noinki tehdä.

Mutta silti pitäis saada toi sivutus juttu kuntoon.

Olga [11.12.2005 22:33:44]

#

Ensin haet yhdellä kyselyllä kaikki nimien alkukirjaimet ja tulostat linkit sen mukaan. Sitten kun joku alkukirjain on valittu, haet kannasta käyttäjät sen alkukirjaimen mukaan.

Suominen90 [13.12.2005 15:04:49]

#

Ei mulla mitään ongelmia ton kirjain jutun kanssa ole, mutta ton sivutuksen kanssa on.

ajv [13.12.2005 22:21:50]

#

No laita tänne mitä olet saanut aikaan, niin katellaan. Mulla on tohon yksi valmis purkka, mutta en kyllä sitä suosiolla pistä esimerkiksi :)

Suominen90 [14.12.2005 18:40:34]

#

Käytän siis Antin sivutus koodia

<?php
$vps = 40;

// luetaan osoitteen mukana tullut sivunumero
if (isset($_GET['sivu'])) {
    $sivu = $_GET['sivu'];
}
$sivu = intval($sivu);


$kysely = "SELECT * FROM galleria_users WHERE activation = '1' ORDER BY id LIMIT ".($sivu * $vps).", {$vps}";
//suoritetaan kysely
$haku = mysql_query($kysely, $yhteys);


$maara = mysql_result(mysql_query("SELECT COUNT(*) FROM galleria_users WHERE activation = '1'", $yhteys), 0);

// luodaan sivunumerolista, jos sivuja on useampia
if ($maara > $vps) {
    echo "<p><center>Sivu: ";
    for ($i = 0; $i < $maara / $vps; $i++) {
        // tulostetaan pystyviivat sivunumeroiden väliin
        if ($i <> 0) {
            echo " | ";
        }
        // jos tämä sivu näytetään, tulostetaan sivun numero lihavoituna
        if ($sivu == $i) {
            echo "<b>".($i + 1)."</b>";
        // muussa tapauksessa luodaan linkki toiselle sivulle
        } else {
            echo "<a href=\"{$_SERVER['PHP_SELF']}?sivu={$i}\">".($i + 1)."</a>";
        }
    }
    echo "</center></p>";
}
?>

Tossa on toi sivunumero lista. En ole vielä tehnyt aakkosellistä listausta käyttäjiin.

ajv [14.12.2005 22:32:18]

#

No tässä tämä "purkkani":

<?php
/*
*  function sivuta(
*     $cp niinkuin current page,
*     $lp niinkuin last page
*     $url niinkuin sivutuslinkin alkuosa, jonka perään lisätään vain sivunumero
*   )
*/
function sivuta($cp, $lp, $url='?p='){

   $sivut = array();

   //alusta muutama sivu
   for($i=1; $i<=5; $i++){
      $sivut[$i] = true;
   }
    //valitun sivun ympäriltä sopivasti
   for($i=($cp-2); $i<=($cp+2); $i++){
      $sivut[$i] = true;
   }
    //lopusta muutama sivu
   for($i=$lp; $i>=($lp-2); $i--){
      $sivut[$i] = true;
   }

   $str = NULL;
   //käydään läpi 1...viimeinen sivu
   for($i=1; $i<=$lp; $i++){
      //jos sivu on asetettu, niin pistetään linkki merkkijonoon talteen
      if(isset($sivut[$i])){
             $str .= $i == $cp ? ' <b>'.$i.'</b> ' : ' <a href="'.$url.$i.'">'.$i.'</a> ';
         //$k-muuttuja kertoo meille, että merkkijonon viimeisin lisäys on sivutus-linkki
          $k = true;
      }else{
         $str .= $k === true ? '...' : '';
         //$k-muuttuja "pois päältä" => ei lisäillä pisteitä kuin maksimissaa kerran
             $k = false;
      }//if-else
   }//for
   return $str;
}//function
?>

Eli soveltaisin tuohon systeemiisi sitä seuraavasti:

<?php
$vps = 40;

// luetaan osoitteen mukana tullut sivunumero
if(isset($_GET['sivu'])) {
    $sivu = intval($_GET['sivu']);
}else{
	$sivu = 1;
}

$maara = mysql_result(mysql_query("SELECT COUNT(*) FROM galleria_users WHERE activation = '1'", $yhteys), 0);

//selvyyden vuoksi nimetään vielä nuo muuttujat samanlailla kuin funktiossakin
$cp = $sivu;
//lasketaan viimeinen sivu
$lp = ceil($maara/$vps);
//ja selattavan sivun osoite
$url = $_SERVER['PHP_SELF'].'?sivu=';

//tarkistus, että osoiteriviltä tullut luku on välillä 1...viimeinen sivu
if($cp < 1 || $cp > $lp) $cp=1;

//sitten vain sivutellaan. Funktio palauttaa sivutuksen tarkoituksella merkkijonona...
$sivutus = sivuta($cp, $lp, $url);

//.. jotta saadaan yhdellä funktiokutsulla sivutus sivun yläreunaan..
echo $sivutus;

	//sivun sisältö
	$kysely = "SELECT * FROM galleria_users WHERE activation = '1' ORDER BY id LIMIT ".(($cp-1) * $vps).", {$vps}";
	//suoritetaan kysely
	$haku = mysql_query($kysely, $yhteys);
	for($i=0; $i<100; $i++) echo rand(0,1) ? 'foo' : 'bar';

//.. ja sivun alareunaan
echo $sivutus;
?>

Ei kyllä todennäköisesti heittämällä toimi, kun en yhtään testannu koodia ja sivutus-funktiotakaan en testannut pienten siistimisten jälkeen...

Edit: pakkohan tuo nyt oli vielä testata
http://cgi.evtek.fi/~k0101030/sivutusesimerkki.php

Suominen90 [15.12.2005 16:09:56]

#

Kiitos sain tuon avulla toimiin.

EDIT. Ei lähde oikein toimiin haun kanssa.
Eli ei näytä kaikkia käyttäjiä. Määrä laskuri sanoo oikean lukeman muttei näy sen verran käyttäjiä.

Käyttäjä listalle jouduin muuttaa kohdan $lp = ceil($maara/$vps); täksi $lp = ceil($maara/$vps) -1;

Tässä haun koko koodi:

<?php
include "functions.php";
echo "<div class=\"iso\">Tarkennettu haku</div><br /><br />";
if(!$_GET["search"] == "true"){
echo "<table>";
echo "<form action=\"\" method=\"GET\">";
echo "<tr><td>Käyttäjänimi:</td><td><input type=\"text\" name=\"user\" size=\"22\"></tr>";
echo "<tr><td>Oikea nimi:</td><td><input type=\"text\" name=\"realname\" size=\"22\"></tr>";
echo "<tr><td>Paikkakunta:</td><td><input type=\"text\" name=\"city\" size=\"22\"></tr>";
echo "<tr><td>Sukupuoli:</td>";
echo "<td><select name='sex'>";
echo "<option value=''></option>";
echo "<option value='1'>{$lg[176]}</option>";
echo "<option value='2'>{$lg[177]}</option>";
echo "</select></td></tr>";
echo "<input type=\"hidden\" name=\"search\" value=\"true\">";

echo "<tr><td>Etsi</td><td><input type=\"submit\" value=\"Etsi\"></td></tr>";
echo "</form>";
echo "</table>";
} else {


$vps = 40;

// luetaan osoitteen mukana tullut sivunumero
if(isset($_GET['page'])) {
    $sivu = intval($_GET['page']);
}else{
    $sivu = 1;
}



$maara = mysql_result(mysql_query("SELECT COUNT(*) FROM galleria_users WHERE tunnus LIKE '{$_GET["user"]}%' AND oikeanimi LIKE '{$_GET["realname"]}%' AND kaupunki LIKE '{$_GET["city"]}%' AND sukupuoli LIKE '{$_GET["sex"]}%' AND activation = '1'", $yhteys), 0);

//selvyyden vuoksi nimetään vielä nuo muuttujat samanlailla kuin funktiossakin
$cp = $sivu;
//lasketaan viimeinen sivu
$lp = ceil($maara/$vps);
//ja selattavan sivun osoite
$url = "search.php?user=".$_GET["user"]."&realname=".$_GET["realname"]."&city=".$_GET["city"]."&sex=".$_GET["sex"]."&search=true&page=";

//tarkistus, että osoiteriviltä tullut luku on välillä 1...viimeinen sivu
if($cp < 1 || $cp > $lp) $cp=1;

//sitten vain sivutellaan. Funktio palauttaa sivutuksen tarkoituksella merkkijonona...
$sivutus = sivuta($cp, $lp, $url);

echo "<center>Sivut: ".$sivutus."</center><br /><br />";

echo "<table align=\"center\">";


$kysely = "SELECT * FROM galleria_users WHERE tunnus LIKE '{$_GET["user"]}%' AND oikeanimi LIKE '{$_GET["realname"]}%' AND kaupunki LIKE '{$_GET["city"]}%' AND sukupuoli LIKE '{$_GET["sex"]}%' AND activation = '1' LIMIT ".(($cp-1) * $vps).", {$vps}";
//suoritetaan kysely
$haku = mysql_query($kysely, $yhteys) or die("Virhe kyselyssä!");

for ($i = 0; $i < $vps; $i++) {
    // varmistetaan, että viimeisellä sivulle ei tule ylimääräistä
    if ($i + $sivu-1 * $vps < $maara) {

   $id = mysql_result($haku, $i, "id");
   $tunnus = mysql_result($haku, $i, "tunnus");


   $q = "SELECT kuva FROM galleria_oletukset WHERE tunnus = '".$tunnus."'";
   $hakus = mysql_query($q,$yhteys);
   if($hakus && mysql_num_rows($hakus) == 1){

      $oletus = mysql_fetch_assoc($hakus);
}

   $kuva = explode(".", $oletus['kuva']);

if($i%5==0){
echo "</tr><tr>";
}

if(!mysql_num_rows($hakus) == 0){
   echo "<td class=\"kuvkom_tausta\" width=\"140\" height=\"120\"><center><a href=\"user.php?user=".$tunnus."\" class=\"pariton\"><img border=\"0\" src=\"./user_pics/THUMB".$kuva[0].".jpg\"><br/>".$tunnus."</center></a></td>";
    }
    else
    {
    echo "<td class=\"kuvkom_tausta\" width=\"140\" height=\"120\"><center><a href=\"user.php?user=".$tunnus."\" class=\"pariton\">".$tunnus."</a></center></td>";
   }


}
}
echo "</table>";
$maara = mysql_result(mysql_query("SELECT COUNT(*) FROM galleria_users WHERE tunnus LIKE '{$_GET["user"]}%' AND oikeanimi LIKE '{$_GET["realname"]}%' AND kaupunki LIKE '{$_GET["city"]}%' AND sukupuoli LIKE '{$_GET["sex"]}%' AND activation = '1'", $yhteys), 0);
echo "<center>Löytyi ".$maara."</center>";

echo "<br /><br /><center>Sivut: ".$sivutus."</center>";


}


?>

Suominen90 [15.12.2005 18:53:34]

#

Sain toimii.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta