Dobrý den
Dělal jsem návštěvní knihu, která má výpis, tabulku i vypracování tabulky v jednom php souboru, vše funguje tedy až na to, že když stránku znovu načtu, tak se mi do databáze uloží opět ty stejné data, které jsem tam zadal minule.
Kód:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta name="generator" content="PSPad editor, www.pspad.com">
<title></title>
<link rel="stylesheet" type="text/css" href=style.css>
<link rel="stylesheet" type="text/css" href=style1.css>
</head>
<body>
<?php
include 'logo.php';
echo "<div id='zona'>REZEDA>NAVST. KNIHA</div>";
echo "<h3>Sdělte nám své dojmy, názory z webu, akcí apod.</h3>";
mysql_connect("localhost");
mysql_select_db("rezeda");
$ukaz="SELECT * FROM prispevky ORDER BY id DESC LIMIT 20";
$i=0;
if (empty($_REQUEST))
{
while($i<20)
{
$row=mysql_fetch_array(mysql_query($ukaz));
echo "<hr><br><b>".$row['nadpis']."</b><br>".$row['kontakt']."<br>".$row['text']."<br><div class='jmeno'>".$row['jmeno']." ".$row['datum']."<br></div>";
$i++;
}
?>
<form action="guestbook.php" method="post">
<hr>
<legend><h3>Sdělte nám svůj názor</h3></legend>
<table>
<tr>
<td>
jmeno/nick(povinne):
</td>
<td>
<input type="text" name="jmeno">
</td>
</tr>
<tr>
<td>
emailová adresa:
</td>
<td>
<input type="text" name="mail">
</td>
</tr>
<tr>
<td>
nadpis:
</td>
<td>
<input type="text" name="nadpis">
</td>
</tr>
<tr>
<td colspan=2>
<textarea rows="5" cols="60" name="text"></textarea>
</td>
</tr>
<tr>
<td>
<input type="submit">
<?php
echo "
<input type='hidden' name='kontrol' value= 'kontrol'>
";?>
</td>
</tr>
</table>
</form>
<?php
}
else
{
SetLocale(LC_ALL, "Czech");
$datum=StrFTime("%d.%m.%Y %H:%M:%S", Time());
$kontrol=$_POST['kontrol'];
$jmeno=$_POST['jmeno'];
$mail=$_POST['mail'];
$nadpis=$_POST['nadpis'];
$text=$_POST['text'];
$ip=$REMOTE_ADR;
$uloz="INSERT INTO prispevky (kontakt,jmeno,datum,nadpis,text,ip) VALUES ('$mail','$jmeno','$datum','$nadpis','$text','$ip');";
if($jmeno and $text)
{
//$query = "INSERT INTO prispevek (`datum`, `text`, `nadpis`,jmeno) VALUES ('$datumm', '$textt', '$nadpiss','$jmenoo');";
mysql_query($uloz);
echo"Váš příspěvek byl odeslán do databáze, prosím klikněte <a href='guestbook.php'>ZDE</a> pro návrat.";
mysql_close();
}
else
{
echo "zapoměl/a jsi zadat jméno nebo text klikni <a href='guestbook.php'>SEM</a>";
}
}
include 'zapati.php';
?>
</body>
jinak stránka je tato: http://rezeda.wz.cz/guestbook.php
Předem děkuji za radu.
Fórum › PHP
Problém s jednoduchou návštěvní knihou
Zdravim,
k zamezeni tohoto jevu se vetsinou pouziva presmerovani na tu stejnou stranku hned po vlozeni do databaze pomoci php funkce header(). Ta se ale musi volat driv, nez se na vystup posle jakykoli znak - tedy nejlip na prvnich radcich php souboru = prepsat vkladani tak, aby bylo na zacatku souboru a na konci kodu s vkladanim bylo header('Location: ta_stejna_stranka.php'); a exit;
Da se ale pouzit i jina vec a to session promenna. Po vlozeni se do $_SESSIONS['nejaky_index'] ulozi cele POST pole a pri vkladani kontrolovat shodu odeslanych hodnot s temi v session promenne. Pokud jsou stejne, tak nevkladat.
na zacatku souboru musi byt session_start();
pak v podstate staci
if($jmeno and $text)
{
// v zakladu se neuklada
$save = false;
// pro kazdou hodnotu z postu - odeslaneho formulare
foreach($_POST as $ind => $val){
// se zkontroluje rozdil oproti session
if($_SESSION['guestbook'][$ind] != $val){
$save = true;
// pokud je rozdil, muzeme ulozit
break;
// a ukoncit zbytecne bezici cyklus
}
}
// pokud muzeme ulozit
if($save){
mysql_query($uloz);
// po ulozeni nastavime aktualni prispevek v session
$_SESSION['gustbook'] = $_POST;
}
}
tohle bude fungovat jen na posledni vlozeny prispevek(slo by to rozsirit). Mozna by fungovalo i if($_SESSION['guestbook'] == $_POST), ale tohle jsem snad nikdy nepouzil, takze si tim nejsem jisty
skusil jsem doplnit to, co jsi napsal, ale narazil jsem na problém, že mi to teď nechce vypsat tabulku, což moc nechápu.
Kód:
session_start();
session_register('guestbook');
include 'logo.php';
echo "<div id='zona'>REZEDA>NAVST. KNIHA</div>";
echo "<h3>Sdělte nám své dojmy, názory z webu, akcí apod.</h3>";
mysql_connect("localhost");
mysql_select_db("rezeda");
$i=1;
$ukaz=mysql_query("SELECT * FROM prispevky ORDER BY id DESC");
$pocet_prispevku=mysql_num_rows($ukaz);
while($i==$pocet_prispevku)
{
$row=mysql_fetch_array($ukaz);
echo "<hr><br><b>".$row['nadpis']."</b><br>".$row['kontakt']."<br>".$row['text']."<br><div class='jmeno'>".$row['jmeno']." ".$row['datum']."<br></div>";
$i++;
}
if (empty($_REQUEST))
{
?>
<form action="guestbook.php" method="post">
<hr>
<legend><h3>Sdělte nám svůj názor</h3></legend>
<table>
<tr>
<td>
jmeno/nick(povinne):
</td>
<td>
<input type="text" name="jmeno">
</td>
</tr>
<tr>
<td>
emailová adresa:
</td>
<td>
<input type="text" name="mail">
</td>
</tr>
<tr>
<td>
nadpis:
</td>
<td>
<input type="text" name="nadpis">
</td>
</tr>
<tr>
<td colspan=2>
<textarea rows="5" cols="60" name="text"></textarea>
</td>
</tr>
<tr>
<td>
<input type="submit">
</td>
</tr>
</table>
</form>
<?php
}
else
{
$jmeno=$_POST['jmeno'];
$mail=$_POST['mail'];
$nadpis=$_POST['nadpis'];
$text=$_POST['text'];
$uloz="INSERT INTO prispevky (kontakt,jmeno,datum,nadpis,text,ip) VALUES ('$mail','$jmeno','$datum','$nadpis','$text','$ip');";
if($jmeno and $text)
{
// v zakladu se neuklada
$save = false;
// pro kazdou hodnotu z postu - odeslaneho formulare
foreach($_POST as $ind => $val){
// se zkontroluje rozdil oproti session
if($_SESSION['guestbook'][$ind] != $val){
$save = true;
// pokud je rozdil, muzeme ulozit
break;
// a ukoncit zbytecne bezici cyklus
}
}
// pokud muzeme ulozit
if($save){
SetLocale(LC_ALL, "Czech");
$datum=StrFTime("%d.%m.%Y %H:%M:%S", Time());
$ip=$REMOTE_ADR;
mysql_query($uloz);
// po ulozeni nastavime aktualni prispevek v session
$_SESSION['guestbook'] = $_POST;
}
}
}
mysql_close();
include 'zapati.php';
/*if($jmeno and $text)
{
//$query = "INSERT INTO prispevek (`datum`, `text`, `nadpis`,jmeno) VALUES ('$datumm', '$textt', '$nadpiss','$jmenoo');";
}
else
{
echo "zapoměl/a jsi zadat jméno nebo text klikni <a href='guestbook.php'>SEM</a>";
}
}
*/
?>
Ještě jednou se omlouvám, ale práce se session je pro mne celkem nová
Děkuji
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Navstevni kniha — založil Lukáš
Smajlíci v návštěvní knize — založil JMM
Problémy s knihou hostů — založil selkir
Pomoc s knihou na 3DS max — založil Hornster
Moderátoři diskuze