Avatar
Jan Demel
Redaktor
Avatar
Jan Demel:

Hoj lidi. Dneska jsem si trochu znovu hrál s PDO. Chtěl jsem udělat web, kde by se kliklo na tlačítko a za nějáký čas by se změnil obrázek. viz. http://demel.mablog.eu/meneniobrazku/

Jenže jsem narazil a nevím, jak mám udělat delay. Poradili by jste mi někdo ?

index.php

<!DOCTYPE html>
<!--
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
-->
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <?php
        //Connect to databese
        $pdo = new PDO('mysql:host=localhost;dbname=stranky;charset=utf8', 'root', '');

        //-------------------//
        $vyber_dat = $pdo->prepare('SELECT id FROM obrazky');
        $vyber_dat->execute();


        $vysledek = $vyber_dat->fetch(PDO::FETCH_ASSOC);

        //POROVNAVANI A VYBER OBRAZKU

        $id_obrazku = $vysledek['id'];

        echo("<img src='images/$id_obrazku.png' width='500px'>");
        echo("<a href='zmen_obrazek.php'>Změn obrázek</a>");
        echo("<br />");
        echo("SourceCode <a href='meneniobrazku.rar'>HERE</a>");
        ?>
    </body>
</html>

zmen_obrazek.php

<?php

$connect = new PDO('mysql:host=localhost;dbname=stranky;charset=utf8', 'root', '');

$get_data = $connect->prepare("SELECT id FROM obrazky");
$get_data->execute();

$data_from_database = $get_data->fetch(PDO::FETCH_ASSOC);

$konecny_vysledek = $data_from_database['id'];

switch($konecny_vysledek)
{
    case 1:
        $zmen_obrazek = $connect->prepare("UPDATE obrazky SET id=2");
        $zmen_obrazek->execute();
        if($zmen_obrazek)
        {
            header( 'Location: index.php' ) ;
        }
        else
        {
            echo("Nepodařilo se změnit obrázek");
        }
        break;
    case 2:
        $zmen_obrazek = $connect->prepare("UPDATE obrazky SET id=1");
        $zmen_obrazek->execute();
        if($zmen_obrazek)
        {
            header( 'Location: index.php' ) ;
        }
        else
        {
            echo("Nepodařilo se změnit obrázek");
        }
        break;
    default:
        echo("Bohužel takový obrázek databáze nemá.");
        break;
}
Odpovědět 2.1.2014 14:48
To co se zdá být nemožné, je vždy možné.
Avatar
Odpovídá na Jan Demel
Michal Žůrek (misaz):

Tvůj problém lze velmi jednoduše vyřešit.

<img src="<?php include("randomImage.php") ?>" alt="náhodný obrázek" id="obr" />

randomImage.php počítá že obrázky jsou ve složce images, je jich 100 a jsou pojmenovány číslem od 0 do 99 a příponu mají png:

<?php echo("images/" . rand(0, 99) . ".png"); ?>

Pokud chceš aby se po čase změnil tak si nastavíč interval, který se pomocí AJAXu zeptá na nový obrázek.

function GetNewImage() {
   var ajax = new XmlHttprequest));
   ajax.open("GET", "randomImage.php", false)
   ajax.onReadyStateChange = function () {
       if (ajax.status == 200) {
           document.getElementById("obr").setAttribute("src", ajax.responseText);
       }
   }
}
setInterval(GetNewImage, 50000);

pokud to chceš použít i na odkaz

<a href="#" id="getNewLink">New!</a>

tak ve scriptu odchytíš kliknutí a zavoláš tu funkci.

document.getElementById("getNewLink").onclick = function () {
    GetNewImage();
}

Všechno jsem psal z hlavy, takže ti ani neřeknu jestli je to dobře, ale mělo by být a pokud sem na něco nezapoměl tak by to mělo i fungovat.

Editováno 2.1.2014 15:07
Nahoru Odpovědět 2.1.2014 15:06
Nesnáším {}, proto se jim vyhýbám.
Avatar
Odpovídá na Michal Žůrek (misaz)
Michal Žůrek (misaz):

a jo zapoměl, ještě musíš ten ajaxový požadavek odeslat :D

za to odchycení onreadystatechange dej

ajax.send(null);
Nahoru Odpovědět 2.1.2014 15:09
Nesnáším {}, proto se jim vyhýbám.
Avatar
Jan Demel
Redaktor
Avatar
Jan Demel:

Nevím, jestli jsi mě dobře pochpil :D V podstatě jde o věc, která se užívá v browser hrách. Klikneš, že si chceš postavit lepší stupeň budovy a ono to samo za nějáký čas (klidně můžeš vypínat a zapínat prohlížeč) změní obrázek na "o stupeň vyšší budovu".

Nahoru Odpovědět 2.1.2014 15:40
To co se zdá být nemožné, je vždy možné.
Avatar
Kit
Redaktor
Avatar
Kit:

Debatu o struktuře skriptu PHP a Heredoc jsem přesunul:
http://www.itnetwork.cz/…2c5905eba64c

Nahoru Odpovědět 2.1.2014 17:16
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.