0

我在下面有这行代码,它向用户说明他们当前在页面总数中的哪个页面:

<h1><?php echo $sessionMinus ?> OF <?php echo $_SESSION['initial_count'] ?></h1>

上面的代码可以这样写:1 OF 7, 3 OF 5,5 OF 6等等。

但是有一个问题,我目前在 google chrome 和 mozilla firefox 之间存在问题。下面我有一个指向应用程序的链接。您能否在 Firefox 和 chrome 中打开该应用程序并按照以下步骤操作,您将能够看到问题:

  1. 打开我在 chrome 和 firefox 中提供的 URL

  2. 请在两个页面上输入多个会话(输入 7),然后在两个浏览器上提交页面。

  3. 您将在两个浏览器的顶部看到一个标题: "CREATING QUESTIONS AND ANSWERS: SESSION 1 OF 7"

  4. 在两个浏览器的页面上,单击“添加问题”按钮 3 次,以添加 3 行,每行包含一个图像文件输入。

  5. 现在单击两个浏览器页面底部的“提交详细信息”按钮。

我想让你做的是现在看看标题是什么"CREATING QUESTIONS AND ANSWERS: SESSION ... OF 7"。现在说。在 Firefox 中,它完美地工作,因为你已经完成了第一页,所以你现在在第二页,这就是它声明的原因"CREATING QUESTIONS AND ANSWERS: SESSION 2 OF 7"

但是在chrome中它不能很好地工作。相反,在 chrome 中它声明"CREATING QUESTIONS AND ANSWERS: SESSION 5 OF 7". 这是因为 chrome 它为已添加的每一行添加一个数字(添加一行时,表单会上传到其自身页面)。因此,在提交第一页后,新页面会添加一个数字来制作它,2 OF 7但随后在第一页添加了 3 行使其5 OF 7成为 chrome,这是完全不正确的。

所以我的问题是为什么它在 chrome 中的工作方式与在 Firefox 中不同,有没有一种方法可以让 chrome 以与 Firefox 相同的方式工作,以便每次用户进入下一页时都显示正确的页码?

以下是完整代码:

<?php

    session_start();


    if(isset($_POST['sessionNum'])){
                //Declare my counter for the first time

                $_SESSION['initial_count'] = $_POST['sessionNum'];
                $_SESSION['sessionNum'] = intval($_POST['sessionNum']);
                $_SESSION['sessionCount'] = 1;

        }

    else if ($_SESSION['sessionCount'] < $_SESSION['sessionNum']) {
        $_SESSION['sessionCount']++;
    }


    $sessionMinus =  $_SESSION['sessionCount'];

    if ($sessionMinus == $_SESSION['initial_count']){ 

        $action = 'create_session2.php'; 

    }else if($sessionMinus != $_SESSION['initial_count']){ 

        $action = $_SERVER['PHP_SELF']; 

    }

    ?>

    <script type="text/javascript">


    function insertQuestion(form) {   


        var $tbody = $('#qandatbl > tbody'); 
        var $tr = $("<tr class='optionAndAnswer' align='center'>");
        var $image = $("<td class='image'></td>"); 


    var $fileImage = $("<form action='imageupload.php' method='post' enctype='multipart/form-data' target='upload_target' onsubmit='return imageClickHandler(this);' class='imageuploadform' >" + 
        "<p class='imagef1_upload_process' align='center'>Loading...<br/><img src='Images/loader.gif' /><br/></p><p class='imagef1_upload_form' align='center'><br/><label>" + 
        "Image File: <input name='fileImage' type='file' class='fileImage' /></label><br/><br/><label class='imagelbl'>" + 
        "<input type='submit' name='submitImageBtn' class='sbtnimage' value='Upload' /></label>" + 
        "<iframe class='upload_target' name='upload_target' src='#' style='width:0;height:0;border:0px;solid;#fff;'></iframe></form>");     

        $image.append($fileImage);


        $tr.append($image);  
        $tbody.append($tr); 



    }


                 function showConfirm(){

             var confirmMsg=confirm("Make sure that your details are correct, once you proceed after this stage you would not be able to go back and change any details towards Questions, Options and Answers for your Session." + "\n" + "\n" + "Are you sure you want to Proceed?" + "\n" );

             if (confirmMsg==true)
             {
             submitform();   
         }
    }

             function submitform()
    {
        var fieldvalue = $("#QandA").val();
        $.post("insertQuestion.php", $("#QandA").serialize() ,function(data){
            var QandAO = document.getElementById("QandA");
            QandAO.submit();
        });  
        alert("Your Details for this Session has been submitted"); 
    }




    </script>

    </head>

    <body>

    <form id="QandA" action="<?php echo htmlentities($action); ?>" method="post">

    <h1>CREATING QUESTIONS AND ANSWERS: SESSION <?php echo $sessionMinus ?> OF <?php echo $_SESSION['initial_count'] ?></h1>

    <div id="detailsBlock">

    <table id="questionBtn" align="center">
    <tr>
    <th>
    <input id="addQuestionBtn" name="addQuestion" type="button" value="Add Question" onClick="insertQuestion(this.form)" />
    </th>
    </tr>
    </table>

    </div>
    <hr/>

    <div id="details">
    <table id="qandatbl" align="center">
    <thead>
    <tr>
        <th class="image">Image</th>
    </tr>
    </thead>
    <tbody>
    </tbody>
    </table>
    </div>

    <p><input id="submitBtn" name="submitDetails" type="submit" value="Submit Details" onClick="myClickHandler(); return false;" /></p>

    </form>

             <script type="text/javascript">

    function myClickHandler(){
         if(validation()){
                    showConfirm();
         }
    }

    </script>



    </body>
    </html>
4

1 回答 1

0

没有深入你的代码(你今天已经发布了这个,对吧?),但你的错误可能来自你使用$_SESSION变量来存储不应该存在的数据这一事实。

例如,如果您的用户同时打开两个选项卡并浏览页面,那将是一团糟。

为每个流程创建一个唯一标识符,将数据存储在您的数据库中,并在您的页面之间使用$_GET$_POST传输此标识符(您也可以将此数据存储在您的会话中,但存储在由该标识符索引的数组中)。

哦,还有 iframe?避开他们!使用 jquery 插件来处理您的上传。

于 2012-07-05T14:31:48.603 回答