Autor | Zpráva | ||
---|---|---|---|
ludvalb Profil |
#1 · Zasláno: 2. 10. 2019, 20:32:01
Ahoj, narazil jsem na problém kdy mám obsah na webu nekorektní s daty načítanými z databáze.
Jde o to, že mám formulář, kterým přepisuji pomocí php data v mysql databázi. Když provedu změnu pomocí formuláře vše se provede správně (v databázi jsou správná data), ale v prohlížeči po opětovném načtení webu vidím stále data před úpravou. pokud použiju v chromu ctrl + shirt + R pak konečně vidím korektní data. Nevěděl by jste někdo jak toto vyřešit? Zkoušel jsem různé prohlížeče jak na WIN tak MAC a všude se mi to chová stejně. Děkuji. |
||
Ikki Profil |
#2 · Zasláno: 2. 10. 2019, 20:45:00
Po odeslání obnov stránku prostřednictvím redirectu.
|
||
Kajman Profil |
#3 · Zasláno: 2. 10. 2019, 21:53:21
+ zakažte na stránce s formulářem cachování
|
||
ludvalb Profil |
#4 · Zasláno: 2. 10. 2019, 22:58:15
Dekuji. Muzete me prosim poradit jak na to?
|
||
Kajman Profil |
#5 · Zasláno: 3. 10. 2019, 10:15:11
Ukaže kód, kterým generujete formulář a kterým ho zpracováváte, možná tam bude stačit malá změna.
|
||
ludvalb Profil |
#6 · Zasláno: 3. 10. 2019, 10:34:32
Formulář je zde:
kosik.php <?php include "db.php"; ?> <!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <meta charset="utf-8"> <meta http-equiv="Cache-control" content="public"> <title></title> </head> <body> <div class="container" id="contact" name="contact"> <div class="row"> <table border="1px"> <tr> <th style="text-align:center; margin:10px; padding:10px;">Typ</th> <th style="text-align:center; margin:10px; padding:10px;">Velikost</th> <th style="text-align:center; margin:10px; padding:10px;">ID-kod</th> <th style="text-align:center; margin:10px; padding:10px;">Počet</th> <th style="text-align:center; margin:10px; padding:10px;">Smazat</th> </tr> <?php $ip_adresa=$_SERVER['REMOTE_ADDR']; $query = "SELECT * from kosik WHERE IP='".$ip_adresa."'"; $result = mysql_query($query, $connection) or die(mysql_error()); for ($i = 0;$i< mysql_num_rows($result);$i++) { $cookieid = mysql_result($result, $i, "cookieid"); $pocet = mysql_result($result, $i, "pocet"); $velikost = mysql_result($result, $i, "velikost"); $typ = mysql_result($result, $i, "typ"); echo '<tr> <td style="text-align:center; margin:10px; padding:10px;">'.$typ.'</td> <td style="text-align:center; margin:10px; padding:10px;">'.$velikost.'</td> <td style="text-align:center; margin:10px; padding:10px;">'.$cookieid.'</td> <td style="text-align:center; margin:10px; padding:10px;"> <form action="update-kosik.php" method="POST"> <input type="text" name="pocet" value="'.$pocet.'"><br> <input type="hidden" name="id" value="'.$cookieid.'"> <input type="submit" name="submit" value="Upravit"> </form> </td> <td style="text-align:center; margin:10px; padding:10px;"><a href="delete-kosik.php?id='.$cookieid.'" onclick="javascript:return confirm(\'Opravdu chcete smazat?\')">Smazat</a></td> </tr>'; } ?> </table> </div><!-- row --> </div><!-- container --> </body> </html> zde je update: update-kosik.php <?php include "db.php"; $pocet = $_POST["pocet"]; $cookieid = $_POST["id"]; $query = 'UPDATE `kosik` SET `pocet`='.$pocet.' WHERE cookieid="'.$cookieid.'"'; mysql_query($query, $connection) or die(mysql_error()); ?> <script> location.replace("kosik.php"); </script> a zde je smazaní: delete-kosik.php <?php include "db.php"; $id = $_GET["id"]; $query = 'DELETE from kosik WHERE cookieid="'.$id.'"'; $result = mysql_query($query, $connection) or die(mysql_error()); ?> <script> location.replace("kosik.php"); </script> |
||
Kajman Profil |
V kosik.php odstraňte povolení cachování tvořeného řádkem
<meta http-equiv="Cache-control" content="public"> Navíc můžete dát na začátek skriptu (např. před include) naopak zakázání cachování header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); V update-kosik.php a v delete-kosik.php přidejte za volání query přesměrovací http hlavičku (doménu si upravte) header('Location: https://www.example.com/kosik.php'); exit; Edit: a pozor, dotazy jsou náchylné na sql injection, jednoduše lze smazat košík všem uživatelům, či upravit ceny za nula korun |
||
ludvalb Profil |
#8 · Zasláno: 3. 10. 2019, 11:21:36
Kajman:
Děkuji velmi za pomoc, sql injection budu teprve řešit. (musím nastudovat jak na to). |
||
Keeehi Profil |
#9 · Zasláno: 3. 10. 2019, 11:39:48
ludvalb:
„Děkuji velmi za pomoc, sql injection budu teprve řešit. (musím nastudovat jak na to).“ Nejlepší je použít nějaký framework který se o bezpečnost stará sám, automaticky. Pak by se nemělo stát, že někde zapomeneš něco ošetřit. |
||
ludvalb Profil |
#10 · Zasláno: 3. 10. 2019, 11:49:07
Keeehi:
Diky za info, mel by jsi nejake odkazy kde je to hezky vysvetleno, popsano? |
||
Kajman Profil |
#11 · Zasláno: 3. 10. 2019, 12:00:48
Např.
www.php.net/manual/en/mysqli.quickstart.prepared-statements.php doc.nette.org/cs/3.0/database A místo SELECT * from kosik WHERE IP='$ip_adresa' |
||
ludvalb Profil |
#12 · Zasláno: 3. 10. 2019, 12:07:07
Děkuji všem za informace a pomoc.
|
||
Časová prodleva: 6 let
|
0