Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: kuvagalleria

Sivun loppuun

manninen [20.10.2010 23:18:14]

#

Hei!
Teen php:n ja sql:n avustuksella kuvagalleriaa. käyttäjä voi ladata sekä poistaa kuvan galleriasta. lisätessä kuvaa menee kuvan kansion linkki tietokantaan. (kuvalla auto icrement arvo). poistaessa kuva, kuvan linkki tietenkin poistetaan ja numeroarvo (ai) häviää välistä. miten siis saan toteutettua järkevän eteen ja taaksepäin toiminnon galleriaan. Voinko pakottaa kantaan, että hävinnyt numeroarvo korvataan toisella samalla arvolla (jos voin niin miten) vai millä tavalla tämä kannattaisi toteuttaa. huomenna voin pastata yritykseni tänne, mutta nyt netti ei pelaa kuin puhelimessa :-)

valmiita ratkaisuja löytyy, eikä uutta moottoria kannattaisi rakentaa sanoo joku, mutta miten oppii edes vanhan korjaamaan jos ei uutta yritä rakentaa :)

Antti Laaksonen [20.10.2010 23:22:23]

#

Voit selvittää seuraavan kuvan id-numeron etsimällä pienimmän käytössä olevan id-numeron, joka on nykyistä id-numeroa suurempi.

manninen [21.10.2010 06:53:30]

#

Kyllä. Näin pääsen liikkumaan eteenpäin Seuraava-linkkiä käyttämällä, mutta entäs taaksepäin? Jos etsin samalla logiikalla edellistä pienempää löytyy aina pienin arvo.

manninen [21.10.2010 06:56:58]

#

<?php require_once("hallinta/yhteys.php"); ?>
<?php require_once("yleiset.php"); ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=windows-1250">
  <meta name="generator" content="PSPad editor, www.pspad.com">
  <title><?php Title(); ?></title>
  <link rel="stylesheet" href="runko.css" type="text/css">
  </head>
   <?php TaustaKuva(); ?>

    <center>
    <table>
    <?php Otsikko(); ?>
    <?php LinkkiRivi(); ?>

    <tr>
      <td colspan="3" style="height:100%; text-align:center;">
        <?php
        SivunNimi(' Kuvagalleria ');

        function KuvienMaxMaara(){
            $k = "SELECT jnro FROM kuvagalleria";
            if(!($t = mysql_query($k))){
              return;
            }

            return $KuvienMaxMaara = mysql_num_rows($t);
          }
        ?>

        <?php
        // Haetaan tietokannasta esillä olevan kuvan järjestysnumerosta seuraavaksi pienempi järjestysnumero.
        function SeuraavanKuvannumero(){

          if(empty($_REQUEST['kuvanarvo'])){
            $seuraava = 0;
          }
          else{
            $seuraava = intval($_REQUEST['kuvanarvo']);
          }

          $k = "SELECT MIN(jnro) as arvo FROM kuvagalleria WHERE jnro > $seuraava";
          if(!($t = mysql_query($k))){
            return;
          }

          $r = mysql_fetch_assoc($t);

          $SeuraavaksiPienin = intval($r['arvo']);

          return $SeuraavaksiPienin;
        }


        ?>
        <?php function HaetaanKuvatGalleriaan(){

            // Seuraavan kuvan numero
            $seuraavanKuvanNumero = SeuraavanKuvannumero();
            // Edellisen kuvan numero
            $edellisenKuvanNumero = SeuraavanKuvannumeroPienempi();

            $osoiterivinArvo = intval($_REQUEST['kuvanarvo']);

            $kuva = empty($osoiterivinArvo) ? 1 : $seuraavanKuvanNumero;

            $k = "SELECT jnro, kuva FROM kuvagalleria WHERE jnro >= $kuva LIMIT 1";
            if(!($t = mysql_query($k))){
              return;
            }

            while($r = mysql_fetch_assoc($t)){

              $kuvanosoite = htmlspecialchars($r['kuva']);
              $kuvannumero = intval($r['jnro']);

              echo '<img width="260px" height="195px;" src="hallinta/'.$kuvanosoite.'">&nbsp;&nbsp;';
            }


            echo '<br />';

            $tarkistus = KuvienMaxMaara();

            if(empty($osoiterivinArvo)){
              $eteenpain = 1;
            }
            else{
              $eteenpain = $seuraavanKuvanNumero;
            }

            if(empty($osoiterivinArvo)){
              $taaksepain = 1;
            }
            else{
              $taaksepain = $edellisenKuvanNumero;
            }



            if($osoiterivinArvo <= 1){
              echo '<a style="color:blue !important;" href="galleria.php?kuvanarvo='.$taaksepain.'">Edellinen</a>';
            }
            else{
              echo '<a style="color:blue !important;" href="galleria.php?kuvanarvo='.$taaksepain.'">Edellinen</a>';
            }

            echo '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';

            if($tarkistus < $osoiterivinArvo)
            {
              echo '<a style="color:blue !important;" href="galleria.php?kuvanarvo=1">Seuraava</a>';
            }
            else
            {
              echo '<a style="color:blue !important;" href="galleria.php?kuvanarvo='.$eteenpain.'">Seuraava</a>';
            }
        }
        ?>
        <?php HaetaanKuvatGalleriaan();  ?>
        <hr>
      </td>
    </tr>

    <tr>
      <td style="height:1%;"><img src="vkulma.gif"></td>
      <td style="width:99%;">&nbsp;</td>
      <td style="height:1%;"><img src="okulma.gif"></td>
    </tr>

    <tr><td style="text-align:center; background:#6699FF;" colspan="3">nbsp;</td></tr>
    </table>
    </center>
  </body>
