代码之家  ›  专栏  ›  技术社区  ›  rhodesjason

PHP分页库与表单-如何保留跨页面的数据?jquery唯一的方法?

  •  1
  • rhodesjason  · 技术社区  · 15 年前

    画一个5页的图片库,每页大约有20张图片。每个图像都与两个复选框关联,“Web分辨率”和“打印分辨率”,以便客户订购图像的数字副本。

    页面是内置的PHP。当客户机在所有5页中选择完图像后,她单击“提交订单”,并进入一个确认页面,该页面将显示所选图像的缩略图,并请求订单和预算信息。

    最简单的方法是什么,以保持哪些图像已被选中跨页面?当这是一个单页的库时,我使用的代码非常有效:

    echo "<ul class=\"req-box nolist\">
        <li>";
    
        if (isset($_POST['photo-select']) && in_array($photoid . "-print", $_POST['photo-select'])) {
            echo "<input type=\"checkbox\" checked=\"checked\" name=\"photo-select[]\" id=\"{$photoid}-print\" value=\"{$photoid}-print\" />\n";
        } else {
            echo "<input type=\"checkbox\" name=\"photo-select[]\" id=\"{$photoid}-print\" value=\"{$photoid}-print\" />\n";
        }
    
        echo "<label for=\"{$photoid}-print\">print use</label></li>\n
        <li>";
    
        if (isset($_POST['photo-select']) && in_array($photoid . "-web", $_POST['photo-select'])) {
            echo "<input type=\"checkbox\" checked=\"checked\" name=\"photo-select[]\" id=\"{$photoid}-web\" value=\"{$photoid}-web\" />\n";
        } else {
            echo "<input type=\"checkbox\" name=\"photo-select[]\" id=\"{$photoid}-web\" value=\"{$photoid}-web\" />\n";
        }
    
        echo "<label for=\"{$photoid}-web\">web use</label></li>\n
    
    </ul>\n";
    

    但是现在这显然不起作用,因为到页面的链接是 <a> 锚定并不会发布到$\u post数组。我认为这可以使用jquery ajax发布事件来完成,但我不是100%确定,我也不确定这是否是最好的方法。如果有人禁用了JS,表单就不会工作,对吗?

    如果这是唯一的办法,那好吧,但我需要你的一些建议。谢谢!

    2 回复  |  直到 15 年前
        1
  •  1
  •   Brandon Henry    15 年前

    您不必使用Ajax。

    使上一个和下一个按钮成为按钮(如果它们还没有)。这样做的话,你可以在前四页修改你的表单方法。在最后一页上,使用Post转到另一页。(不过,由于您实际上没有更改服务器上的任何内容,因此您可能希望始终使用GET)

    上一页和下一页按钮是表单按钮,您的选择将在URL中传递。

    第1页可能有选择1-20,用户选择了3和5。单击“下一步”将转到URL:

    http://original/url/?sel[]=3&sel[]=5&page=2
    

    第2页有选择21-40,用户选择27和32。现在,下一步按钮转到URL:

    http://original/url/?sel[]=3&sel[]=5&sel[]=27&sel[]=32&page=3
    

    等等。

    如果您通常有用户选择所有100个图像,那么您的URL可能会有一点长,但正如前面提到的,您可以使用会话来实现这一点。不过,会话不需要Ajax。

    关键: 塞尔 = 照片选择

        2
  •  1
  •   GSto    15 年前

    Ajax请求可能是您的最佳选择。

    使用jquery,当他们单击转到另一个页面时,您可以触发一个Ajax事件来在会话中存储数据。或者,你可以在每次他们点击一个复选框时都这样做,但这可能会有一些对很多的请求。

    如果您担心他们禁用了javascript,那么您可以让页面链接默认指向Ajax脚本。然后,在进行Ajax调用时,传递一个变量,如“Ajax=1”,如果Ajax变量为false,则自动将用户重定向到下一页。这样,通过这种方式,启用了javascript的人将得到一个Ajax请求,而不启用javascript的人将进入脚本,然后快速重定向。然后,在完成订单时,只需更改流程订单代码以检查$\u会话而不是$\u Post。