Diskuze: Začátečník - rada se sestavením dotazu
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 25 zpráv z 25.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.
SELECT i5dof_users.username FROM i5dof_users JOIN i5dof_phocadownload_logging ON (i5dof_users .id=i5dof_phocadownload_logging.userid) WHERE i5dof_phocadownload_logging.id=SEM_VLOZ_ID_SOUBORU
Neverim zadnemu dotazu, ktery napisu "na slepo" bez odzkouseni ale ... snad
bude fungovat 
Ted me jeste napadlo, ze jeden uzivatel mohl ten soubor stahnout vickrat ... v tom pripade, pokud jeho jmeno chces vratit pouze jednou a ne v zavislosti na tom, kolikrat ten soubor stahl, tak na konec muzes jeste pridat GROUP BY
SELECT i5dof_users.username FROM i5dof_users JOIN i5dof_phocadownload_logging ON (i5dof_users .id=i5dof_phocadownload_logging.userid) WHERE i5dof_phocadownload_logging.id=SEM_VLOZ_ID_SOUBORU GROUP BY i5dof_users.username
Tak pokud tento dotaz spustim z admina v databazi pokus je výsledek :
MySQL returned an empty result set (i.e. zero rows). ( Query took 0.0008 sec )
SELECT i5dof_users.username
FROM i5dof_users
JOIN i5dof_phocadownload_logging ON ( i5dof_users.id = i5dof_phocadownload_logging.userid )
WHERE i5dof_phocadownload_logging.id =2006
GROUP BY i5dof_users.username
LIMIT 0 , 30
Pokud tedy zadávám správně ID souboru.
Jo tak ... myslel sem, ze id souboru je logicky jen "id"
fileid jsem nejak prehlidl ...
kazdopadne jsem rad, ze funguje 
Tak ještě jeden problém - Tady je kód stránky kde to chci vypsat:
<!DOCTYPE html>
<html lang="cs-cz">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>Maji stazeno</title>
</head>
<body>
<h1>Maji stazeno</h1>
<?php
$servername = "localhost";
$username = "root";
$password = "admin";
// Create connection
$conn = mysqli_connect($servername, $username, $password);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
$uzivatele = "SELECT i5dof_users.username FROM i5dof_users JOIN i5dof_phocadownload_logging ON (i5dof_users .id=i5dof_phocadownload_logging.userid) WHERE i5dof_phocadownload_logging.fileid=2006 GROUP BY i5dof_users.username LIMIT 0, 30 ";
echo('<h2>Uživatelé</h2><table border="1">');
foreach ($uzivatele as $u)
{
echo('</td><td>' . htmlspecialchars($u['userid']));
echo('</td><td>' . htmlspecialchars($u['username']));
echo('</td></tr>');
}
echo('</table>');
?>
</body>
</html>
A nevypíše ani čárku :/
Zkusil jsem to trochu zjednodusit - tady je zdrojový kód:
<!DOCTYPE html>
<html lang="cs-cz">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>Maji stazeno</title>
</head>
<body>
<h1>Maji stazeno</h1>
<?php
require_once('Db.php');
Db::connect('127.0.0.1', 'pokus', 'root', 'admin');
}
$uzivatele = Db::queryAll('SELECT i5dof_users.username FROM i5dof_users JOIN i5dof_phocadownload_logging ON (i5dof_users .id=i5dof_phocadownload_logging.userid) WHERE i5dof_phocadownload_logging.fileid=2006 GROUP BY i5dof_users.username');
echo('<h2>Uživatelé</h2><table border="1">');
foreach ($uzivatele as $u)
{
echo('</td><td>' . htmlspecialchars($u['username']));
echo('</td><td>' . htmlspecialchars($u['email']));
echo('</td></tr>');
}
echo('</table>');
?>
</body>
</html>
Pouzivas nejaky databazovy wrapper ... nevim jak to funguje v nem, kazdopdne, snazis se vypisovat $u['email'] ale v dotazu jej neselectujes, uprav dotaz na
SELECT i5dof_users.username,i5dof_users.email FROM i5dof_users JOIN i5dof_phocadownload_logging ON (i5dof_users .id=i5dof_phocadownload_logging.userid) WHERE i5dof_phocadownload_logging.fileid=2006 GROUP BY i5dof_users.username
a pouziti tech <td> v tom foreach cyklu mas taky nejak zvlastne
uzaviras TD, ktere si ani
neotevrel hned na prvnim radku 
Takhle je to bez wrapperu a po uprave a stale nic:
<!DOCTYPE html>
<html lang="cs-cz">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>Maji stazeno</title>
</head>
<body>
<h1>Maji stazeno</h1>
<?php
$myhostName="localhost";
$mydbName="pokus";
$myuserName="root";
$myPW="admin";
$connection = mysql_connect($myhostName,$myuserName,$myPW);
mysql_select_db($mydbName,$connection);
}
$uzivatele = ("SELECT i5dof_users.username,i5dof_users.email FROM i5dof_users JOIN i5dof_phocadownload_logging ON (i5dof_users .id=i5dof_phocadownload_logging.userid) WHERE i5dof_phocadownload_logging.fileid=2006 GROUP BY i5dof_users.username\n" . " LIMIT 0, 30 ");
echo('<h2>Uživatelé</h2><table border="1">');
foreach ($uzivatele as $u)
{
echo('</td><td>' . htmlspecialchars($u['username']));
echo('</td><td>' . htmlspecialchars($u['email']));
echo('</td></tr>');
}
echo('</table>');
?>
</body>
</html>
Co se týká té tabulky - ta je okopírovaná z jednoho ze zdejších
tutoriálů 
$uzivatele = ("SELECT i5dof_users.username,i5dof_users.email FROM i5dof_users JOIN i5dof_phocadownload_logging ON (i5dof_users .id=i5dof_phocadownload_logging.userid) WHERE i5dof_phocadownload_logging.fileid=2006 GROUP BY i5dof_users.username\n" . " LIMIT 0, 30 ");
Tohle neposle zadny MYSQL dotaz, jen ulozi jako string do promenne
Pouzij kod takto:
$uzivatele = mysql_query("SELECT i5dof_users.username,i5dof_users.email FROM i5dof_users JOIN i5dof_phocadownload_logging ON (i5dof_users .id=i5dof_phocadownload_logging.userid) WHERE i5dof_phocadownload_logging.fileid=2006 GROUP BY i5dof_users.username");
while ($u = mysql_fetch_assoc($uzivatele))
{
echo('<tr><td>' . htmlspecialchars($u['username']));
echo('</td><td>' . htmlspecialchars($u['email']));
echo('</td></tr>');
}
Kazdopadne, nepuzivej na konci dotazu klauzuli LIMIT, orezava to pocet vysledku na 30, coz urcite nechces (kdyby si ten soubor stahlo vic nez 30 lidi) a taky bys nemel pouzivat databazove funkce mysql_, je to tzv. "deprecated" a v PHP 7 uz to dokonce neni, takze by ti pod PHP 7 tenhle kod nebezel
Tak jsem kod upravil a stále nic. Dokonce mi teď načítání stránky skončí na statusu 500 a stránka se nenačte.
Jakou mas verzi PHP ?
Koukni se do PHP error logu, najdes ho nekde ve slozce kde mas Apache/PHP
A kdyz das tohle na zacatek skriptu ?
error_reporting(E_ALL);
ini_set('display_errors', 1);
popripade jeste hod na pastebin.com ten tvuj aktualni kod jak ted je
Vteřinku...dostanu se k tomu tak za deset minut. Děkuji Ti že si na mne děláš čas
Vpohode, neni zac
rad
pomuzu ... mam z toho dobrej pocit a je mi to prijemnejsi nez se nervovat nad
vlastnima zdrojakama
kazdopadne sem si vsiml, ze po
mysql_select_db(); mas navic jednu zavorku } ... smaz ji
Tak po odstranění závorky :
Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /share/MD0_DATA/Qweb/joomlaCMS/test/index.php on line 20
[email protected]@nova-design.cz
Presne co jsem rikal, mysql_ nepouzivat ... inspiruj se timhle a prepis dle toho tvuj zdrojak
http://www.w3schools.com/…ch_assoc.asp
Je tam pripojeni k DB, poslani dotazu a vypsani vysledku pomoci mysqli driveru. Ten lze pouzit.
Takže verze po úpravě :
<!DOCTYPE html>
<html lang="cs-cz">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>Registrace uživatele</title>
</head>
<body>
<h1>Registrace uživatele</h1>
<?php
$con=mysqli_connect("localhost","root","admin","pokus");
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$sql="SELECT i5dof_users.username,i5dof_users.email FROM i5dof_users JOIN i5dof_phocadownload_logging ON (i5dof_users .id=i5dof_phocadownload_logging.userid) WHERE i5dof_phocadownload_logging.fileid=2006 GROUP BY i5dof_users.username";
$uzivatele = mysqli_query($con,$sql);
while ($u = mysqli_fetch_assoc($uzivatele))
{
echo('<tr><td>' . htmlspecialchars($u['username']));
echo('</td><td>' . htmlspecialchars($u['email']));
echo('</td></tr>');
}
mysqli_close($con);
?>
</body>
</html>
A stránka zobrazí pouze nadpis
SELECT i5dof_users.username,i5dof_users.email FROM i5dof_users JOIN i5dof_phocadownload_logging ON (i5dof_users .id=i5dof_phocadownload_logging.userid) WHERE i5dof_phocadownload_logging.fileid=2006 GROUP BY i5dof_users.username
Napada me jedine, ze v tom dotazu mas mezeru ... i5dof_users .id prepis na i5dof_users.id
Ano, to bylo ono 
Teď už to vypisuje. Sice do řádku a ne do tabulky, ale s tím už si snad
nějak poradím 
Jěště jednou děkuju za ochotu, pomoc a Tvůj čas.
Díky Honza
Do řádku to vypisuje, protože tam musíš ještě před začátkem cyklu uvést tu tabulku a po skončení cyklu ji zase uzavřít...
echo('<table>');
while ($u = mysqli_fetch_assoc($uzivatele))
{
echo('<tr><td>' . htmlspecialchars($u['username']));
echo('</td><td>' . htmlspecialchars($u['email']));
echo('</td></tr>');
}
mysqli_close($con);
echo('</table>');
Zobrazeno 25 zpráv z 25.