Edit a Delete dat z databáze

Raziner
Člen | 5
+
0
-

Dobrý den, omlouvám se, že znova otravuji. Dostal jsem se do fáze, kdy mám vytvořený formulář, který mi vytvářejí data (něco na způsobu článků) a zapisují se do databáze a vykreslují se v šabloně. Ale, mám problém s editací a deletováním dat. Když chci editovat data, tak se spíše vytvoří nové a to nechci a když mačkám na button s deletem, tak se data nesmažou. Byl bych rád za každou radu :).

Zde je presenter:

class LoggedPresenter extends Nette\Application\UI\Presenter {

    private $database;

    public function __construct(Nette\Database\Context $database) {
        $this->database = $database;
    }

    public function renderDefault() {
        $this->template->data = $this->database->table('t_org')
                ->limit(5);
    }

    public function renderShow($postId) {
        $this->template->post = $this->database->table('t_org')->get($postId);
    }

    protected function createComponentCreateForm() {
        $form = new UI\Form;
        $form->setRenderer(new BootstrapRenderer);
        $form->addText('name', 'Name')
                ->setRequired('Name is required!');

        $form->addText('description', 'Description');

        $form->addText('endpoint', 'Endpoint')
                ->setRequired('Endpoint is required!');

        $form->addText('email', 'Login')
                ->setRequired('Email is required!')
                ->setType('email')
                ->setAttribute('placeholder', 'E-mail')
                ->setAttribute('autofocus');

        $form->addPassword('password', 'Password')
                ->setRequired('Password is required!')
                ->setType('password')
                ->setAttribute('placeholder', 'Heslo')
                ->setAttribute('autofocus');


        $form->addSubmit('create', 'Create')
                ->setAttribute('class', 'btn btn-lg btn-primary btn-block center');


        $form->onSuccess[] = [$this, 'createFormSucceeded'];
        return $form;
    }

    public function createFormSucceeded($form, $values) {

        $postId = $this->getParameter('postId');

        if ($postId) {
            $post = $this->database->table('t_org')->get($postId);
            $post->update($values);
        } else {



        $this->database->table('t_org')->insert(array(
            'id_owner' => $this->getUser()->getId(),
            'id_created' => $this->getUser()->getId(),
            'id_updated' => $this->getUser()->getId(),
            'active' => true,
            'id' => $postId,
            'name' => $values['name'],
            'description' => $values['description'],
            'endpoint' => $values['endpoint'],
            'login' => $values['email'],
            'pwd' => $values['password'],
        ));
        }

        $this->flashMessage('confirmed', 'Confirmed');
        $this->redirect('Logged:');
    }

    public function actionEdit($postId) {
        $post = $this->database->table('t_org')->get($postId);
        if (!$post) {
            $this->error('Příspěvek nebyl nalezen');
        }
        $this['createForm']->setDefaults($post->toArray());
    }

    public function handleCreate($user) {
        $this->redrawControl('getUser');
    }

    function handleDelete($postId)
    {
    $$this->database->table('t_org')->where('id', $postId)->delete();
    $this->redirect('Logged');
    }

    public function handleLogout() {
        $this->user->logOut();
        $this->flashMessage('You were logged off.');
        $this->redirect('Homepage:');
    }



}\--

Model:
<?php

namespace App\Model;

use Nette;
use Nette\Database\Context;
use Nette\Database\Table\ActiveRow;
use Nette\Database\Table\IRow;
use Nette\Database\Table\Selection;
use Nette\Utils\ArrayHash;

class CreateData {
    use Nette\SmartObject;

    private $context;

    public function __construct(Nette\Database\Context $context) {
        $this->context = $context;
    }

    public function getPublicArticles() {
        return $this->context->table('t_org')
            ->where('created_at < ', new \DateTime)
            ->order('created_at DESC');
    }

    /** Konstanty pro manipulaci s modelem. */
        const
                TABLE_NAME = 't_org',
                COLUMN_ID = 'id',
                COLUMN_NAME = 'name',
                COLUMN_DESCRIPTION = 'description',
                COLUMN_ENDPOINT = 'endpoint',
                COLUMN_EMAIL = 'email',
                COLUMN_URL = 'url';

        /**
         * Vrátí seznam článků v databázi.
         * @return Selection seznam článků
         */
        public function getArticles()
        {
                return $this->context->table(self::TABLE_NAME)->query('SELECT * FROM table WHERE id_owner = ?', $getUser)->order(self::COLUMN_ID . ' DESC');
        }

        /**
         * Vrátí článek z databáze podle jeho URL.
         * @param string $url URl článku
         * @return bool|mixed|IRow první článek, který odpovídá URL nebo false při neúspěchu
         */
        public function getArticle($url)
        {
                return $this->context->table(self::TABLE_NAME)->where(self::COLUMN_URL, $url)->fetch();
        }

        /**
         * Uloží článek do systému. Pokud není nastaveno ID, vloží nový, jinak provede editaci.
         * @param array|ArrayHash $article článek
         */
        public function saveArticle($article)
        {
                if (!$article[self::COLUMN_ID])
                        $this->context->table(self::TABLE_NAME)->insert($article);
                else
                        $this->context->table(self::TABLE_NAME)->where(self::COLUMN_ID, $article[self::COLUMN_ID])->update($article);
        }

        /**
         * Odstraní článek.
         * @param string $url URL článku
         */
        public function removeArticle($url)
        {
                $this->context->table(self::TABLE_NAME)->where(self::COLUMN_URL, $url)->delete();
                $this->redirect('Logged:');

        }

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

mrkni na tenhle example – https://github.com/…D-collection je to tam přesně řešené insert, update, delete