PHP跨页面传递数据

时间:2013-09-27 06:56:32

标签: javascript php html performance

我试图找出在两个页面(页面A到页面B)之间使用PHP传递数据的最佳方法(某种程度上)具体情况:

页面A:带有标题的图片库。要创建此页面,需要在PHP文件中调用数据库调用图像表,该图像表包含图像ID,图像位置和图像标题。它获取表中存在的所有图像,并通过for循环将它们全部回显到屏幕。它在每个图像的锚标记上创建一个指向页面B的href。

页面B :图片的较大视图。当用户点击页面A上的图像时,它会将它们带到一个具有更大图像视图的新页面。

为了达到这个目的,我目前在包含图A中图像的每个锚点上放置一个href,其中包含一个包含图像id的参数。然后,在页面B上,我使用传入的id进行另一个数据库调用,以再次获取图像标题,位置等。

当我在上一页已经检索到所有需要的数据时,我似乎错误地进行了第二次数据库调用。在我看来,只有三个不错的选择对我来说都很糟糕:

  • 多个数据库查询 - 如上所述。似乎效率低下。

  • GET - 不仅仅在图片A的href中包含图片ID,而是在href中包含所有必需的参数。请注意,我实际上只有三个参数,并且可能需要传递超过15个值。拥有一个如此巨大的网址并在网址中传递图像位置等内容似乎是错误的。

  • 发布 - 在页面上为每个图片添加一个表格POST。在表单中为需要从Page A传递到Page B的每个参数放置一个隐藏字段。对我而言,这似乎是一个非常糟糕的主意,因为我有大量不必要的标记,并且会变得非常混乱。

有没有人对这些方法有任何意见,或者更好的想法?随着我的发展越来越多,我发现自己质疑效率以及如何对我进行如此多的数据库调用以便一遍又一遍地做同样的事情。我希望能够为一个图像进行一次数据库调用,然后再也不必为该会话再次执行。

(请注意,JavaScript / jQuery是我的选项)

谢谢!

3 个答案:

答案 0 :(得分:1)

我会做你正在做的事情但是使用它的功能。该函数将具有

SELECT * FROM table WHERE id = $imageid

传递所需图像的ID,如果$imageid中没有值,则显示全部。在页面A上,您可以使用它来获取图像,然后只需使用POST或GET,使用ID运行相同的功能即可获得ID的结果。

我会说这样做并不是很麻烦但是又一次,这就是我要做的事情。

整体做这样的事情:

function getImage ($imageid) {

  if($imageid == ""){
    $result = mysqli_query($con,"SELECT * FROM table");
    return $result;

  } else {
    $result = mysqli_query($con,"SELECT * FROM table WHERE id = $imageid");
    return $result;

  }
}

答案 1 :(得分:1)

每次从服务器获取一些数据时,您需要发出HTTP请求才是Web的现实。如果您重新加载页面浏览器将再次发出HTTP请求以再次获取该数据。 HTML5有很多解决上述问题的方法......

  1. 网络存储 - 将值存储为客户端的键值对
  2. Web SQL数据库 - 与SQL相同
  3. IndexedDB - 介于Web存储和Web SQL数据库之间
  4. 您需要从图片中创建一个base64字符串&将该字符串存储在Web Storage或WebSQL数据库中。您可以在javascript文件中将图像代码写入base64&然后使用HTML5 API将字符串存储在数据库中。

    查看此页面 - http://www.html5rocks.com/en/features/storage

答案 2 :(得分:0)

使用jquery,您不必转到下一页。你可以简单地做到以下几点:

$('div#largeImageDisplay').hide(); // Div to display large image on. You can style however you want

$("a.linkClass").on("click", function(e) {
    sImagePath = $(this).children("img").attr("src"); // use replace function to change path to the one you want 
    sImageTitle = $(this).attr("title");

    $('div#largeImageDisplay').empty();
    $('div#largeImageDisplay').html("<h3>"+sImageTitle+"</h3><img src='"+sImagePath+"'/>");

    e.preventDefault();

});