Aplikace pro správu článků – problém s mazáním
- Sopta
- Člen | 12
Zdravím všechny,
zrovna začínám s Nette a všechno si zkouším na různých příkladech.
Teď si píši mini aplikaci pro správu článků (přidávání,
prohlížení, mazání) prostě klasika na naučení. Akorát sem narazil na
jeden problém při mazání článků. Když si nechám vyjet články z DB
tak u každé položky mám odkaz pro smazání
<a n:href="smazat, $clanek->id">Smazat</a>
a
v presenteru ClankyPresenter metodu
<?php
public function actionSmazat($id = 0) {
dibi::delete('clanky')
->where('id = %d', $id);
$this->redirect('Clanky:');
}
?>
Tohle řešení s action<Action> jsem našel v jednom příkladě, popravdě jsem ho nezkoušel spustit. Jde o to, že se po kliknutí na odkaz nesmaže záznam, ale k přesměrování dojde. SQL jsem si několikrát prohlížel, různě měnil ale pořád nic. Mohli byste mi prosím poradit, kde dělám chybu? díky moc
Používám Nette pro PHP5.3 a dibi.
- Filip Procházka
- Moderator | 4668
Podle mě ti to žádnou chybu nevypsalo :) Protože ti tam chybí jedno důležité klíčové slovíčko.
dibi::delete('clanky')->where('id = %d', $id);
dibi::delete('clanky')->where('id = %d', $id)->execute(); // execute=vykonat
U selectů to není potřeba, ale u insert,update a delete ano.
Editoval HosipLan (3. 8. 2011 8:04)
- Sopta
- Člen | 12
HosipLan napsal(a):
Podle mě ti to žádnou chybu nevypsalo :) Protože ti tam chybí jedno důležité klíčové slovíčko.
dibi::delete('clanky')->where('id = %d', $id); dibi::delete('clanky')->where('id = %d', $id)->execute(); // execute=vykonat
U selectů to není potřeba, ale u insert,update a delete ano.
Jojo to je pravda, ale mám takový pocit, že jsem to měl normálně přes
dibi::query();
každopádně zkusím :)
- Sopta
- Člen | 12
Připsal jsem tam execute()
a nic to neudělalo ani když sem to
přepsal do podoby
<?php
dibi::query('DELETE FROM [clanky] WHERE id = %d', $id);
?>
K přesměrování dojde ale k odstranění ne. Přes AJAX by to šlo jelo, ale to by mělo jet i bez AJAXu a nechci to zase obcházet kejklemi.
- Sopta
- Člen | 12
No :D když chcu zase volat metodu z modelu:
<?php
public static function smazatClanek($id_clanku)
{
return dibi::query('DELETE FROM [clanky] WHERE id = %d', $id_clanku);
}
?>
kterou pak zavolat v presenteru v metodě
actionSmazat($id)
<?php
public function actionSmazat($id)
{
ClankyModel::smazatClanek($id);
$this->redirect('Clanky:');
}
?>
Tak to nejede :)
- Filip Procházka
- Moderator | 4668
A co s tím mám dělat? :) Tak to oprav. https://tester.nette.org/cs/