Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
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í.
Avatar
Jakub Volák
Člen
Avatar
Jakub Volák:29.12.2017 14:06

Ahoj, napsal jsem si tenhle kód pro výpis dat z databáze, ale bohužel po nahrání na webhosting mi stránka vypisuje HTTP 500 Error. Jsem začátečník a tento kód jsem napsal spíše pomocí vyhledaných informací na internetu. Budu rád za jakoukoliv pomoc.

$sql = "SELECT ID, nazev FROM aktuality";
$vysledek = mysql_query($sql);
while($zaznam = mysql_fetch_array($vysledek, MYSQL_ASSOC)) :
     echo $zaznam["ID"];
     echo $zaznam["nazev"];
endwhile;
mysql_free_result($vysledek);
 
Odpovědět
29.12.2017 14:06
Avatar
Odpovídá na Jakub Volák
Michal Štěpánek:29.12.2017 19:39

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...

Nahoru Odpovědět
29.12.2017 19:39
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Jakub Volák
Člen
Avatar
Odpovídá na Michal Štěpánek
Jakub Volák:29.12.2017 21:06

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.

 
Nahoru Odpovědět
29.12.2017 21:06
Avatar
Hando
Člen
Avatar
Odpovídá na Jakub Volák
Hando:30.12.2017 3:32

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. :)

Editováno 30.12.2017 3:32
 
Nahoru Odpovědět
30.12.2017 3:32
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na Jakub Volák
Petr Čech:30.12.2017 9:42

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í.

Nahoru Odpovědět
30.12.2017 9:42
the cake is a lie
Avatar
Jakub Volák
Člen
Avatar
Odpovídá na Petr Čech
Jakub Volák:30.12.2017 9:50

[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í)

 
Nahoru Odpovědět
30.12.2017 9:50
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na Jakub Volák
Petr Čech:30.12.2017 10:19

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);
Nahoru Odpovědět
30.12.2017 10:19
the cake is a lie
Avatar
Hando
Člen
Avatar
Odpovídá na Petr Čech
Hando:30.12.2017 12:17

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).

 
Nahoru Odpovědět
30.12.2017 12:17
Avatar
Odpovídá na Jakub Volák
Michal Štěpánek:30.12.2017 12:26

Většinou, když mi psal syntax error na nějakém řádku, chyběl mi na předchozím řádku středník...

Nahoru Odpovědět
30.12.2017 12:26
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Jakub Volák
Člen
Avatar
Odpovídá na Hando
Jakub Volák:30.12.2017 20:06

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);
 
Nahoru Odpovědět
30.12.2017 20:06
Avatar
Jakub Volák
Člen
Avatar
Odpovídá na Jakub Volák
Jakub Volák:30.12.2017 20:19

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>");
            }
Akceptované řešení
+5 Zkušeností
Řešení problému
 
Nahoru Odpovědět
30.12.2017 20:19
Avatar
Odpovídá na Jakub Volák
Michal Štěpánek:31.12.2017 9:28

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...

Nahoru Odpovědět
31.12.2017 9:28
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
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 12 zpráv z 12.