Diskuze: Výpis dat z DB - Pomoc
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 12 zpráv z 12.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.
Jestli jsi začátečník, tak evidentně čerpáš ze špatných zdrojů. Zapomeň na funkce začínající "mysql_" (ty se používaly tak před dvanácti lety) a mrkni se tady do tutoriálů na PDO...
Na PDO jsem se díval, ale na začátek mi přišlo složité. Chci se s tím naučit pracovat a pochopit, jak věci fungují a proto mě pouze zajímá, kde je v tom kódu chyba. Určitě později přejdu na novější způsob zápisu. Takže pokud aspoň tušíte v čem je chyba, budu rád za každou radu či nápovědu.
Ta uvedená část kódu se jeví býti v pořádku. Bohužel nepíšeš, co
tomu předchází nebo zda něco následuje.
Máš zapnutý výpis chyb? Na localhostu ti vše funguje?
Michal Štěpánek ti radí dobře. Mysql_ funkce jsou zastaralé a z php
>= 7 jsou odstraněné. I to může být problém tvého serveru, pokud máš
php v této verzi či vyšší.
Pokud se bojíš PDO (zbytečně, je to jen první seznámení), tak můžeš
využívat i mysqli_ funkce, které jsou velmi podobné mysql_
(víceméně se jim navíc předává spojení).
Dále bych ti doporučil používat {} u cyklů apod., je to mnohem přehlednější a chytré IDE ti napoví, jestli ti někde nechybí závorka atd. Špatně to samozřejmě není, ale mně se to jeví jako vhodný zvyk.
Kde ti to běží?
Naštěstí je už hodně hostingů na PHP7, kde se můžeš s mysql_ rozloučit
a proto by to házelo chybu.
Máš správně nastavené přihlašovací údaje? To, co máš na localhostu ti
určitě fungovat nebude.
Snad každý hosting loguje chyby, najdi ten error log a hoď sem, co to
hlásí.
[30-Dec-2017 09:46:45 Europe/Prague] PHP Parse error: syntax error, unexpected '$zaznam' (T_VARIABLE) in soubor.php on line 49
line 49 v souboru: echo $zaznam["ID"];
verze PHP na webhostingu: 5.6
webhosting: Endora
Připojování k DB by mělo být v pořádku, okopíroval jsem ho ze souboru, který používám pro zápis do DB. (Ten je funkční)
Máš dost podivnou syntaxi toho while cyklu. Nevím, jestli by to mělo nebo nemělo fungovat, každopádně se to tak v žádném případě nepíše. Předělej to na tohle:
$sql = "SELECT ID, nazev FROM aktuality";
$vysledek = mysql_query($sql);
while($zaznam = mysql_fetch_array($vysledek, MYSQL_ASSOC)){
echo $zaznam["ID"];
echo $zaznam["nazev"];
}
mysql_free_result($vysledek);
Ale syntaxí to není. To, co uvedl již v prvním příspěvku, je funkční řešení (osobně ověřeno), pokud tedy předává správně připojení přes mysql_connect a mysql_select_db (což byl ale nevyhodilo chybu 500).
Byť je syntaxe while cyklu méně obvyklá a jedná se o syntaxi alternativní, jde ale i podle manuálu o povolenou. I zdejší články tento typ zápisu občas používají (viz části MVC tutoriálů a procházení polí při výpisu do šablony - foreach a některé zápisy if). Tím nijak nezpochybňuji, že to není úplně vhodné - zejména pro začátečníky, ale chyba to není - tu je třeba hledat jinde.
Jakube:
[30-Dec-2017 09:46:45 Europe/Prague] PHP Parse error: syntax error,
unexpected '$zaznam' (T_VARIABLE) in soubor.php on line 49
Zkontroluj si pořádně (nejlépe v nějakém chytřejším editoru se
zvýrazněním syntaxe), že ti nikde nechybí středník, nepřebývá/nechybí
závorka apod. Parse error by tomu nasvědčovalo. Nemusí to být jen
středník, můžeš někde špatně spojovat řetězce (zapomenutá
tečka).
Většinou, když mi psal syntax error na nějakém řádku, chyběl mi na předchozím řádku středník...
Zjistil jsem, že když odstraním tělo cyklu, tak se stránka zobrazuje normálně, ale bez vypsaných hodnot. Tedy takhle:
$sql = "SELECT ID, nazev FROM aktuality";
$vysledek = mysql_query($sql);
while($zaznam = mysql_fetch_array($vysledek, MYSQL_ASSOC)) {
}
mysql_free_result($vysledek);
Pokud však vložím příkaz echo s požadovanou proměnnou, tak nastane ta samá chyba. Může být můj styl zápisu příkazu echo špatný?
$sql = "SELECT ID, nazev FROM aktuality";
$vysledek = mysql_query($sql);
while($zaznam = mysql_fetch_array($vysledek, MYSQL_ASSOC)) {
echo $zaznam["ID"];
echo $zaznam["nazev"];
}
mysql_free_result($vysledek);
Tak už jsem to vyřešil, použil jsem místo echo příkaz print.
while($zaznam = mysql_fetch_array($vysledek, MYSQL_ASSOC)) {
print($zaznam["ID"]);
print("<br>");
}
Je sice dobré, že sis vyřešil problém s nefunkčností, nicméně to nic nemění na tom, že není dobré učit se zastaralé a nebezpečné způsoby, které již nejsou podporovány, ba dokonce jsou z nové verze i vyřazeny...
Zobrazeno 12 zpráv z 12.