Problém s jednoduchou návštěvní knihou – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Problém s jednoduchou návštěvní knihou – PHP – Fórum – Programujte.comProblém s jednoduchou návštěvní knihou – PHP – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
hajnis0
Newbie
7. 1. 2011   #1
-
0
-

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.

Nahlásit jako SPAM
IP: 93.153.11.–
Reklama
Reklama
insider0
Věrný člen
7. 1. 2011   #2
-
0
-

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.

Nahlásit jako SPAM
IP: 147.32.96.–
I don't want to see you go,[br] The sky is over[br] Even though we can't afford[br] The sky is over,[br] The sky is over us.[br][br] CIVILIZATION IS OVER
hajnis0
Newbie
7. 1. 2011   #3
-
0
-

To insider : Nemohl bys prosím tě rozvést více tu myšlenku se session? základ chápu, jenže stále nemohu přijít na algoritmus předávání hodnot v session a porovnávání. Děkuji

Nahlásit jako SPAM
IP: 93.153.11.–
insider0
Věrný člen
8. 1. 2011   #4
-
0
-

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

Nahlásit jako SPAM
IP: 147.32.96.–
I don't want to see you go,[br] The sky is over[br] Even though we can't afford[br] The sky is over,[br] The sky is over us.[br][br] CIVILIZATION IS OVER
hajnis0
Newbie
8. 1. 2011   #5
-
0
-

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

Nahlásit jako SPAM
IP: 93.153.11.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 43 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý