Autor | Zpráva | ||
---|---|---|---|
Grecky Profil |
#1 · Zasláno: 6. 2. 2020, 17:48:34
Ahoj,
kvůli přechodu z 5,3 php na vyšší php 5,6 mi přestali stránky vyčítat data z databáze, po několika pokusech o nápravu se mi stále nedaří je zprovoznit. Dokázal by mi někdo říci jak upravit zdroják níže, aby zase fungovaly? Předem díky. <? header("Expires: ".GMdate("D,d M Y H:i:s")."GMT"); header ("Cache-Control: no-cache"); header ("Pragma: no-cache"); session_start(); include("phpdata.php"); include ("navigace.php"); $obj = new databaze; $obj->connect(); $obj->select_db("h_odborydpo_cz"); $set = @mysql_query ("SET NAMES cp1250"); $menu=0; if ( $logout == "true" ) { unset($_SESSION["sess_stat"]); unset($_SESSION["sess_id"]); unset($_SESSION["sess_fa_jmeno"]); unset($_SESSION["sess_fa_ulice"]); unset($_SESSION["sess_fa_mesto"]); unset($_SESSION["sess_fa_psc"]); unset($_SESSION["sess_do_jmeno"]); unset($_SESSION["sess_do_ulice"]); unset($_SESSION["sess_do_mesto"]); unset($_SESSION["sess_do_psc"]); unset($_SESSION["sess_email"]); unset($_SESSION["sess_telefon"]); unset($_SESSION["sess_firma"]); unset($_SESSION["sess_ico"]); unset($_SESSION["sess_dic"]); } if ( $prihlaseni == "true" ) { $s = MySQL_Query("SELECT * FROM zakaznici WHERE login = '$login' && password = '$password'"); $pocet = MySQL_Num_Rows($s); if ( $pocet >0 ) { $data = MySQL_Fetch_Array($s); $sess_stat = "true"; $sess_id = $data["id"]; session_register("sess_stat"); session_register("sess_id"); session_register("sess_login"); session_register("sess_password"); session_register("sess_fa_jmeno"); session_register("sess_stat"); session_register("sess_fa_jmeno"); session_register("sess_fa_ulice"); session_register("sess_fa_mesto"); session_register("sess_fa_psc"); session_register("sess_do_jmeno"); session_register("sess_do_ulice"); session_register("sess_do_mesto"); session_register("sess_do_psc"); session_register("sess_email"); session_register("sess_telefon"); session_register("sess_firma"); session_register("sess_ico"); session_register("sess_dic"); $sess_stat = "true"; $sess_id = $data["id"]; $sess_login = $data["login"]; $sess_password = $data["password"]; $sess_fa_jmeno = $data["fa_jmeno"]; $sess_fa_ulice = $data["fa_ulice"]; $sess_fa_mesto = $data["fa_mesto"]; $sess_fa_psc = $data["fa_psc"]; $sess_do_jmeno = $data["do_jmeno"]; $sess_do_ulice = $data["do_ulice"]; $sess_do_mesto = $data["do_mesto"]; $sess_do_psc = $data["do_psc"]; $sess_email = $data["email"]; $sess_telefon = $data["telefon"]; $sess_firma = $data["firma"]; $sess_ico = $data["ico"]; $sess_dic = $data["dic"]; } else { $error = "Chybně zadané jméno nebo heslo!"; } } if($_SESSION["sess_stat"] == "true") $user = htmlspecialchars($_SESSION["sess_login"]); else $user = ""; $sql = MySQL_Query("SELECT * FROM barvy WHERE id = '1'"); $barva = MySQL_Fetch_Array($sql); ?> |
||
lionel messi Profil |
Grecky:
Napríklad funkcia session_register je od PHP 5.4.0 odstránená, takže ju po prechode nemôžeš použiť (už v PHP 5.3.0 bola označená ako zastaraná). Ak vieš, že isté funkcie sú zastaralé, je vhodné sa im vyhýbať - znížiš tak riziko, že ti zo dňa na deň prestane fungovať kód. Namiesto session_register("sess_stat"); použi $_SESSION["sess_stat"] = $sess_stat; a analogicky zvyšok (po nastavení session pristupuj k $_SESSION["sess_do_ulice"], nie k $sess_do_ulice). Navyše používaš mysql_* funkcie. Tie síce ešte fungujú, tiež sú však označené ako zastarané a Jan Tvrdík tu kdesi odkazoval na manuál, kde sa písalo, že PHP 8 ich už nebude obsahovať. Prečítaj si trebárs o mysqli.Používať len tak operátor @ na potlačenie chýb tiež nie je najlepší nápad a zamyslel by som sa nad nutnosťou používať tzv. short_open_tag (<? namiesto <?php). Je to závislé na konfigurácii servera a teoreticky môže byť jedného dňa takisto označené ako zastarané/odstránené (a tuším to koliduje s XML tagom).
|
||
Tomášeek Profil |
#3 · Zasláno: 6. 2. 2020, 19:36:09
lionel messi:
„mysql_* funkcie. Tie síce ešte fungujú, tiež sú však označené ako zastarané a Jan Tvrdík tu kdesi odkazoval na manuál, kde sa písalo, že PHP 8“ Nikoliv, jsou odstraněné v PHP7. Čili nefungují. Grecky: Upgrade z jedné prehistorické verze na druhou prehistorickou. Proč proboha? |
||
lionel messi Profil |
#4 · Zasláno: 6. 2. 2020, 20:39:09
Tomášeek:
„Nikoliv, jsou odstraněné v PHP7. Čili nefungují.“ Ďakujem za opravu. Mimochodom, Jan Tvrdík v predmetnom článku správne spomína PHP 7. |
||
Grecky Profil |
Tomášeek:
Jde o to, že to je odborový web s hromadou článku a vyjádření a náš předseda trvá na jeho zachování a dostupnosti i když jsem vytvořil nový. Chápu, že je to úplně zbytečné a že za nějaký čas bude problém obdobný, ale domnívám se, že tou dobou na jeho zachování nikdo nebude trvat. Avšak teď ho musím zprovoznit a nechci ho přepisovat celý od píky, když nebude absolutně nijak využíván. Kór když je to buch ví jak upravený eshop... Jde mi pouze o to, aby fungoval do doby než naděje jeho soudný den. Díky za rady vyzkouším a snad se mi to konečně podaří. |
||
Tomášeek Profil |
#6 · Zasláno: 6. 2. 2020, 21:05:35
Grecky:
Mě to je celkem jedno. Jen, že podpora (aktualizace) PHP 5.6 byla ukončena v roce 2018 a od té doby je tedy potenciálně nebezpečná. Nemluvě o hostinzích, sllušný hosting ji za chvíli nebude mít ani v nabídce. Pokud chceš provozovat archaismy, pak nechápu, proč řešíš upgrade na PHP 5.6 a nenecháš to na PHP 5.3. Vyjde to IMHO nastejno. No nic, pokud chceš upgradovat, hodně štěstí. |
||
Davex Profil |
#7 · Zasláno: 6. 2. 2020, 21:43:09
Grecky:
Pozor také na to, že v PHP 5.6 je výchozí kódování UTF-8 a některé funkce, jako třeba htmlspecialchars bez specifikovaného kódování, nemusí s daty v kódování Windows 1250 pracovat správně (například vrací prázdný řetězec).
|
||
Grecky Profil |
Davex:
To je specifikované v dalších souborech se, kterými to pracuje s tím by neměl byt problém. Přepsal jsem vše dle výše uvedeného, ale ještě jsem zjistil problém v datovém souboru s příkazy mysql. Většina šla nahradit mysqli, ale zbyly mi tři funkce, se kterými si nevím rady. Pak už by to snad mělo opět fungovat... function tables_db($db) { $this->list_tb = mysql_list_tables($db); return $this->list_tb; } function list_table() { $this->pocet = mysqli_num_rows($this->list_tb); for ($i = 0; $i < $this->pocet; $i++): $this->tb_names[$i] = mysql_tablename($this->list_tb, $i); endfor; return $this->tb_names; } function get_num_rows() { return $this->num_rows = mysql_num_rows($this->result); } |
||
lionel messi Profil |
#9 · Zasláno: 7. 2. 2020, 21:14:00
Grecky:
„Většina šla nahradit mysqli“ Aj mysql_num_rows sa dá bez problémov nahradiť mysqli_num_rows. :-) Ku zvyšku: Názvy tabuliek v databáze si do poľa vieš naskladať pomocou mysqli_query a SQL príkazu SHOW TABLES FROM databaza , ten ti vráti riadky s názvami tabuliek. S výsledkom môžeš pracovať ako s akýmkoľvek iným výsledkom SQL pomocou funkcií ako mysqli_fetch_assoc či mysqli_fetch_all.
|
||
Grecky Profil |
#10 · Zasláno: 8. 2. 2020, 01:49:36
lionel messi:
Děkuji, teoreticky chápu co se mi snažíš říct, ale prakticky to neumím napsat, aby to fungovalo... :-/ |
||
lionel messi Profil |
Grecky:
Nejako takto: function tables_db($db, $conn) //spojenie k Mysqli predáme funkcii ako parameter { $query = "SHOW TABLES FROM $db"; //vytvoríme SQL príkaz $this->list_tb = mysqli_query($conn, $query); //vykonáme SQL príkaz, return nepotrebujeme, výsledok sa nám uloží do $this->list_tb } function list_table() { while ($row = mysqli_fetch_row($this->list_tb)): $this->tb_names[] = $row[0]; endwhile; //znovu nepotrebujeme return, po zavolaní funkcie môžeme pristupovať k $this->tb_names a v tomto poli budeme mať všetky tabuľky, ale keď chceš, môžeš ho tam dať } function get_num_rows() { return $this->num_rows = mysqli_num_rows($this->result); } PS: Čo ťa vedie k miešaniu procedurálneho a objektového kódu? |
||
Tomášeek Profil |
#12 · Zasláno: 8. 2. 2020, 15:11:38
lionel messi:
„ $this->list_tb = mysqli_query($conn); “
Tohle fungovat nebude :-) |
||
Grecky Profil |
#13 · Zasláno: 8. 2. 2020, 16:42:32
Tomášeek:
Bohužel máš pravdu |
||
lionel messi Profil |
#14 · Zasláno: 8. 2. 2020, 18:01:20
Tomášeek:
> lionel messi: > „ $this->list_tb = mysqli_query($conn); “
> Tohle fungovat nebude :-) Ďakujem za upozornenie, doplnil som druhý parameter. |
||
Tomášeek Profil |
#15 · Zasláno: 8. 2. 2020, 20:14:49
Grecky:
„Bohužel máš pravdu ��“ A napadlo tě otevřít dokumentaci a podívat se, proč to nebude fungovat? Škoda, že to lionel messi opravil, nápovědu jsi měl... |
||
Časová prodleva: 4 roky
|
0