Autor | Zpráva | ||
---|---|---|---|
Leni Profil * |
#1 · Zasláno: 9. 3. 2013, 15:43:45
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 |
#2 · Zasláno: 9. 3. 2013, 16:35:15
Čá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 * |
#3 · Zasláno: 9. 3. 2013, 17:01:08
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 * |
#4 · Zasláno: 9. 3. 2013, 17:11:09
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 |
#5 · Zasláno: 9. 3. 2013, 17:14:34
Ú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 * |
#6 · Zasláno: 9. 3. 2013, 17:16:59
Ahaa a ten "header" bude kde?
|
||
juriad Profil |
#7 · Zasláno: 9. 3. 2013, 17:26:06
<?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 * |
#8 · Zasláno: 9. 3. 2013, 17:33:03
Super, funguje to! Děkuju moc! :)
|
||
Časová prodleva: 11 let
|
0