Diskuze – Lekce 5 - NERS - Registrace uživatelů v PHP
ZpětUpozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.


Uživatel sítě :5.11.2017 0:47
Pouze jsem navrhl, že to je ideální hranice. +- sekunda na víc u
přihlašování nikoho nezabije.
Defaultně je 10 a to je moc rychlé.. :/
Peter Schoeller:5.11.2017 11:22
Aha.... Tak ak je to otazka sekundy, dvoch, mas pravdu, treba to doplnit.
Ja mam na stranke aj "brzdu" v podobe reCAPTCHA.
Uživatel sítě :5.11.2017 16:36
Ale jak jsi psal, záleží na HW, může ti to počítat rychleji nebo i pomaleji.
Ahoj, když kliknu na tlačítko restartovat tak se nic neděje, tabulka se "vynuluje" a v myphpadmin se nic nezapíše.. :/ v Php jsem laik..
<?php
session_start();
require('Db.php');
Db::connect('127.0.0.1', 'ners_db', 'root', '');
if ($_POST)
{
if ($_POST['rok'] != date('2017'))
$zprava = 'Chybně vyplněný antispam.';
else if ($_POST['heslo'] != $_POST['heslo_znovu'])
$zprava = 'Hesla nesouhlasí';
else
{
$existuje = Db::querySingle('
SELECT COUNT(*)
FROM uzivatele
WHERE jmeno=?
LIMIT 1
', $_POST['jmeno']);
if ($existuje)
$zprava = 'Uživatel s touto přezdívkou je již v databázi obsažen.';
else
{
Db::query('
INSERT INTO uzivatele (jmeno, heslo)
VALUES (?, SHA1(?))
', $_POST['jmeno'], $_POST['heslo'] . "t&#ssdf54gh");
$_SESSION['uzivatel_id'] = Db::getLastId();
$_SESSION['uzivatel_jmeno'] = $_POST['jmeno'];
$_SESSION['uzivatel_admin'] = 0;
header('Location: administrace.php');
exit();
}
}
}
?>
<!DOCTYPE html>
<html lang="cs-cz">
<head>
<link rel="stylesheet" href="styl.css" type="text/css" />
<title>Registrace</title>
</head>
<body>
<article>
<div id="centrovac">
<header>
<h1>Registrace</h1>
</header>
<section>
<?php
if (isset($zprava))
echo('<p>' . $zprava . '</p>');
?>
<form method="post">
Jméno<br />
<input type="text" name="jmeno" /><br />
Heslo<br />
<input type="password" name="heslo" /><br />
Heslo znovu<br />
<input type="password" name="heslo_znovu" /><br />
Zadejte aktuální rok (antispam)<br />
<input type="text" name="rok" /><br />
<input type="submit" value="Registrovat" />
</form>
</section>
<div class="cistic"></div>
</div>
</article>
</body>
</html>
Db.php
<?php
/**
* __ __ __
* ____/ /__ _ __/ /_ ____ ____ / /__ _________
* / __ / _ \ | / / __ \/ __ \/ __ \/ //_// ___/_ /
* / /_/ / __/ |/ / /_/ / /_/ / /_/ / ,< _/ /__ / /_
* \__,_/\___/|___/_.___/\____/\____/_/|_(_)___/ /___/
*
*
* TUTORIÁLY <> DISKUZE <> KOMUNITA <> SOFTWARE
*
* Tento zdrojový kód je součástí tutoriálů na programátorské
* sociální síti WWW.DEVBOOK.CZ
*
* Kód můžete upravovat jak chcete, jen zmiňte odkaz
* na www.devbook.cz :-)
*
* Jednoduchý databázový wrapper nad PDO
*/
class Db
{
/**
* @var PDO Databázové spojení
*/
private static $connection;
/**
* @var array Výchozí nastavení ovladače
*/
private static $options = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING,
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
PDO::ATTR_EMULATE_PREPARES => false,
);
/**
* Připojí se k databázi pomocí daných údajů
* @param string $host Název hostitele
* @param string $database Název databáze
* @param string $user Uživatelské jméno
* @param string $password Heslo
*/
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);
}
}
/**
* Spustí dotaz a vrátí PDO statement
* @param array $params Pole, kde je prvním prvkem dotaz a dalšími jsou parametry
* @return \PDOStatement PDO statement
*/
private static function executeStatement($params)
{
$query = array_shift($params);
$statement = self::$connection->prepare($query);
$statement->execute($params);
return $statement;
}
/**
* Spustí dotaz a vrátí počet ovlivněných řádků. Dále se předá libovolný počet dalších parametrů.
* @param string $query Dotaz
* @return int Počet ovlivněných řádků
*/
public static function query($query) {
$statement = self::executeStatement(func_get_args());
return $statement->rowCount();
}
/**
* Spustí dotaz a vrátí z něj první sloupec prvního řádku. Dále se předá libovolný počet dalších parametrů.
* @param string $query Dotaz
* @return mixed Hodnota prvního sloupce z prvního řádku
*/
public static function querySingle($query) {
$statement = self::executeStatement(func_get_args());
$data = $statement->fetch();
return $data[0];
}
/**
* Spustí dotaz a vrátí z něj první řádek. Dále se předá libovolný počet dalších parametrů.
* @param string $query Dotaz
* @return mixed Pole výsledků nebo false při neúspěchu
*/
public static function queryOne($query) {
$statement = self::executeStatement(func_get_args());
return $statement->fetch(PDO::FETCH_ASSOC);
}
/**
* Spustí dotaz a vrátí všechny jeho řádky jako pole asociativních polí. Dále se předá libovolný počet dalších parametrů.
* @param string $query Dotaz
* @return mixed Pole řádků enbo false při neúspěchu
*/
public static function queryAll($query) {
$statement = self::executeStatement(func_get_args());
return $statement->fetchAll(PDO::FETCH_ASSOC);
}
/**
* Umožňuje snadné vložení záznamu do databáze pomocí asociativního pole
* @param string $table Název tabulky
* @param array $data Asociativní pole, kde jsou klíče sloupce a hodnoty hodnoty
* @return int Počet ovlivněných řádků
*/
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();
}
/**
* Umožňuje snadnou modifikaci záznamu v databázi pomocí asociativního pole
* @param string $table Název tabulky
* @param array $data Asociativní pole, kde jsou klíče sloupce a hodnoty hodnoty
* @param string $condition Řetězec s SQL podmínkou (WHERE)
* @return mixed
*/
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();
}
/**
* Vrátí poslední ID posledního záznamu vloženého pomocí INSERT
* @return mixed Id posledního záznamu
*/
public static function getLastId()
{
return self::$connection->lastInsertId();
}
/**
* Ošetří string proti SQL injekci
* @param string $string Řetězec
* @return mixed Ošetřený řetězec
*/
public static function quote($string)
{
return self::$connection->quote($string);
}
/**
* Zkontroluje, zda identifikátory odpovídají formátu identifikátorů
* @param array $identifiers Pole identifikátorů
* @throws \Exception
*/
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');
}
}
}
Peter Schoeller:19.11.2017 11:59
Ahoj
Asi si myslel "registrovat" namiesto "restartovat"
Ale k veci:
Mas dobre nastaveny pristup k databazi?
Db::connect('127.0.0.1', 'ners_db', 'root', '');
Hlavne treti a stvrty argument, kde je meno a heslo.
Lebo ak tvoj php je presne ako si ho napisal sem, tak na pozicii hesla nemas
vobec nic, a preto sa ani nic nedeje.
Predpokladam ze tabulku s nazvom "ners_db" mas vytvorenu
spravne.
Db.php sem nemusis pisat, lebo ten je urcite v poriadku.
Dobry den, prosim vas o radu. Uz dobreho pul dne na to nemohu prijit. Pri
vytvoreni registrace.php a nasledneho vyplneni a odeslani formulare do databaze
mi vyskoci 404 not found, The requested URL/.. Je treba nakonfigurovat nejak
Apache? myslim, ze hledam chybu tam kde neni . Diky za pripadnou pomoc.
Jan Lupčík:4.1.2018 17:28
Rád bych viděl celou chybovou chybu. Každopádně není problém s tím,
že tam nemáš soubor administrace.php
?
Martin Štěpaník:5.1.2018 12:51
Ano, The requested URL /RS/administrace.php was not found on this server.
Jak to prosim vyresit? Dekuji.
Zobrazeno 10 zpráv z 138.