Autor Zpráva
andrej54
Profil
Poradi niekto?
Som úplný začiatočník v PHP.
Skušam rozbehat jednoduché fórum, ale mi to padá:

Notice: Undefined variable: jump in c:\inet_srv\http\doc_root\forum\myforum.php on line 26

Notice: Undefined offset: 20 in c:\inet_srv\http\doc_root\forum\myforum.php on line 83


Zdrojak:

<?
$messagesPerPage=20; //počet správ na stránke
$scriptFileName="myforum.php"; //meno súboru so skriptom (meno tohto súboru)
$forumDataFile="forum.dat"; //súbor, do ktorého sa uložia príspevky
$killHtml=true; //zlikvidovať html značky (kvôli bezpečnosti)
$html_AllowBold=true; //povoliť značku <b> a </b>
$html_AllowItalic=true; //povoliť <i> a </i>
$html_AllowLinks=true; //povoliť <a ...> a </a>
$textBeforeNick="<tr bgcolor=\"#d1d1ee\"><td>"; //značky pred napísaním nicku
$textAfterNick="</td></tr>"; //značky po nicku
$textBeforeMessage="<tr bgcolor=\"#e0e0ff\"><td>"; //značky pred príspevkom
$textAfterMessage="</td></tr>"; //značky po príspevku
$textBeforeFooter="<tr><td><center>"; //značky pred ukončovacím blokom
$textAfterFooter="</center></td></tr>"; //značky po bloku

//úvod html dokumentu
$begin[1]="<html><head>";
$begin[2]="<title>Naše fórum</title>";
$begin[3]="</head>";
$begin[4]="<body bgcolor=\"white\" text=\"#555555\">";
$begin[5]="<table width=\"550\">";

//koniec html dokumentu
$end[1]="<tr><td>";
$end[2]="<form name=\"data\" METHOD=\"POST\" action=" . $scriptFileName . ">";
$end[3]="<input type=\"hidden\" name=\"jump\" value=\"$jump\"></input>";
$end[4]="<img src=\"images/clear_dot.gif\" width=130 height=1>nick:<br>";
$end[5]="<center><input type=\"text\" name=\"nick\" size=35></input></center>";
$end[6]="<img src=\"images/clear_dot.gif\" width=130 height=1>e-mail:<br>";
$end[7]="<center><input type=\"text\" name=\"mail\" size=35></input></center>";
$end[8]="<img src=\"images/clear_dot.gif\" width=130 height=1>text:<br>";
$end[9]="<center><textarea name=\"message\" cols=30 rows=5></textarea></center>";
$end[10]="<center><input type=\"submit\" value=\"Poslať\"></input></center>";
$end[11]="</td></tr></form>";
$end[12]="</table></center></body></html>";
?>


<?
if (!IsSet($jump)) $jump=0; //$jump - number of first message on page

for ($i=1; $i<=count($begin); $i++) echo ($begin[$i]);

$m=$messagesPerPage;

// if a message was added -->
if ((IsSet($message))&&($message!=""))
{
// create a good-looking date and timestamp
$datum=GetDate();
if ($datum["hours"]<10) $datum["hours"]="0".$datum["hours"];
if ($datum["minutes"]<10) $datum["minutes"]="0".$datum["minutes"];
$fdatum=$datum["hours"].":".$datum["minutes"]." - ".$datum["mday"].".".$datum["mon"].".".$datum["year"];

if ($killHtml) $message=str_replace("<","&lt;",$message);
if ($html_AllowBold) $message=str_replace("&lt;b>","<b>",$message);
if ($html_AllowItalic) $message=str_replace("&lt;i>","<i>",$message);
if ($html_AllowItalic || $html_AllowBold || $html_AllowLinks) $message=str_replace("&lt;/","</",$message);
if ($html_AllowLinks) $message=str_replace("&lt;a href=","<a href=",$message);
$message=str_replace("\r\n","<br>",$message);
$message=str_replace("\n","<br>",$message);
$nick=str_replace("<","&lt;",$nick);
$mail=str_replace("<","&lt;",$mail);

// save the whole message w/ nick, e-mail and timestamp
$subor=fopen($forumDataFile,"a");
flock($subor,2);
fputs($subor,$nick."\n");
fputs($subor,$mail."\n");
fputs($subor,$fdatum."\n");
fputs($subor,$message."\n");
flock($subor,3);
fclose($subor);
}

