| 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: 11 let
|
|||
0