AJAX, button, update a insert do databáze
- Koupilsemto
- Člen | 38
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
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
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