// print out and format messages
$vypis=file($forumDataFile);

$myEnd=$m-1;
if (($jump+$m)>=(count($vypis)/4)) $myEnd=((count($vypis)/4) - $jump);
for ($i=$jump*4; $i<=(($jump+$myEnd)*4); $i=$i+4)
{
if ($vypis[$i]!="")
{
echo($textBeforeNick);
echo("<a href='mailto:" . str_replace("\n","",$vypis[$i+1]) . "'>" . str_replace("\n","",$vypis[$i]) . "</a> - ");
echo($vypis[$i+2].$textAfterNick);
echo($textBeforeMessage);
echo($vypis[$i+3].$textAfterMessage);
}
}


echo ($textBeforeFooter);

if ($jump>0)
{
echo("<br><a href='". $scriptFileName. "?jump=0'><img src=\"images/move_leftleft.gif\" border=\"0\"></a>&nbsp;");
echo("<a href='". $scriptFileName. "?jump=".($jump-$m)."'><img src=\"images/move_left.gif\" border=\"0\"></a>&nbsp;&nbsp;");
}
else
{
echo("<br><img src=\"images/move_leftleft_deny.gif\" border=\"0\">&nbsp;");
echo("<img src=\"images/move_left_deny.gif\" border=\"0\">&nbsp;&nbsp;");
}

echo("Strana ".(($jump/$m)+1)." z ".(ceil((count($vypis)/4)/$m)));

if (($jump+$m)<(count($vypis)/4))
{
echo("&nbsp;&nbsp;<a href='". $scriptFileName. "?jump=".($jump+$m)."'><img src=\"images/move_right.gif\" border=\"0\"></a>&nbsp;&nbsp;");
echo("<a href='". $scriptFileName. "?jump=".(((ceil((count($vypis)/4) / $m))-1)*$m)."'><img src=\"images/move_rightright.gif\" border=\"0\"></a>");
}
else
{
echo("&nbsp;&nbsp;<img src=\"images/move_right_deny.gif\" border=\"0\">&nbsp;&nbsp;");
echo("<img src=\"images/move_rightright_deny.gif\" border=\"0\">");
}

echo ($textAfterFooter);

for ($i=1; $i<=count($end); $i++) echo ($end[$i]);

?>
peta
Profil
prvni radek kazdeho scriptu by mel zacinat:
error_reporting(E_ALL);

take by bylo moc fajn delsi zdrojak odkazovat jako link na *.txt , treba.

Jinak lepsi je pouzit SQL:
http://www.volny.cz/peter.mlich/www.htm#msub13
# www.volny.cz/peter.mlich (zdroj: minichat.txt 5k)
# www.volny.cz/peter.mlich (zdroj: minichat.sql)
se soubory byvaji nekdy potize, ale treba ti pomuze:
http://www.volny.cz/peter.mlich/www.htm#msub11
# peter-mlich.wz.cz (zdroj: PPguest4.txt 4k)

Tve chyby:
"Notice: Undefined variable: jump in c:\inet_srv\http\doc_root\forum\myforum.php on line 26"
Znamena, ze na radku 26 pracujes s nedefinovanou promennou $jump.
Coz je tento radek:
$end[3]="<input type=\"hidden\" name=\"jump\" value=\"$jump\"></input>";
A nikde pred nim nevidim nic typu:
$jump="neco";

"Notice: Undefined offset: 20 in c:\inet_srv\http\doc_root\forum\myforum.php on line 83"
To zase znamena, ze pracujes s nedefinovanym indexem cislo 20 na radku 83.
Coz je radek:
if ($vypis[$i]!="")
kde se ti tam dostane $i=20
if ($vypis[20]!="")
a $vypis[20] neni definovan.
Obvykle se ve for pouziva jen znamenko "<", takze je mozne, ze se dostanes za hranici souboru. Nebo se do $jump dostane prilis vysoka hodnota.
peta
Profil
Jeste mne tak napada, muzes si vypsat:
u chyby 1:
echo "<br>$jump";
u chyby 2:
echo "<br>".($jump*4); //minimum FOR
echo "<br>".(($jump+$myEnd)*4); //maximum FOR
echo "<br>$i: ".$vypis[$i]; // pred IFem ve FOR
Snadneji se tak zjisti, co tam vlastne je.
Toto téma je uzamčeno. Odpověď nelze zaslat.