AJAX, button, update a insert do databáze

Koupilsemto
Člen | 38
+
0
-

Zdravím, chtěl bych poprosit někoho zkušeného o pomoc s AJAXem. S AJAXem začínám tak jako s Nette, proto omluvte jestli je to pro vás banální problém.

Chtěl bych zamezit rezervování stejné knihy nebo položky ve stejný čas více uživateli zároveň. Bohužel se mi to nedaří vytvořit ani podle návodů. Nejsem si jist jak se tohle dá nejlépe ošetřit, takže pokud je nějaký jednoduší způsob jak tomu zabránit budu rád. Pokud by byl „stav“ v tabulkce knihy Rezervováno potom by to mělo vypsat hlášku že to nelze již objednat.
V latte mám toho:

		<tr n:foreach="$knihy as $book" class="articles">
<a n:href="Post:rezerve $book->ID" n:if="$user->loggedIn">
<button class="rezervovatbtn" n:if="$user->loggedIn"
        n:attr="disabled => $book->stav === 'Rezervováno' or $book->stav === 'Připravena k vyzvednutí'
        or $book->stav === 'Vypůjčena'
        or $book->stav === 'Nelze vypůjčit'">Rezervovat
</button>
</a>
	</tr>

V presenteru: Po kliknutí na „rezervovatbtn“ se zapíše do tabulky log kdo jí chce,čas a pomoci update se změní „stav“ v tabulce knihy

public function actionRezerve($postId) {
    $this->template->log = $this->database->table('log');
    $book = $this->database->table('knihy')->get($postId);
    if (!$book) {
        $this->error('Kniha neexistuje.');
    }
    $book->update(['stav' => "Rezervováno",]);
    $data = [
        'ID_knihy' => $book->ID,
        'ID_users' => $this->user->getId(),

 'akce' => 'Rezervováno',
        'date' => new \DateTime()
    ];
    $this->database->table('log')->insert($data);
}

Potom jsem si vytvořil JS kde je:

$(function() {
    $(".rezervovatbtn a").click(function () {
        var odkaz = this.href;

        $.get(odkaz, function (html) {
            alert("Load was performed - " + html);
            console.log(html);
        });

        return false;
    });
    /*
    $(".rezervovatbtn").click(function () {
        return false;
    });
    */  });

Tabulky jsou:
knihy→ ID, prace,stav
log→ id, ID_knihy, ID_users, akce, date

Za jakoukoliv radu díky.

Ondřej Kubíček
Člen | 494
+
0
-

ti tam akorát stačí přidat kontrola, jestli kniha už je zarezervovaná. pokud jo, tak vratíš uživateli nějakou message, jinak zarezervuješ. moc nechápu jinak kde ses sekl ?

Ondřej Kubíček
Člen | 494
+
0
-

jinak koukam na ten kod a doporučil bych ti napřed pořádně nastudovat ajax v nette https://doc.nette.org/…ication/ajax a použít nějakou knihovnu na straně klienta, nette.ajax.js, nittro nebo naja viz ten článek

místo action* bys určitě měl použít handle*, kontrolovat jestli dotaz je přes ajax, a použit snippety, pak by se ti ten button automaticky překreslil