Autor Zpráva
Argonisius
Profil
Mám návštěvní knihu s databází, ale při aktualizaci stránky se mi opět zašle stejný příspěvek do databáze. Chtěl bych vás poprosit o radu, jak to udělat, aby se stejný příspěvek nepřidal. Díky.
Radek9
Profil
Myslím, že to jde pomocí unset a na 100% to jde pomocí přesměrování.
Argonisius
Profil
??? v těhle oblastech jsem laik, co to je?
Darkweaver
Profil
Podívej se sem
Taps
Profil
Argonisius
http://www.mazlo.org/blog/clanek/83-Komentare-Jak-zabranit-opakovanemu-zapisu-do-databaze-plus-bonus-navic
Argonisius
Profil
Tak... zkoušel jsem to, ale když to tam dám, tak mi nefungují některá hlášení. Nevíte, kam to strčit aby to šlo?
            <?php 
            
            // Určení proměnných.
            $hlaseni = "";
            $obsah_prispevku = "";
           
            // Zde je připojení k databázi.
           
 
            // Otestování, zda se připojení podařilo.
            if (!$db_spojeni)
            {
              $hlaseni ='Připojení k databázi se nezdařilo.';
              exit();
            }

            // Správné nastavení češtiny.
            $objekt_vysledku = mysqli_query($db_spojeni, "SET NAMES 'cp1250'");
            if (!$objekt_vysledku)
            {
              echo 'Nepodařilo se nastavit češtinu.';
              exit();
            }

            // Test, jestli přišla data z formuláře.
            if (isset($_POST['zprava']) and (($_POST['jmeno']=="jmeno1" and $_POST['heslo']=="heslo1") or ($_POST['jmeno']=="jmeno2" and $_POST['heslo']=="heslo2")) and trim($_POST['zprava']) !== '')
            {
            // Vytvoření SQL příkazu typu INSERT.
            $sql_prikaz = 
            "INSERT INTO kniha_navstev(datum,jmeno,zapis) "
            ."VALUES(NOW(),'"
            .mysqli_real_escape_string($db_spojeni,$_POST['jmeno'])
            ."','"
            .mysqli_real_escape_string($db_spojeni,$_POST['zprava'])
            ."')"
            ;

            // Zaslání SQL příkazu do databáze.
            $objekt_vysledku = mysqli_query($db_spojeni, $sql_prikaz);
 
            if (!$objekt_vysledku)
            {
              $hlaseni = 'Nepodařilo se poslat SQL příkaz.';
              exit();
            }
            $hlaseni = 'Zápis přidán.';
          }
          else if (isset($_POST['zprava']))
          {
            $hlaseni = 'Vyplnili jste špatně některou z kolonek!';
            $obsah_prispevku = $_POST['zprava'];
        }

            // Odpojení od databáze.
            if ($db_spojeni)
              mysqli_close($db_spojeni);
              
            ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="cs" xml:lang="cs">

<head>
</head>

         <?php echo $hlaseni; ?>
	       <form name="aktuality" action="" method="post" class="aktuality_pridat_prispevek">
            Jméno: <input type="text" name="jmeno" />
            Heslo: <input type="password" name="heslo" />
            <textarea id="elm1" name="zprava" rows="15" cols="80" style="width: 80%"><?php echo $obsah_prispevku; ?></textarea>
	          <input type="submit" name="uložit" value="Uložit" />
	          <input type="reset" name="reset" value="Reset" />
         </form>
</body>
</html>



Díky.
Argonisius
Profil
Tak, udělal jsem to podle návodu a toto je výsledek: ale nefunguje! Pomozte prosím, nevím kde je chyba.
   // Test, jestli přišla data z formuláře.
   if (isset($_POST['zprava']) and (($_POST['jmeno']=="jmeno1" and $_POST['heslo']=="heslo1") or ($_POST['jmeno']=="jmeno2" and $_POST['heslo']=="heslo2")) and trim($_POST['zprava']) !== '')
      {
         // Vytvoření SQL příkazu typu INSERT.
         $sql_prikaz = 
         "INSERT INTO kniha_navstev(datum,jmeno,zapis) "
         ."VALUES(NOW(),'"
         .mysqli_real_escape_string($db_spojeni,$_POST['jmeno'])
         ."','"
         .mysqli_real_escape_string($db_spojeni,$_POST['zprava'])
         ."')"
         ;

            // Zaslání SQL příkazu do databáze.
            $objekt_vysledku = mysqli_query($db_spojeni, $sql_prikaz);
               if ($objekt_vysledku)
                  {
                     header("Location: aktuality_pridat_prispevek");
                     exit();
                  }       
               if (!$objekt_vysledku)
                  {
                     $hlaseni = 'Nepodařilo se poslat SQL příkaz.';
                     exit();
                  }
        $hlaseni = 'Zápis přidán.';
      }
      else if (isset($_POST['jmeno']) and isset($_POST['heslo']))
         {
            $hlaseni = 'Špatné přihlašovací údaje!';
            $obsah_prispevku = $_POST['zprava'];
         }
      if (isset($_POST['zprava']) and trim($_POST['zprava']) == '')
         {
            $hlaseni = 'Nemůžete vložit prázdný příspěvek!';
            $obsah_prispevku = $_POST['zprava'];
         }



Moc díky za pomoc.
Alphard
Profil
Argonisius:
header("Location: aktuality_pridat_prispevek");
Adresa není kompletní, měla by být kompletní a bylo by dobré posílat kód 303.
Tady je vzor:

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: