| 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