Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Jan Demel
Tvůrce
Avatar
Jan Demel:4.3.2014 10:06

Čau. Prosím vás kde tu v tom kódu mám chybu ? Nefunguje mi INSERT příkaz.

<?php
require 'Nette/loader.php';

use Nette\Forms\Form,
    Nette\Database\Connection;

$connection = new Connection('mysql:host=localhost;dbname=test', 'root', '');

$form = new Form;
$form->addText('title', 'Titulek:')
     ->setRequired();
$form->addTextArea('body', 'Zpráva:', 50, 10)
     ->setRequired();
$form->addSubmit('submit', 'Odešli!');

if ($form->isSuccess())
{
    $values = $form->getValues();

    $connection->query("INSERT INTO news (title, body) VALUES ($values->title, $values->body)");
}

?>
Editováno 4.3.2014 10:07
Odpovědět
4.3.2014 10:06
To co se zdá být nemožné, je vždy možné.
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Jan Demel
David Hartinger:4.3.2014 10:10

Máš tam hlavně SQL injekce, jak je vidět, tak ani použití frameworku nezabrání základním bezpečnostním chybám. Když parametry vložíš do dotazu správně, tak to bude fungovat.

Nahoru Odpovědět
4.3.2014 10:10
You are the greatest project you will ever work on.
Avatar
Jan Demel
Tvůrce
Avatar
Odpovídá na David Hartinger
Jan Demel:4.3.2014 10:31

Jak by to teda mělo vypadat ? :)

Nahoru Odpovědět
4.3.2014 10:31
To co se zdá být nemožné, je vždy možné.
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Jan Demel
David Hartinger:4.3.2014 10:47

V Nette nedělám, ale typoval bych tohle:

$connection->query("INSERT INTO news (title, body) VALUES (?, ?)", $values->title, $values->body);

Jinak ti bude muset poradit někdo jiný.

EDIT: Jo, je to tak: http://doc.nette.org/en/2.1/database

Editováno 4.3.2014 10:48
Nahoru Odpovědět
4.3.2014 10:47
You are the greatest project you will ever work on.
Avatar
Jan Demel
Tvůrce
Avatar
Odpovídá na David Hartinger
Jan Demel:4.3.2014 10:50

Díky moc. V té jejich dokumentaci se moc nevyznám ... Mají to tam na 3 způsoby :D

Nahoru Odpovědět
4.3.2014 10:50
To co se zdá být nemožné, je vždy možné.
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Jan Demel
David Hartinger:4.3.2014 10:53

Tohle není úplně vlastnost Nette, patří to k základním znalostem PHP a také k základním znalostem práce s databázemi. Nikdy nesmíš vkládat proměnnou přímo do řetězce dotazu.

Nahoru Odpovědět
4.3.2014 10:53
You are the greatest project you will ever work on.
Avatar
Jan Demel
Tvůrce
Avatar
Odpovídá na David Hartinger
Jan Demel:4.3.2014 10:56

Právě že jsem to viděl v několika tutoriálech hlavně na YouTube... Tak jsem si myslel, že je to dobře.

Nahoru Odpovědět
4.3.2014 10:56
To co se zdá být nemožné, je vždy možné.
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Jan Demel
David Hartinger:4.3.2014 11:01

Youtube je naprosto nejhorší místo, kde se něco učit. Jednou jsem málem dostal infarkt u videa, kde borec udělal během 5ti minut asi 10 vážných chyb, které se učí někde na první lekci programování a dostal stovky plných hodnocení a děkovných komentářů. Netroufám si představit, kolik lidí to asi použilo a na kolika webech ten kód jede.

Nahoru Odpovědět
4.3.2014 11:01
You are the greatest project you will ever work on.
Avatar
michalkasparec
Tvůrce
Avatar
michalkasparec:7.3.2014 19:44

Ještě takovej detail, pokud používáš celý framework Nette, tak nevidím důvod to dělat takto.
Hlavně mi jde o ten přístup do databáze.
Proč vlastně používáš $connection->query() ?
Mnohem bezpečnější je to tahat přes DI a pak používat něco jako

$this->context->database->table('table')->insert($array)

Ale podle toho kodu nevypadá, že používáš celou MVC architekturu a jen využíváš něco z Nette

 
Nahoru Odpovědět
7.3.2014 19:44
Avatar
Jan Demel
Tvůrce
Avatar
Odpovídá na michalkasparec
Jan Demel:7.3.2014 21:59

Použil jsem to, protože jsem debil a nevěděl jsem, že to, co jsem dělal není Nette :D

Nahoru Odpovědět
7.3.2014 21:59
To co se zdá být nemožné, je vždy možné.
Avatar
michalkasparec
Tvůrce
Avatar
michalkasparec:7.3.2014 22:53

To zase neni pravda. Na nette je krasny ze ho nemusis pouzivat cely. Takze bych te nenazval debilem. Je spousta pripad, kdyz programatori vyuzivaji formulare z nette a nic jinyho. Ale jelikoz si dal titulek Nette chyba, tak mi to bylo prave divny. Takze pokud chces zacit s nette tak poradne.
Treba mi schvali clanek co sem napsal a rozjedu tu tutorial na Nette

 
Nahoru Odpovědět
7.3.2014 22:53
Avatar
Jan Demel
Tvůrce
Avatar
Odpovídá na michalkasparec
Jan Demel:7.3.2014 23:00

To by bylo fakt super (y) Na Nette.org je to napsané ... Nechci být sprostý :D

Nahoru Odpovědět
7.3.2014 23:00
To co se zdá být nemožné, je vždy možné.
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 12 zpráv z 12.