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"; 
}; 
Ale zase mi to vypisuje ten notice. Mám v tom ted trošku guláš tak sorry, že s tím takhle otravuju. Tenhle druh podmínek mi dělá trošku potíže, protože mi to pokaždé vypisuje notice hlášky.
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
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
[#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
walkig:
Hoď sem celý kód, nie takto po kúskoch

[#6] Alphard
Jo, pravda :)
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
walkig:
V učebnici je to napsáno takto
Jen ze zvědavosti: O kterou učebnici jde?
walkig
Profil
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ť
walkig
Profil
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 '' 
Nevím kde mám co přenastavit.
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
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
Díky moc, funguje.
juriad
Profil
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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: