IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
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í.

Diskuze: Problém s nahrátím formuláře do databáze

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
matyas.rec
Člen
Avatar
matyas.rec:8.2.2018 18:02

Ahoj, vytvořil jsem si vlastní formulář a chtěl bych aby se mi nahrával do databáze, ale bohužel to nefunguje a nevím kde jsem udělal chybu. Mohli by jste mi prosím pomoc? Předem děkuji.

<?php
session_start();
require('data­base.php');
Db::connect('mys­ql.tld.cz', 'databaze', 'uzivatel', 'heslo-databaze');

if ($_POST)
{
if ($_POST['rok'] != date('Y'))

else
{
Db::query('
INSERT INTO restaurace (nazev, typ, ulice, mesto, web, telefon, email, oteviracidoba, rozvoz, cenarozvozu, cenajidlo, dobarozvozu, newsletter, podminky)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
', $_POST['nazev'], $_POST['typ'], $_POST['ulice'], $_POST['mesto'], $_POST['web'], $_POST['telefon'], $_POST['email'], $_POST['otevi­racidoba'], $_POST['rozvoz'], $_POST['cenaroz­vozu'], $_POST['cenaji­dlo'], $_POST['dobaroz­vozu'], $_POST['newslet­ter'], $_POST['podminky'];

$_SESSION['uzi­vatele_id'] = Db::getLastId();
$_SESSION['nazev'] = $_POST['nazev'];
$_SESSION['typ'] = $_POST['typ'];
$_SESSION['ulice'] = $_POST['ulice'];
$_SESSION['mesto'] = $_POST['mesto'];
$_SESSION['web'] = $_POST['web'];
$_SESSION['te­lefon'] = $_POST['telefon'];
$_SESSION['email'] = $_POST['email'];
$_SESSION['ote­viracidoba'] = $_POST['otevi­racidoba'];
$_SESSION['rozvoz'] = $_POST['rozvoz'];
$_SESSION['ce­narozvozu'] = $_POST['cenaroz­vozu'];
$_SESSION['ce­najidlo'] = $_POST['cenaji­dlo'];
$_SESSION['do­barozvozu'] = $_POST['dobaroz­vozu'];
$_SESSION['new­sletter'] = $_POST['newslet­ter'];
$_SESSION['pod­minky'] = $_POST['podminky'];

exit();
}
}
}
?>

K Tomu mám proprárovaný soubor database.php

<?php

class Db
{

private static $connection;

private static $options = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_WAR­NING,
PDO::MYSQL_AT­TR_INIT_COMMAND => "SET NAMES utf8",
PDO::ATTR_EMU­LATE_PREPARES => false,
);

public static function connect($host, $database, $user, $password)
{
if (!isset(self::$con­nection)) {
$dsn = "mysql:host=$hos­t;dbname=$data­base";
self::$connection = new PDO($dsn, $user, $password, self::$options);
}
}

private static function executeStatemen­t($params)
{
$query = array_shift($pa­rams);
$statement = self::$connection->prepare($query);
$statement->execute($params);
return $statement;
}

public static function query($query) {
$statement = self::executeS­tatement(func_get_ar­gs());
return $statement->rowCount();
}

public static function querySingle($query) {
$statement = self::executeS­tatement(func_get_ar­gs());
$data = $statement->fetch();
return $data[0];
}

public static function queryOne($query) {
$statement = self::executeS­tatement(func_get_ar­gs());
return $statement->fetch(PDO::FET­CH_ASSOC);
}

public static function queryAll($query) {
$statement = self::executeS­tatement(func_get_ar­gs());
return $statement->fetchAll(PDO::FET­CH_ASSOC);
}

public static function insert($table, $data) {
$keys = array_keys($data);
self::checkIden­tifiers(array($ta­ble) + $keys);
$query = "
INSERT INTO $table (" . implode(', ', $keys) . ")
VALUES (" . str_repeat('?,', count($data) - 1) . "?)
";
$params = array_merge(a­rray($query), array_values($da­ta));
$statement = self::executeS­tatement($param­s);
return $statement->rowCount();
}

public static function update($table, $data, $condition) {
$keys = array_keys($data);
self::checkIden­tifiers(array($ta­ble) + $keys);
$query = "
UPDATE $table SET `".
implode('` = ?, ', array_keys($data)) . " = ?
$condition
";
$params = array_merge(a­rray($query), array_values($da­ta), array_slice(fun­c_get_args(), 3));
$statement = self::executeS­tatement($param­s);
return $statement->rowCount();
}

public static function getLastId()
{
return self::$connection->lastInsertId();
}

public static function quote($string)
{
return self::$connection->quote($string);
}

private static function checkIdentifi­ers($identifi­ers)
{
foreach ($identifiers as $identifier)
{
if (!preg_match('/^[a-zA-Z0-9\_\-]+$/u', $identifier))
throw new Exception('Dan­gerous identifier in SQL query');
}
}
}
?>

 
Odpovědět
8.2.2018 18:02
Avatar
dez1nd
Člen
Avatar
dez1nd:9.2.2018 6:04

