1

我想知道为什么Internet Explorer(任何版本)总是在POST不调用 right 的情况下给出function onSubmit。仅当我refresh页面时才有效

表单的内容PHP/MySQL在这里动态生成:

<form id="formQtd" name="formQtd" onSubmit="return validaQtd();" method="post">
        <p class="cab">Por favor informe a quantidade de Ovos de P&aacute;scoa em estoque em sua loja neste momento:</p>
        <div id="produtos">
            <?
                if ($linhas2 == 0)
                    echo "<p style='margin-left: 15px'>A pesquisa foi cancelada pelo administrador</p>";
                else {
                    if ($linhas == 0)
                        echo "<p style='margin-left: 15px'>Nenhum ovo de p&aacute;scoa cadastrado</p>";
                    else {
                        while ($row = mysql_fetch_array($result)) {
                            $texto = "<div id='thumb'>
                            ";
                                $texto .= "<img width='100' height='100' src='img_pan/".$row["imagem"]."' />
                                ";
                                $texto .= "<p id='pNome'>".utf8_encode($row["nome"])."</p>
                                ";
                                $texto .= " <input type='text' value='' class='inputQtd num' name='".$row["id"]."_prod' id='qtd$row[id]' placeholder='Quant.' /> 
                                ";
                                $texto .= "</div>";
                                echo $texto;
                        }?>
        </div>
        <input type="submit" name="submit" id="submitQtd" value="Enviar" style="width:70px;height:25px;clear:both;float:right;border:1px solid #873305; background-color:#300300; color:white; margin:5px 0px 20px 0px" />
    </form>  
    <?
                            }
                }
    ?>

我的function验证:

function validaQtd() { 
  var inp = document.forms[0].getElementsByTagName('input');
  console.log(inp.length);
  for (var i = 0; i < inp.length; i++){
    if(inp[i].type == "text"){
        if(inp[i].value == ""){
            console.log(inp[i].value+" - "+inp[i].id);
            alert('Preencha as quantidades em branco');
            inp[i].focus();
            return false;
        }
    }
  }
}

我的POST

if ($_POST) {

    $time = microtime(true);
    $micro_time = sprintf("%06d",($time - floor($time)) * 1000000);
    $date = new DateTime( date('Y-m-d H:i:s.'.$micro_time,$time) );
    $dt = $date->format("Y-m-d H:i:s.u");
    $dtAtual = substr($dt, 0, -3);

    $upload = 0;                
    foreach ( $_POST as $nome => $valor ) {
        if($nome != "submit" && $valor != "") {
            $upload = 1;
            //separando o codigo do nome
            $prov = explode("_", $nome);
            $cdProd = str_replace("_","",$prov[0]); 

            //inserindo no banco    
            $queryIns = "INSERT INTO registro_ovos2013 (idusuario, idproduto, quantidade, data) VALUES ('".$cdUsu."', ".$cdProd.", ".$valor.", '".$dtAtual."')";
            $resultIns = mysql_query($queryIns);
        }   
    }
    if ($upload == 1) {
        ?>
        <script>
            alert("Quantidade cadastrada!");                        
            window.location = "?codigo=<?=$cdUsu;?>";
        </script>
        <?
    } 
    else {
        ?>
        <script>
            alert("Preencha os campos em branco");                      
            window.location = "?codigo=<?=$cdUsu;?>";
        </script>
        <?
    }
}
4

2 回答 2

1

你的意思是你的步骤是这样的:

  • 加载页面。
  • 输入有效数据。
  • 提交(函数被调用)
  • 重新加载(已处理 POST,未调用验证函数)

如果是,那是很正常的。页面加载了一些 POST 请求并重新加载它会导致再次请求。并且不涉及任何javascript。

这就是为什么您也总是需要在服务器端验证数据。紧接着if ($_POST) {

于 2013-04-02T16:59:04.783 回答
0

如果您的页面被解析为 XML(作为 XHTML),您应该使用onsubmit作为属性的名称(而不是onSubmit)。XML 区分大小写。

于 2013-04-02T17:25:52.577 回答