</html>

manninen [21.10.2010 08:18:58]

#

Nyt toimii seuraava linkki, mutta miten saan toimimaan edellinen linkin.

<?php require_once("hallinta/yhteys.php"); ?>
<?php require_once("yleiset.php"); ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=windows-1250">
  <meta name="generator" content="PSPad editor, www.pspad.com">
  <title><?php Title(); ?></title>
  <link rel="stylesheet" href="runko.css" type="text/css">
  </head>
   <?php TaustaKuva(); ?>

    <center>
    <table>
    <?php Otsikko(); ?>
    <?php LinkkiRivi(); ?>


       <tr>
      <td colspan="3" style="height:100%; text-align:center;">
        <?php
        SivunNimi(' Kuvagalleria ');


        function KuvienMaxMaara(){
            $k = "SELECT jnro FROM kuvagalleria";
            if(!($t = mysql_query($k))){
              return;
            }

            return $KuvienMaxMaara = mysql_num_rows($t);
          }
        ?>

        <?php
        // Haetaan tietokannasta esillä olevan kuvan järjestysnumerosta seuraavaksi pienempi järjestysnumero.
        function SeuraavanKuvannumero(){

          if(empty($_REQUEST['kuvanarvo'])){
            $seuraava = 0;
          }
          else{
            $seuraava = intval($_REQUEST['kuvanarvo']);
          }

          $k = "SELECT MIN(jnro) as arvo FROM kuvagalleria WHERE jnro > $seuraava";
          if(!($t = mysql_query($k))){
            return;
          }

          $r = mysql_fetch_assoc($t);

          $SeuraavaksiPienin = intval($r['arvo']);

          return $SeuraavaksiPienin;
        }

        // Haetaan tietokannasta suurimman kuvan järjestysnumero.
        function SuurimmanKuvannumero(){
          $k = "SELECT MAX(jnro) as arvo FROM kuvagalleria";
          if(!($t = mysql_query($k))){
            return;
          }

          $r = mysql_fetch_assoc($t);

          $SuurimmanKuvanNumero = intval($r['arvo']);

          return $SuurimmanKuvanNumero;
        }

        ?>
        <?php function HaetaanKuvatGalleriaan(){

            // Seuraavan kuvan numero
            $seuraavanKuvanNumero = SeuraavanKuvannumero();

            $osoiterivinArvo = intval($_REQUEST['kuvanarvo']);

            $kuva = empty($osoiterivinArvo) ? 1 : $seuraavanKuvanNumero;

            $k = "SELECT jnro, kuva, kuvateksti FROM kuvagalleria WHERE jnro >= $kuva LIMIT 1";
            if(!($t = mysql_query($k))){
              return;
            }

            $r = mysql_fetch_assoc($t);

              $kuvanosoite = htmlspecialchars($r['kuva']);
              $teksti = nl2br($r['kuvateksti']);
              $kuvannumero = intval($r['jnro']);

              echo '<img style="border:1px solid #0E138E;" align="middle" width="260px" height="195px;" src="hallinta/'.$kuvanosoite.'">&nbsp;&nbsp;';
              echo '<br /><br />';
              echo $teksti;



            echo '<br />';

            $tarkistus = SuurimmanKuvannumero();

            if(empty($osoiterivinArvo)){
              $eteenpain = 1;
            }
            else{
              $eteenpain = $seuraavanKuvanNumero;
            }

            if(empty($osoiterivinArvo)){
              $taaksepain = 1;
            }
            else{
              $taaksepain = $edellisenKuvanNumero;
            }

            echo '<br />';

            if($osoiterivinArvo <= 1){
              echo '<a style="color:blue !important;" href="galleria.php?kuvanarvo='.$taaksepain.'">Edellinen</a>';
            }
            else{
              echo '<a style="color:blue !important;" href="galleria.php?kuvanarvo='.$taaksepain.'">Edellinen</a>';
            }

            echo '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';


            if($tarkistus == $seuraavanKuvanNumero)
            {
              echo '<a style="color:blue !important;" href="galleria.php">Seuraava</a>';
            }
            else
            {
              echo '<a style="color:blue !important;" href="galleria.php?kuvanarvo='.$eteenpain.'">Seuraava</a>';
            }
        }
        ?>
        <?php HaetaanKuvatGalleriaan(); ?>
        <hr>
      </td>
    </tr>

    <tr>
      <td style="height:1%;"><img src="vkulma.gif"></td>
      <td style="width:99%;">&nbsp;</td>
      <td style="height:1%;"><img src="okulma.gif"></td>
    </tr>

    <tr><td colspan="3">&nbsp;</td></tr>
    </table>
    </center>
  </body>
</html>

manninen [21.10.2010 13:37:26]

#

Ei enää tarvitse päitä yhteenlyödä. Taisi ratkaisu jo löytyä :) Kiitoksia kaikille avustajille.

Metabolix [21.10.2010 23:13:22]

#

Ei kannata "missään tapauksessa" tehdä muutosta tietokantaan, koska siitä seuraa mitä todennäköisimmin bugeja. Seuraavan ja edellisen id-numeron voi helposti hakea yksinkertaisilla SQL-kyselyillä:

SELECT id AS edellinen FROM taulu WHERE id < 1234 ORDER BY id DESC LIMIT 1;
SELECT id AS seuraava FROM taulu WHERE id > 1234 ORDER BY id ASC LIMIT 1;

manninen [22.10.2010 10:40:39]

#

Hei!

Siinä on melkein toimiva purkkapaketti. Vasemmalle päin liikkuessa, ensimmäisen kuvan kohdalla tulee painaa kaksi kertaa. Sen jos jotenkin saisi vielä pois. Muutenkin jos jollain on aikaa ja intoa selventää miten tuota koodia saisi yksioikoisemmaksi vai pitääkö todella vääntää näin purkaksi :-) Olihan tuossa mielenkiintoinen kokemus, mutta kiinnostaisi tietää miten sen saisi vielä helpommin kasaan.