Ahoj, za

  1. zdrojový kód formátuj pomocí tlačítka </> pak se v tom orientujeme snáze
<?php
session_start();
require('database.php');
Db::connect('mysql.tld.cz', 'databaze', 'uzivatel', 'heslo-databaze');

if ($_POST)
{
if ($_POST['rok'] != date('Y'))

else
{
Db::query('
INSERT INTO restaurace (nazev, typ, ulice, mesto, web, telefon, email, oteviracidoba, rozvoz, cenarozvozu, cenajidlo, dobarozvozu, newsletter, podminky)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
', $_POST['nazev'], $_POST['typ'], $_POST['ulice'], $_POST['mesto'], $_POST['web'], $_POST['telefon'], $_POST['email'], $_POST['oteviracidoba'], $_POST['rozvoz'], $_POST['cenarozvozu'], $_POST['cenajidlo'], $_POST['dobarozvozu'], $_POST['newsletter'], $_POST['podminky'];

$_SESSION['uzivatele_id'] = Db::getLastId();
$_SESSION['nazev'] = $_POST['nazev'];
$_SESSION['typ'] = $_POST['typ'];
$_SESSION['ulice'] = $_POST['ulice'];
$_SESSION['mesto'] = $_POST['mesto'];
$_SESSION['web'] = $_POST['web'];
$_SESSION['telefon'] = $_POST['telefon'];
$_SESSION['email'] = $_POST['email'];
$_SESSION['oteviracidoba'] = $_POST['oteviracidoba'];
$_SESSION['rozvoz'] = $_POST['rozvoz'];
$_SESSION['cenarozvozu'] = $_POST['cenarozvozu'];
$_SESSION['cenajidlo'] = $_POST['cenajidlo'];
$_SESSION['dobarozvozu'] = $_POST['dobarozvozu'];
$_SESSION['newsletter'] = $_POST['newsletter'];
$_SESSION['podminky'] = $_POST['podminky'];

exit();
}
}
}
?>

K Tomu mám proprárovaný soubor database.php

<?php

class Db
{

private static $connection;

private static $options = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING,
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
PDO::ATTR_EMULATE_PREPARES => false,
);

public static function connect($host, $database, $user, $password)
{
if (!isset(self::$connection)) {
$dsn = "mysql:host=$host;dbname=$database";
self::$connection = new PDO($dsn, $user, $password, self::$options);
}
}

private static function executeStatement($params)
{
$query = array_shift($params);
$statement = self::$connection->prepare($query);
$statement->execute($params);
return $statement;
}

public static function query($query) {
$statement = self::executeStatement(func_get_args());
return $statement->rowCount();
}

public static function querySingle($query) {
$statement = self::executeStatement(func_get_args());
$data = $statement->fetch();
return $data[0];
}

public static function queryOne($query) {
$statement = self::executeStatement(func_get_args());
return $statement->fetch(PDO::FETCH_ASSOC);
}

public static function queryAll($query) {
$statement = self::executeStatement(func_get_args());
return $statement->fetchAll(PDO::FETCH_ASSOC);
}

public static function insert($table, $data) {
$keys = array_keys($data);
self::checkIdentifiers(array($table) + $keys);
$query = "
INSERT INTO $table (" . implode(', ', $keys) . ")
VALUES (" . str_repeat('?,', count($data) - 1) . "?)
";
$params = array_merge(array($query), array_values($data));
$statement = self::executeStatement($params);
return $statement->rowCount();
}

public static function update($table, $data, $condition) {
$keys = array_keys($data);
self::checkIdentifiers(array($table) + $keys);
$query = "
UPDATE $table SET `".
implode('` = ?, ', array_keys($data)) . " = ?
$condition
";
$params = array_merge(array($query), array_values($data), array_slice(func_get_args(), 3));
$statement = self::executeStatement($params);
return $statement->rowCount();
}

public static function getLastId()
{
return self::$connection->lastInsertId();
}

public static function quote($string)
{
return self::$connection->quote($string);
}

private static function checkIdentifiers($identifiers)
{
foreach ($identifiers as $identifier)
{
if (!preg_match('/^[a-zA-Z0-9\_\-]+$/u', $identifier))
throw new Exception('Dangerous identifier in SQL query');
}
}
}
?>
  1. co přesně ti na tom nefunguje, nějaká chybová hláška ?
Editováno 9.2.2018 6:04
 
Nahoru Odpovědět
9.2.2018 6:04
Avatar
matyas.rec
Člen
Avatar
Odpovídá na dez1nd
matyas.rec:9.2.2018 6:35

hlásíto ERROR 500

 
Nahoru Odpovědět
9.2.2018 6:35
Avatar
dez1nd
Člen
Avatar
dez1nd:9.2.2018 7:02

