Autor Zpráva
Leni
Profil *
Ahoj, mám menší problém s výpisem dat z databáze. Mám úkol do školy - udělat jednoduchý vzkazník.

Mám jednoduchý formulář na zadání jména a textu vzkazu, hned po odeslání se mi vzkaz zobrazí po tím formulářem a když zadám další, tak to v pohodě funguje. Problém ovšem nastává, když stránku aktualizuju nebo vůbec otevřu znovu. Ten poslední vzkaz se zobrazí 2x a když to třeba znovu zavřu a otevřu, tak je tam 3x atd.

Vzkazy zapisuju do databáze pod id a když právě znovu otevřu tu stránku, tak ten poslední vzkaz se automaticky uloží pod následujícím id...

Kód vypadá takhle, poradíte mi někdo prosím?
<!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">
  <title>Návštěvní kniha</title>
  </head>
  <body>
    <?php 
       
$db="ukol";
$tb1="vzkazy";

$spojeni = mysql_connect("127.0.0.1:7188","root","" );
if (!$spojeni) { echo "Nelze se pripojit k databázovému serveru: " . mysql_error(); exit; }

mysql_query("CREATE DATABASE IF NOT EXISTS $db",$spojeni);
mysql_query("CREATE TABLE IF NOT EXISTS $db.$tb1(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, vzkaz VARCHAR(250)NOT NULL, jmeno VARCHAR(50)NOT NULL)ENGINE=MYISAM", $spojeni);

 $databaze=mysql_select_db($db, $spojeni);
if (!$databaze) { echo "Nelze se pripojit k databázi: " . mysql_error(); exit; }    
?>
    <form action="index.php" method="post">
      <table>
        <tr><td><label>Jméno:</label></td><td><input type="text" name="jmeno" value=""></td></tr>
        <tr><td><label>Vzkaz:</label></td><td><?php 

$jmeno=$_POST["jmeno"];
$action = $_POST['action'];
$vzkaz = $_POST['vzkaz'];

        echo "
<form action='index.php' method='post'>
        <textarea name='vzkaz' cols='40' rows='3'></textarea><br>
        <input type='submit' value='poslat vzkaz'>
      </form>
      "; 
      ?></td></tr>
      </table>
    </form>
<?php

if (isset($_POST["vzkaz"])) {
  mysql_query("INSERT INTO vzkazy (vzkaz,jmeno) VALUES ('".htmlspecialchars($_POST["vzkaz"])."','".$_POST["jmeno"]."')");
  
  $dotaz=mysql_query("SELECT * FROM vzkazy");
    if ($dotaz) {
      while ($zaznam=mysql_fetch_assoc($dotaz)) {
        echo "<div style='padding: 1ex; border: 1px solid green'>";
        echo "  <span style='color: red'>".$zaznam["jmeno"]."</span>: <span style='color: blue'>".$zaznam["vzkaz"]."</span>";
        echo "</div><br>";
      }
    }
}     
?>
  </body>
</html>
Kajman
Profil
Část s insertem dejte na úplný začátek a po vložení dat přesměrujte na tu samou stránku přes něco jako
header('Location: adresa-skriptu');
exit;
Leni
Profil *
Na začátek to dát nemůžu, potom mi to hází chybu. A s "header" mi to též hlásí chybu.
Honzaaa
Profil *
No tam jde o to, že když dáš f5, tak se ti pošle formulář znovu a znovu se provede script. proto se to řeší tak, že po insertu přesměruješ stránku, aby nebylo možné odeslat data znovu. Headers musíš posílat dřív, než začneš posílat data ven. To znamená, že musíš mít insert úplně na začátku scriptu, jak píše Kajman
juriad
Profil
Úplně na začátku znamená, že soubor bude začínat znaky <?php , vlastní doctype bude až za koncem kusu php kódu, který přidává záznam do databáze.
Leni
Profil *
Ahaa a ten "header" bude kde?
juriad
Profil
<?php
připoj_k_databázi();
if(vložit_záznam) {
  vlož_do_databáze(záznam);
  header('Location: script.php');
  exit();
}
?><!DOCTYPE ...>
....
<body>
<?php
vypsání_záznamů
?>
</body>
</html>
Leni
Profil *
Super, funguje to! Děkuju moc! :)

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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