【发布时间】:2020-05-30 06:01:22
【问题描述】:
我创建了一个网站,用户可以在其中输入他们之前看过的电影,然后将其存储在数据库中,然后使用本地存储在其历史记录下的单独页面上进行输出。这适用于第一个用户,但是历史记录下的输出不会根据用户而改变,因为本地存储中的值不会改变。 我应该使用另一种存储方法吗,或者可以使用本地存储来解决这个问题。
<script> //retrieving database results from localstorage in html page
var film2s = localStorage.getItem("historynames");
var films = film2s.split(",");
var filmi = localStorage.getItem("historyimages");
var images = filmi.split(",");
</script>
<?php // retrieving users history from database
for ($x = 0; $x<=$length -1; $x++){
$select = $history[$x];
$sql2= "SELECT FilmTitle FROM Films WHERE FilmID=".$select;
$sql3= "SELECT imgFilm FROM Films WHERE FilmID=".$select;
$result2 = mysqli_query($conn, $sql2);
$result3 = mysqli_query($conn, $sql3);
if (mysqli_num_rows($result2)> 0){
while($row2 = mysqli_fetch_assoc($result2)){
$h_films[] = $row2;
}
while($row3 = mysqli_fetch_assoc($result3)){
$h_img[] = $row3;
}
}
}
$h_names = array();
$h_images = array();
for ($x = 0; $x<=$length -1; $x++){
foreach($h_films[$x] as $data){
// echo ($data['FilmTitle']);
array_push($h_names,$data);
// array_push($names,$value);
}
}
for ($x = 0; $x<=$length -1; $x++){
foreach($h_img[$x] as $imgdata){
// echo ($data['FilmTitle']);
array_push($h_images,$imgdata);
}
}
?>
<script> // storing databse results from localstorage
var users = <?php echo json_encode(($h_names)) ;?>;
document.cookie= "historynames="+ users;
var users2 = <?php echo json_encode(($h_images)) ;?>;
localStorage.setItem('historyimages', users2);
</script>
【问题讨论】:
-
似乎是什么问题? “只是”覆盖 localStorage 中的键/值以更新它们。您可能想在更改后重新阅读它们
-
你认为这里的“用户”首先是什么?多个人在同一设备上的同一浏览器中连续使用同一站点?我什至不确定我是否得到了你真正想要在这里创建的系统。 Localstorage 将表明我们正在处理仅限于特定客户端的东西,混合中的服务器端数据库则表明相反......
-
注意SQL injection;有人可能会在他们的 localStorage 中设置一些危险的 SQL 并损坏您的数据库(因为据我所知,“历史”来自客户端)。此外,您不需要对
FilmTitle和imgFilm进行 2 个单独的查询,因为它们来自同一个表;你也不需要循环。尝试使用类似select FilmTitle, imgFilm from Films where FilmID in(1,2,3)的查询。
标签: javascript php local-storage