Autor | Zpráva | ||
---|---|---|---|
walkig Profil |
Ahoj.
Snad mi někdo poradíte. Snažím se naučit php a narazil jsem na menší problém. Zkouším načítáni obsahu z databáze. Mám jeden hlavní soubor index.php, který je napojený na nacti-obsah.php, který je zase napojený přímo na databázi. Můj problém je v tom, že když zobrazím úvodní stranu index.html vypíše mi to tohle Notice: Undefined index: page in GW:\myprograms\xampp\htdocs\pokus\nacist-obsah.php on line 3 Ten kod v nacti-obsah vypadá takhle - <?php $text = !empty($_GET['page']) ? $_GET['page'] : 'index'; if (file_exists($page.'.php')) { require $page.'.php'; } else { require 'error404.php'; } $dotaz='SELECT * FROM texty WHERE urlnazev="'.$php.'"'; $vysledek=mysql_query($dotaz); $zaznam=mysql_fetch_array($vysledek); $nazev=$zaznam['nazev']; $text=$zaznam['text']; $klicovaslova=$zaznam['klicovaslova']; $title=$zaznam['nazev']; $metapopis=$zaznam['metapopis']; ?> Vím, že to není úplně chyba jen není definovaný ten index, ale at zkouším co zkouším neustále mi to vypisuje tohle. Díky moc za rady. |
||
LaMMa Profil |
Ten druhy riadok mas dobre? nechcel si ho mat takto:
$page = (isset($_GET['page']) && !empty($_GET['page']))? strtolower($_GET['page']) : 'index'; Tym sa zbavis aj tej notice |
||
walkig Profil |
Jo měl jsem to špatně díky..ale když jsem to přepsal začalo to blbnout úplně a psát Notice: A session had already been started - ignoring session_start() in GW:\myprograms\xampp\htdocs\pokus\nacist-obsah.php on line 3
Zkusil jsem to přepsat takhle - $php=trim(htmlspecialchars(strip_tags($_GET['page']))); if($php=="") { $php="index"; }; |
||
LaMMa Profil |
to $php presuň do súboru nacist-obsah.php a vymaž z index.php aj s tou podmienkou... takto:
$page = (isset($_GET['page']) && !empty($_GET['page']))? strtolower($_GET['page']) : 'index'; $php=mysql_real_escape_string($page); if (file_exists($page.'.php')) { require $page.'.php'; } else { require 'error404.php'; } ..... atď. táto notice: A session had already been started - ignoring session_start() hovorí, že už si session_start() zavolal a nemala by byt volaná viac krát. |
||
walkig Profil |
#5 · Zasláno: 7. 7. 2012, 11:14:03
No, ale jde o to, že já to mám celou dobu v nacist-obsah a vypisuje mi to notice když otevřu index.
|
||
Alphard Profil |
#6 · Zasláno: 7. 7. 2012, 11:17:18
[#2]
empty negeneruje chybové hlášky, ta podmínka isset && emtpy je zbytečně složitá. Příčina vypsané notice bude spíš v bordelu v proměnných, např. ukládání to $text, používání $page. [#3] Když vám chybová hláška zmiňuje problém se startování sessions, není potřeba dál vymýšlet router. [#4] $php se následně používá v SQL dotazu. Escapujete pro chybný kontext.
|
||
LaMMa Profil |
#7 · Zasláno: 7. 7. 2012, 11:24:22
|
||
walkig Profil |
Ok.
Tady je celý index. <?php session_start(); require 'nacist-obsah.php'; ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=windows-1250"> <meta name="generator" content="PSPad editor, www.pspad.com"> <meta name="description" content="<?php echo $metapopis; ?>" /> <meta name="keywords" content="<?php echo $klicovaslova; ?>" /> <title><?php echo $title;?></title> </head> <body> <h2> <?php echo $nazev;?> </h2> <p> <?php echo $text;?> </p> <h2> <a href="index.php">Uvod</a> <br> <a href="index.php?page=o-nas">O nas</a> <br> <a href="index.php?page=kontakt">Kontakt</a> <br> <a href="index.php?page=galerie">Galerie</a> <br> <a href="index.php?page=odkazy">Odkazy</a> </h2> </body> </html> Připojení k databázi. <?php $host='localhost'; $uzivatel='root'; $heslo=''; $databaze='breaking'; $db = mysql_connect($host, $uzivatel, $heslo) or die('Neda se pripojit k serveru.'); mysql_select_db($databaze ,$db) or die(mysql_error($db)); mysql_query('SET NAMES UTF8'); mysql_query('SET COLLATION_CONNECTION=utf8_czech_ci'); ?> A nacist-obsah. <?php require "pripojeni.php"; $page = (isset($_GET['page']) && !empty($_GET['page']))? strtolower($_GET['page']) : 'index'; $php=trim(htmlspecialchars(strip_tags($page))); if (file_exists($page.'.php')) { require $page.'.php'; } else { require 'error404.php'; } $dotaz='SELECT * FROM texty WHERE urlnazev="'.$php.'"'; $vysledek=mysql_query($dotaz); $zaznam=mysql_fetch_array($vysledek); if($zaznam['nazev']!="") { $nazev=$zaznam['nazev']; $text=$zaznam['text']; $klicovaslova=$zaznam['klicovaslova']; $title=$zaznam['nazev']; $metapopis=$zaznam['metapopis']; }; ?> Je to jen jednoucha stránka beez stylů a čehokoli. Na ní si to trénuju. Jen připomínám, že s php dělám zhruba podle učebnice pro začátečníky takže moc velký profík v tom zase nejsem. I když ted se mi zdá divná další věc. Zrovna se učím nastavovat cookie a zdroják z učebnice, který jsem zkopíroval mi vypisuje stejné nedefinované indexy a kodování jazyka taky blbne. Tak bud mám blbě nastavený server nebo je špatně napsaná učebnice a zbytečně mě mate. |
||
LaMMa Profil |
<?php require "pripojeni.php"; $page = (!empty($_GET['page'])? strtolower($_GET['page']) : 'index'; $php=mysql_real_escape_string($page); if (file_exists($page.'.php')) { require $page.'.php'; } else { require 'error404.php'; } $dotaz='SELECT * FROM texty WHERE urlnazev="'.$php.'" LIMIT 1'; $vysledek=mysql_query($dotaz); $zaznam=mysql_fetch_array($vysledek); if(isset($zaznam['nazev'])) { $nazev=$zaznam['nazev']; $text=$zaznam['text']; $klicovaslova=$zaznam['klicovaslova']; $title=$zaznam['nazev']; $metapopis=$zaznam['metapopis']; }; ?> nedefinovane indexy ti to pise, pokial sa snazis dostat k neexistujucemu klucu v poli...Mozes si tam dat kontrolu if (isset($pole['kluc']))... |
||
walkig Profil |
Díky moc už mi to jede :-) Uf. Ještě by mě zajímalo jak předělat kod u cookies. V učebnici je to napsáno takto a opět mi tam skáčou notice hlášky jako předtím.
<?php if($_COOKIE['zeme']!="") { $zeme=$_COOKIE['zeme']; } if($_POST['zeme']!=""){ setcookie('zeme',$_POST['zeme'],time()+3600); $zeme=$_POST['zeme']; } if($zeme=="") { $zeme='Česko'; }; ?> <form action="" method="post"> <label for="zeme">Zmenit zemi:</label> <select name="zeme" id="zeme" /> <option value="Cesko">Cesko</option> <option <?php if($zeme=="Slovensko") { echo 'selected="selected"'; }; ?> value="Slovensko">Slovensko</option> <option <?php if($zeme=="Italie") { echo 'selected="selected"'; }; ?> value="Italie">Itlie</option> <option <?php if($zeme=="Francie") { echo 'selected="selected"'; }; ?> value="Francie">Francie</option> </select> <input type="submit" value="zobrazit pocasi" /> </form> <?php echo '<br />Zajma Vas pocasi v krajine: <strong>'.$zeme.'</strong><br /><br />Aktualni pocasi je ...'; ?> Dokázal jsem to upravit do téhle podoby aby notice zmizelo, ale ted nevím jak zapsat nastavení COOKIES. <?php $zeme = !empty($_COOKIE['zeme']) ? $_COOKIE['zeme'] : 'zeme'; $zeme = !empty($_POST['zeme']) ? $_POST['zeme'] : 'zeme'; if($zeme=="") { $zeme='Česko'; }; ?> |
||
Tori Profil |
#11 · Zasláno: 7. 7. 2012, 18:51:52
walkig:
„V učebnici je to napsáno takto“ Jen ze zvědavosti: O kterou učebnici jde? |
||
walkig Profil |
#12 · Zasláno: 7. 7. 2012, 18:54:33
Programování www stránek pro úplné začátečníky.
|
||
LaMMa Profil |
walkig:
Dokázal jsem to upravit do téhle podoby aby notice zmizelo, ale ted nevím jak zapsat nastavení COOKIES. $zeme = !empty($_COOKIE['zeme']) ? $_COOKIE['zeme'] : 'zeme'; $zeme = !empty($_POST['zeme']) ? $_POST['zeme'] : 'zeme'; Máš to blbo, pretože, ak budeš mať v cookie nejakú zem uloženú a neodošleš $_POST, prepíše sa ti to defaultnou hodnotou 'zeme', čo je tiež zle, pretože si tam chcel mať Česko. Nechaj si tento zápis ako si mal, na začiatok nastavíš premennú $zeme a tie podmienky prepíš s tým !empty()...Neupravil som ich, to zvládneš :) $zeme = 'Česko'; if($_COOKIE['zeme']!="") { $zeme=$_COOKIE['zeme']; } if($_POST['zeme']!=""){ setcookie('zeme',$_POST['zeme'],time()+3600); $zeme=$_POST['zeme']; } a tento riadok: if($zeme=="") { $zeme='Česko'; }; môžeš potom zmazať
|
||
Časová prodleva: 5 dní
|
|||
walkig Profil |
#14 · Zasláno: 12. 7. 2012, 12:43:29
Díky moc za rady. Už to mám vyřešené. Ted ještě řeším drobný problém s nahráním databáze na web. Zkouším svůj pokusný web dát na webzdarma, ale když se snažím importovat tabulky z databáze na mém počítači tak mi to vypisuje tuhle hlášku
SQL-dotaz: -- phpMyAdmin SQL Dump -- version 3.4.5 -- http://www.phpmyadmin.net -- -- Počítač: localhost -- Vygenerováno: Čtv 12. čec 2012, 12:40 -- Verze MySQL: 5.5.16 -- Verze PHP: 5.3.8 SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO" MySQL hlásí: Dokumentace #1231 - Variable 'sql_mode' can't be set to the value of '' |
||
Časová prodleva: 3 roky
|
|||
Libin88 Profil |
Ahojte, mám podobný problém jako walkig. Jedná se o knihu programování stránek pro začátečníky- Martin Mikuľák(Kniha je dobře vysvětlena, bohužel je v ní ale několik chyb, které jsem už musel různě dohledávat. :( ) . Jde taky o načítání obsahu z databáze. S hlavním souborem index.php a na něj je napojený připrav-obsah.php, který je napojený přímo na databázi.Jedná se nejspíš o stejný script co tu řešil walkig. jen místo nacti-obsah.php je připrav-obsah.php.
Ale i když jsem to tady řádně prozkoumal a prozkoušel tak mám pořád nějaký notice. Bohužel si už nevím rady, mohl by mi někdo poradit? Notice: Undefined index: page in C:\xampp\htdocs\extrawindows\kniha\ts\priprav-obsah.php on line 3 <?php require "pripojeni.php"; $php=trim(htmlspecialchars(strip_tags($_GET['page']))); if($php=="") { $php="index"; }; $dotaz='SELECT * FROM texty WHERE urlnazev="'.$php.'"'; $vysledek=mysql_query($dotaz); $zaznam=mysql_fetch_array($vysledek); if($zaznam['nazev']!="") { $nazev=$zaznam['nazev']; $text=$zaznam['text']; $klicovaslova=$zaznam['klicovaslova']; $title=$zaznam['nazev'].' | Programování WWW stránek pro začátečníky'; $metapopis=$zaznam['metapopis']; }; if($nazev=="") {echo '<html><meta http-equiv="REFRESH" content="0;index.php? // ZOBRAZENÍ TEXTU PRO NEEXSTUJÍCI STRÁNKU page=error404"></html>'; die();}; ?> |
||
lionel messi Profil |
#16 · Zasláno: 31. 3. 2015, 18:37:54
Libin88:
„Notice: Undefined index: page in C:\xampp\htdocs\extrawindows\kniha\ts\priprav-obsah.php on line 3“ Hláška hovorí o neexistencii $_GET['page'] , čo možno jednoducho vyriešiť (použitím podmienky, napr. v skrátenej podobe ternárneho operátora):
$php = isset($_GET['page']) ? trim(htmlspecialchars(strip_tags($_GET['page']))) : ""; |
||
Libin88 Profil |
#17 · Zasláno: 31. 3. 2015, 18:40:39
Díky moc, funguje.
|
||
juriad Profil |
#18 · Zasláno: 31. 3. 2015, 19:49:11
Libin88:
Momochodem, to, že rada od lionela messiho zafungovala neznamená, že je to správně. V tom zdrojáku je hromada chyb: 1) trim(htmlspecialchars(strip_tags( vůbec není potřeba; správně je jen mysql_real_escape_string; žádná jiná funkce k escapování neslouží.
2) Za if se nepíše středník 3) Nepoužívej funkce mysql_*; jsou zastaralé a v další velké verzi PHP již budou odstraněné. 4) Podmínka na 11. řádku je vadná. Pokud dotaz nevrátí žádný záznam, tak $zaznam bude FALSE a ten samozřejmě nelze indexovat. 5) Na 18. a 19. řádku přesměrováváš hodně nešikovně (použít bys měl PHP funkci header) na chybovou stránku, což způsobí, že pokud byl překlep v URL, tak uživatel o původně napsanou URL přijde. 6) Komentář na 18. řádku je součástí řetězcového literálu a tedy ta adresa není platná. Je-li toto autentický zdrojový kód z té knihy, tak bych ji rozhodně nedoporučil. Dost pravděpodobně si zažiješ tyto chybné konstrukce. |
||
Časová prodleva: 10 let
|
0