<?php require_once("hallinta/yhteys.php"); ?>
<?php require_once("yleiset.php"); ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=windows-1250">
  <meta name="generator" content="PSPad editor, www.pspad.com">
  <title><?php Title(); ?></title>
  <link rel="stylesheet" href="runko.css" type="text/css">
  </head>
   <?php TaustaKuva(); ?>

    <center>
    <table cellspacing="0" cellpadding="0" border="0" style="width:70%; height:93%; background:white; margin-bottom:25px; margin-top:25px; border:4px solid #6699FF;">
    <?php Otsikko(); ?>
    <?php LinkkiRivi(); ?>


       <tr>
      <td colspan="3" style="height:100%; text-align:center;">
        <?php
        SivunNimi(' Kuvagalleria ');
        ?>

        <?php
        function KuvienMaxMaara(){
            $k = "SELECT jnro FROM kuvagalleria";
            if(!($t = mysql_query($k))){
              return;
            }

            return $KuvienMaxMaara = mysql_num_rows($t);
          }

        // Haetaan tietokannasta esillä olevan kuvan järjestysnumerosta seuraavaksi pienempi järjestysnumero.
        function SeuraavanKuvannumero(){

          if(empty($_REQUEST['kuvanarvo'])){
            $seuraava = 0;
          }
          else{
            $seuraava = intval($_REQUEST['kuvanarvo']);
          }

          $k = "SELECT MIN(jnro) as arvo FROM kuvagalleria WHERE jnro > $seuraava";
          if(!($t = mysql_query($k))){
            return;
          }

          $r = mysql_fetch_assoc($t);

          $SeuraavaksiPienin = intval($r['arvo']);

          return $SeuraavaksiPienin;
        }

        function EtsitaanPienempiKuva(){

          $suurinolemassaoleva = KuvienMaxMaara();
          $tamanhetkinen = SeuraavanKuvannumero();

          if(empty($_REQUEST['kuvanarvo']))
          {
            $edellinen = $suurinolemassaoleva;
          }
          else
          {
            $edellinen = intval($_REQUEST['kuvanarvo']);
          }

          $k = "SELECT jnro FROM kuvagalleria WHERE jnro < $edellinen ORDER BY jnro DESC LIMIT 1";
          if(!($t = mysql_query($k))){
            return;
          }

          $r = mysql_fetch_assoc($t);

          $edellisenkuvanarvo = intval($r['jnro']);

          return $edellisenkuvanarvo;
        }

        // Haetaan tietokannasta suurimman kuvan järjestysnumero.
        function SuurimmanKuvannumero(){
          $k = "SELECT MAX(jnro) as arvo FROM kuvagalleria";
          if(!($t = mysql_query($k))){
            return;
          }

          $r = mysql_fetch_assoc($t);

          $SuurimmanKuvanNumero = intval($r['arvo']);

          return $SuurimmanKuvanNumero;
        }

        ?>
        <?php function HaetaanKuvatGalleriaan(){

            // Seuraavan kuvan numero
            $seuraavanKuvanNumero = SeuraavanKuvannumero();

            $osoiterivinArvo = intval($_REQUEST['kuvanarvo']);

            $kuva = empty($osoiterivinArvo) ? 1 : $seuraavanKuvanNumero;

            $k = "SELECT jnro, kuva, kuvateksti FROM kuvagalleria WHERE jnro >= $kuva LIMIT 1";
            echo $k;
            if(!($t = mysql_query($k))){
              return;
            }

            $r = mysql_fetch_assoc($t);

              $kuvanosoite = htmlspecialchars($r['kuva']);
              $teksti = nl2br($r['kuvateksti']);
              $kuvannumero = intval($r['jnro']);

              echo '<img style="border:1px solid #0E138E;" align="middle" width="260px" height="195px;" src="hallinta/'.$kuvanosoite.'">&nbsp;&nbsp;';
              echo '<br /><br />';
              echo $teksti;



            echo '<br />';

            $tarkistus = SuurimmanKuvannumero();

            if(empty($osoiterivinArvo)){
              $eteenpain = 1;
            }
            else{
              $eteenpain = $seuraavanKuvanNumero;
            }

            if(empty($osoiterivinArvo)){
              $taaksepain = $tarkistus;
            }
            else{
              $taaksepain = EtsitaanPienempiKuva();
            }

            echo '<br />';

            if($osoiterivinArvo <= 1){
              echo '1';
              echo '<a style="color:blue !important;" href="galleria.php?kuvanarvo='.$tarkistus.'">Edellinen</a>';
            }
            else{
              echo '2';
              echo '<a style="color:blue !important;" href="galleria.php?kuvanarvo='.$taaksepain.'">Edellinen</a>';
            }

            echo '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';


            if($tarkistus == $seuraavanKuvanNumero)
            {
              echo '<a style="color:blue !important;" href="galleria.php?kuvanarvo=0">Seuraava</a>';
            }
            else
            {
              echo '<a style="color:blue !important;" href="galleria.php?kuvanarvo='.$eteenpain.'">Seuraava</a>';
            }
        }
        ?>

        <?php
          EtsitaanPienempiKuva();
          HaetaanKuvatGalleriaan();
        ?>

        <hr>
      </td>
    </tr>

    <tr>
      <td style="height:1%;"><img src="vkulma.gif"></td>
      <td style="width:99%;">&nbsp;</td>
      <td style="height:1%;"><img src="okulma.gif"></td>
    </tr>

    <tr><td style="text-align:center; background:#6699FF;" colspan="3">
      &nbsp;</td></tr>
    </table>
    </center>
  </body>
</html>

-tossu- [22.10.2010 11:19:22]

#

Koodisi on niin purkkaa, että en jaksanut ottaa sen toiminnasta kunnolla selvää. Tässä on kuitenkin kirjoittamani pohja, jota voit koittaa soveltaa. En ole testannut sitä mitenkään, joten siinä voi olla virheitä. Siitä myös puuttuu useita tarkistuksia.

<?php
$kuva = intval ($_REQUEST ['kuvanarvo']);

$k = mysql_query ("SELECT jnro, kuva, kuvateksti FROM kuvagalleria WHERE jnro = $kuva LIMIT 1");
if (!mysql_num_rows ($k)) {
	//kuvaa ei löytynyt
}
$r = mysql_fetch_assoc ($k);
//kuvatagin tulostus

$k = mysql_query ("SELECT MAX(jnro) as edellinen FROM kuvagalleria WHERE jnro < $kuva");
$r = mysql_fetch_assoc ($k);
$edellinen = $r ['edellinen'];

$k = mysql_query ("SELECT MIN(jnro) as seuraava FROM kuvagalleria WHERE jnro > $kuva");
$r = mysql_fetch_assoc ($k);
$seuraava = $r ['seuraava'];

//edellinen- ja seuraava-linkkien tulostus
?>

Merri [22.10.2010 11:49:12]

#

Tämmöisenä pienenä yleisvinkkinä, kannattaa ensin tehdä valtaosa PHP-käsittelystä ennen kuin aloittaa sivun sisällön tulostamisen. Eli ensin alustukset, tietokantahaut, tiedon järjestely ja sitten vasta sivun osasten tulostus. Tämä tekee sivun koodista huomattavasti helpommin luettavaa kun se ei vaihtele jatkuvasti PHP-koodin ja HTML-koodin välillä.


Sivun alkuun

Vastaus

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

Tietoa sivustosta