【问题标题】:PHP Insert Statement running twice in Firefox, once in I.EPHP Insert 语句在 Firefox 中运行两次,在 I.E 中运行一次
【发布时间】:2013-10-23 19:09:35
【问题描述】:

我真的被困在这里了。我有一个在 Firefox 上运行两次的插入语句,但(正确地)在 IE 中只运行一次。

什么可能导致 Firefox 运行两次插入语句?它只运行此查询两次,而不是页面上的其他查询。除了我在下面发布的内容之外,我还注释掉了所有其他代码,它仍然在 Firefox 中插入了两次。

if((isset($_GET['stepNum']))&&(isset($_GET['idNum']))){
    $stepNum = $_GET['stepNum'];
    $idNum = $_GET['idNum'];

    $startCycleNum = 1;
    $startCycleStatus = 1;
    $cycleGo = true;
    }//end isset if statement
try {
    if ($cycleGo == true) {
$stmtC = $db->prepare('INSERT INTO mytable (cycleNum, cycleStatus, processID) VALUES (:cycleNum, :cycleStatus, :processID)');
$stmtC->execute(array(':cycleNum' => $startCycleNum, ':cycleStatus' => $startCycleStatus, ':processID' => $idNum));
$cycleGo = false; 
$newCycle = $db->lastInsertId();

    }
}//end try
catch (PDOException $ex) {
    echo '<h5>There was an error saving the new cycle.  Please try again.</h5>';
}//end catch

任何想法将不胜感激。我尝试在 Firefox 中清除缓存无济于事。

编辑:提交表单getsteps.php的代码

if ($stepNum != 'none') {
    echo '<form name="addNewForm" action="createcycleone?idNum='.$idNum.'stepNum='.$stepNum.'" method="post">

    <table width = "100%" id="formfields">';

    //form inputs

echo '<tr><td colspan="2">&nbsp;</td></tr>
<tr><td colspan="2" style="text-align:center"><input type="submit" value="Save and Create Cycle"></input></td></tr>
</table>
</form> ';
}

编辑:调用 getSteps.php 的 php 页面中的代码以加载正确数量的步骤(字段)

//get the stepNum
if((isset($_GET['nid']))&&(isset($_GET['idNum']))){
$stepNum = $_GET['nid'];
$idNum = $_GET['idNum'];
}
  <form id="stepsForm" name="stepsForm">
      <table width ="100%" id="stepfield">

        <tr><td><strong>Number of Steps:</strong></td>
        <td><select name="getSteps" id="getSteps" onchange="$('#formContainer1').load('../files/createUAT/getSteps.php?nid='+this.value+'&idNum='+<?php print $idNum; ?>);">
        <option value="none">Select a Number</option>
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
        <option value="5">5</option>
        <option value="6">6</option>
        <option value="7">7</option>
        <option value="8">8</option>
    </select>
</td></tr></table>
</form>


<div id ="formContainer1" class="formContainer1">

</div>

【问题讨论】:

  • 我没有仔细研究你的代码,但除非涉及到一些 JS,否则我看不出浏览器有什么不同。
  • 谁立即对此投反对票?这并不是说我在发布之前没有尝试过搜索...
  • 是否有任何循环我看到 $cycleGo = false;并且想知道此代码之外还有其他内容。 PDOExecption 是否曾经触发过?
  • 是的,问题很可能在于页面本身的提交方式(通过 Javascript 或其他方式)。最有可能的是,它是通过 AJAX 提交的,然后提交按钮事件也被触发(在不同的浏览器中,它的工作方式可能不同,具体取决于它的构造方式)。
  • 由于它是服务器端代码(其中没有任何内容处理任何特定于浏览器的内容),因此无法回答您的问题 - 那么触发此脚本在第一名?可能有任何外部资源(脚本、图像等)嵌入到 HTML 文档中且 src/href 属性为空? (这些是“莫名其妙的”双重请求的常见原因。)Firebug 的网络面板中是否有任何内容表明对正在发出的脚本有两个请求?

标签: php mysql firefox


【解决方案1】:

不确定这是否是导致问题的原因,但请更改此...

'idNum='+<?php print $idNum; ?>

...到这个..

'&idNum=<?php print $idNum; ?>'

这可能会导致一些跨浏览器的差异。

【讨论】:

  • 试过了......不幸的是,我仍然在 Firefox 上获得 2 个新行。
  • javascript 中的这种基本连接如何导致跨浏览器问题?
  • @LorenzMeyer 在提交一个有效的整数时,但是当值“none”来自第一个选项时,大多数浏览器会抛出一个 JS 错误(应该如此),但我已经看到了一些(ahemIEahem) 尝试自动更正此类错误。不是导致此问题的原因,但值得注意。
【解决方案2】:

我强烈建议你在你的 php 脚本中关闭错误报告,看看问题是否仍然存在。error_reporting(0); 我在使用 firefox 时遇到了同样的问题,并且成功了。否则,请查看Similar question and suggestions

【讨论】:

    【解决方案3】:

    如果你在&lt;HTML&gt;标签之前输出any文本,firefox会有重新加载页面的坏习惯。这意味着,您的代码将执行两次。

    我建议确保任何输出(查询结果、调试消息等)都正确地位于&lt;body&gt; html 标记内,而不是在它之外。

    当我将查询输出到标记的最开头(用于调试)时,那件事让我发疯了。

    如果是这样的话,我会很惊讶这种讨厌的行为仍然存在。

    编辑:哦,我刚刚看到这个问题来自 2013 年...... xD。不知何故,stackoverflow 弹出了这个问题,我认为这是一个最近的问题。

    不管怎样,这可能是你的答案!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-25
      • 1970-01-01
      • 2016-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-23
      • 2015-05-12
      相关资源
      最近更新 更多