zkontroluj si závorky u prvních podmínek a u ukládání, nějak mi tam nesedí

if ($_POST)
{
if ($_POST['rok'] != date('Y'))

else
{

mezi druhým Ifem a else chybí určitě

Editováno 9.2.2018 7:04
 
Nahoru Odpovědět
9.2.2018 7:02
Avatar
matyas.rec
Člen
Avatar
matyas.rec:9.2.2018 8:04

Zregidoval jsem všechny závorky a pořád to nefunguje, teď to mám tak:

<?php
session_start();
require('data­base.php');
Db::connect('mys­ql.domain.tld', 'databaze', 'uzivatel', 'heslo');

if ($_POST)
{
if ($_POST['rok'] != date('Y'))
}

else
{
Db::query('
INSERT INTO restaurace (nazev, typ, ulice, mesto, web, telefon, email, oteviracidoba, rozvoz, cenarozvozu, cenajidlo, dobarozvozu, newsletter, podminky)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
', $_POST['nazev'], $_POST['typ'], $_POST['ulice'], $_POST['mesto'], $_POST['web'], $_POST['telefon'], $_POST['email'], $_POST['otevi­racidoba'], $_POST['rozvoz'], $_POST['cenaroz­vozu'], $_POST['cenaji­dlo'], $_POST['dobaroz­vozu'], $_POST['newslet­ter'], $_POST['podminky'];

$_SESSION['uzi­vatele_id'] = Db::getLastId();
$_SESSION['nazev'] = $_POST['nazev'];
$_SESSION['typ'] = $_POST['typ'];
$_SESSION['ulice'] = $_POST['ulice'];
$_SESSION['mesto'] = $_POST['mesto'];
$_SESSION['web'] = $_POST['web'];
$_SESSION['te­lefon'] = $_POST['telefon'];
$_SESSION['email'] = $_POST['email'];
$_SESSION['ote­viracidoba'] = $_POST['otevi­racidoba'];
$_SESSION['rozvoz'] = $_POST['rozvoz'];
$_SESSION['ce­narozvozu'] = $_POST['cenaroz­vozu'];
$_SESSION['ce­najidlo'] = $_POST['cenaji­dlo'];
$_SESSION['do­barozvozu'] = $_POST['dobaroz­vozu'];
$_SESSION['new­sletter'] = $_POST['newslet­ter'];
$_SESSION['pod­minky'] = $_POST['podminky'];

exit();
)
}

?>

 
Nahoru Odpovědět
9.2.2018 8:04
Avatar
dez1nd
Člen
Avatar
Odpovídá na matyas.rec
dez1nd:9.2.2018 9:16

za podmínkou if musí následovat kus kódu po splnění nebo alespoň prázdné závorky toto ti fungovat nebude

if ($_POST['rok'] != date('Y'))
}

musí to být takto

if ($_POST['rok'] != date('Y'))
{
        //zde se má něco stát
}

nebo takto

if ($_POST['rok'] != date('Y'))
        //zde se má něco stát
Editováno 9.2.2018 9:17
 
Nahoru Odpovědět
9.2.2018 9:16
Avatar
matyas.rec
Člen
Avatar
Odpovídá na dez1nd
matyas.rec:9.2.2018 10:01

I když to upravím tak to pořád nejde, ale dík za pomoc.

 
Nahoru Odpovědět
9.2.2018 10:01
Avatar
Jan Štrobl
Člen
Avatar
Jan Štrobl:9.2.2018 10:16

Tahle závorka u if byla jedna chyba a druhou máš zde

Db::query('
INSERT INTO restaurace (nazev, typ, ulice, mesto, web, telefon, email, oteviracidoba, rozvoz, cenarozvozu, cenajidlo, dobarozvozu, newsletter, podminky)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
', $_POST['nazev'], $_POST['typ'], $_POST['ulice'], $_POST['mesto'], $_POST['web'], $_POST['telefon'], $_POST['email'], $_POST['oteviracidoba'], $_POST['rozvoz'], $_POST['cenarozvozu'], $_POST['cenajidlo'], $_POST['dobarozvozu'], $_POST['newsletter'], $_POST['podminky'];

není to ukončené... takže to oprav na

..., $_POST['podminky']);
 
Nahoru Odpovědět
9.2.2018 10:16
Avatar
matyas.rec
Člen
Avatar
matyas.rec:9.2.2018 11:00

díky moc všem za pomoc

 
Nahoru Odpovědět
9.2.2018 11:00
Avatar
dez1nd
Člen
Avatar
Odpovídá na matyas.rec
dez1nd:9.2.2018 11:02

používej nějaký IDE, který ti takové chyby nahlásí.

Editováno 9.2.2018 11:02
 
Nahoru Odpovědět
9.2.2018 11:02
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 10 zpráv z 10.