Diskuze: Nette SQL chyba

PHP Nette Framework Nette framework Nette SQL chyba

Avatar
Jan Demel
Redaktor
Avatar
Jan Demel:

Č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 Čápka
Tým ITnetwork
Avatar
Odpovídá na Jan Demel
David Čápka:

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
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Jan Demel
Redaktor
Avatar
Odpovídá na David Čápka
Jan Demel:

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 Čápka
Tým ITnetwork
Avatar
Odpovídá na Jan Demel
David Čápka:

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
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Jan Demel
Redaktor
Avatar
Odpovídá na David Čápka
Jan Demel:

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 Čápka
Tým ITnetwork
Avatar
Odpovídá na Jan Demel
David Čápka:

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
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Jan Demel
Redaktor
Avatar
Odpovídá na David Čápka
Jan Demel:

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 Čápka
Tým ITnetwork
Avatar
Odpovídá na Jan Demel
David Čápka:

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  +1 4.3.2014 11:01
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
kashpi
Redaktor
Avatar
kashpi:

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
Redaktor
Avatar
Odpovídá na kashpi
Jan Demel:

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
kashpi
Redaktor
Avatar
kashpi:

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
Redaktor
Avatar
Odpovídá na kashpi
Jan Demel:

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

Nahoru Odpovědět  +1 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.