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: připojení databáze

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

Aktivity
Avatar
Roman Kulhánek:20.1.2018 17:10

Ahoj, prosím zkusím požádat o pomoc.
Snažím se podle návodu zde PHP databaze pro začátečníky, udělat jednoduchý web.
Mám problém s připojením k databázi.
Nevím už jak mám vyplnit správně následující
/**

  • 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="wm46­.wedos.net", $database="d52393_p­es", $user="a52393_pes", $password="b6A4U4qa")
{
if (!isset(self::$con­nection)) {
$dsn = "mysql:host=$hos­t;dbname=$data­base";
self::$connection = new PDO($dsn, $user, $password, self::$options);
}
}
hází mi to chybu
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[28000] [1045] Access denied for user 'root'@'10.28.8.42' (using password: NO)' in /data/web/vir­tuals/52393/vir­tual/www/doma­ins/quickbuy.cz/Db­.php:48 Stack trace: #0 /data/web/vir­tuals/52393/vir­tual/www/doma­ins/quickbuy.cz/Db­.php(48): PDO->__construct('mys­ql:host=wm46.­..', 'root', '', Array) #1 /data/web/vir­tuals/52393/vir­tual/www/doma­ins/quickbuy.cz/in­dex.php(6): Db::connect('wm46­.wedos.net', 'd52393_pes', 'root', '') #2 {main} thrown in /data/web/vir­tuals/52393/vir­tual/www/doma­ins/quickbuy.cz/Db­.php on line 48
Děkuji

 
Odpovědět
20.1.2018 17:10
Avatar
Jan Lupčík
Tvůrce
Avatar
Odpovídá na Roman Kulhánek
Jan Lupčík:20.1.2018 18:30
  1. K Wedosu se lze připojit pouze z daného webhostingu, nelze se k němu připojit vzdáleně.
  2. Příště si aspoň odstraň to heslo k databázi. Myslím si, že toho tady může kdokoliv zneužít. ;)
Nahoru Odpovědět
20.1.2018 18:30
TruckersMP vývojář
Avatar
nekukej
Člen
Avatar
nekukej:20.1.2018 18:41

Dej jsem celý kód.

 
Nahoru Odpovědět
20.1.2018 18:41
Avatar
Roman Kulhánek:20.1.2018 18:48

Ahoj, heslo sem samo změnil.

Zdroj je celý komplet zde v tvorbě pro začátečníky. Zde je originál

<?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_WAR­NING,
PDO::MYSQL_AT­TR_INIT_COMMAND => "SET NAMES utf8",
PDO::ATTR_EMU­LATE_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::$con­nection)) {
$dsn = "mysql:host=$hos­t;dbname=$data­base";
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 executeStatemen­t($params)
{
$query = array_shift($pa­rams);
$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::executeS­tatement(func_get_ar­gs());
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::executeS­tatement(func_get_ar­gs());
$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::executeS­tatement(func_get_ar­gs());
return $statement->fetch(PDO::FET­CH_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::executeS­tatement(func_get_ar­gs());
return $statement->fetchAll(PDO::FET­CH_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::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();
}

/**
* 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::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();
}

/**
* 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 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');
}
}
}

 
Nahoru Odpovědět
20.1.2018 18:48
Avatar
Vít Kološ
Člen
Avatar
Vít Kološ:20.1.2018 19:59

Jaký kód máš v index.php? http://quickbuy.cz/Db.php žádnou chybu nevypisuje, takže by mohlo být něco špatně jinde... (Ve výpisu chyby navíc vidím nějaké "root", to by tam nemělo být.) :)

Editováno 20.1.2018 20:01
Nahoru Odpovědět
20.1.2018 19:59
Neopravuj, co není rozbité.
Avatar
Roman Kulhánek:21.1.2018 21:48

index je zde
require('Db.php');
Db::connect('wm46­.wedos.net', 'w52393_pes', 'xxxxxxx', '');

if (isset($_GET['c­lanek']))
$url = $_GET['clanek'];
else
$url = 'uvod';

$clanek = Db::queryOne('
SELECT *
FROM clanky
WHERE url=?
', $url);
if (!$clanek)
{
if ($url != 'chyba')
{
header('Location: index.php?cla­nek=chyba');
exit();
}
else
die('Nebyl nalezen chybovy clanek');
}

?>

<!DOCTYPE html>
<html lang="cs-cz">

<head>
<meta charset="utf-8" />
<meta name="description" content="<?= htmlspecialchar­s($clanek['po­pisek']) ?>" />
<meta name="keywords" content="<?= htmlspecialchar­s($clanek['kli­cova_slova']) ?>" />
<link rel="shortcut icon" href="obrazky/i­kona.ico" />
<link rel="stylesheet" href="styl.css" type="text/css" />
<title><?= htmlspecialchar­s($clanek['ti­tulek']) ?></title>
</head>

<body>
<header>
<div id="logo"><h1>Ho­Bi</h1></div>
<nav>
<ul>
<li><a href="index.php?cla­nek=uvod">Domů</a></li>
<li><a href="clanky.php">Člán­ky</a></li>
<li><a href="index.php?cla­nek=kontakt">Kon­takt</a></li>
</ul>
</nav>
</header>

<article>
<div id="centrovac">
<header>
<h1><?= htmlspecialchar­s($clanek['ti­tulek']) ?></h1>
</header>

<section>
<?= $clanek['obsah'] ?>
</section>
<div class="cistic"></div>
</div>
</article>

<footer>
Vytvořil ©HoBi 2013 pro <a href="http://­devbook.cz">DEV­BOOK.CZ</a>
<a href="adminis­trace.php">Ad­ministrace</a>
</footer>
</body>
</html>

 
Nahoru Odpovědět
21.1.2018 21:48
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 6 zpráv z 6.