0

我在一个页面中有 2 个按钮。其中一个按钮保存通过 3 个文本框输入的日期。另一个调用一个函数来进行一些数据操作。

这就是我从上面提到的第一个按钮中得到的。

<input type="submit" name="gravarnext" value="Gravar" />

<?php
if (isset($_POST['gravarnext'])) { 
    if ($_POST['atextfield1'] <= 0 OR $_POST['atextfield2'] <= 0 OR $_POST['atextfield3'] <= 0 OR $_POST['atextfield1'] > 31 OR $_POST['atextfield2'] > 12 OR $_POST['atextfield3'] < 2013){ ?>
        <script>window.alert("Um ou mais valores são inválidos (Dia 1-31 / Mês 1-12 / Ano 2013+).");</script>
    <?php } else {
                $qp = "UPDATE login.next SET dia = '".$_POST['atextfield1']."'";
                $rqp = mysql_query($qp);
                $qp = "UPDATE login.next SET mes = '".$_POST['atextfield2']."'";
                $rqp = mysql_query($qp);
                $qp = "UPDATE login.next SET ano = '".$_POST['atextfield3']."'";
                $rqp = mysql_query($qp);
                echo $_SERVER['PHP_SELF']; ?>
                <script>window.alert("Data do próximo sorteio atualizada com sucesso!");</script>
    <?php } 
}

这是第二个按钮的相应代码

<button onclick="myFunction()">Finalizar</button>

<script>
    function myFunction()
    {
        var r=confirm("Depois de carregar 'ok', todas as ações tomadas são irreversíveis. Desejas continuar?");
        if (r==true)
        {
            <?php
            //Refresha o palpite do utilizador para 0 e guarda o palpite antigo como ultpalpite
            $qp5 = "UPDATE login.users SET ultpalpite = palpiteatual";
            $rqp5 = mysql_query($qp5);
            //Gera o número sorteado
            $numsort = rand(1,50);
            $qp2 = "UPDATE login.sorteio SET ultsorteio = '".$numsort."'";
            $rqp2 = mysql_query($qp2);
            $qp3 = "UPDATE login.next SET numsorteado = '".$numsort."'";
            $rqp3 = mysql_query($qp3); 
            //Adiciona +1 ao vezesganhou do(s) vencedor(es)
            $qp4 = "UPDATE login.users SET vezesganhou = vezesganhou + 1 WHERE ultpalpite = '".$numsort."'";
            $rqp4 = mysql_query($qp4);
            //Atualiza data do ultimo sorteio
            $d = date('j');
            $m = date('n');
            $y = date('Y');
            $aqp1 = "UPDATE login.sorteio SET diaultsort = '".$d."', mesultsort = '".$m."', anoultsort = '".$y."'";
            $arqp1 = mysql_query($aqp1);
            ?>
        }
        else
        {
            return 1;
        }
    }
</script> 

所以,我的问题是,每当我单击第一个按钮(称为“Gravar”)时,除了与第二个按钮(称为“Finalizar”)关联的函数也运行之外,一切都运行得很好。这可能是什么原因造成的?不要担心 sql 漏洞和/或错误的编码。这仅用于测试目的。

4

2 回答 2

2

您的按钮 Finalizar 总是运行,原因很简单。

您不能将 PHP 代码与 Javascript 函数结合使用。PHP 代码在发送到客户端之前运行(因此它被称为服务器端语言)。

如果您有以下脚本:

function myJavascriptFunction() {
     <?php echo 'This is some PHP'; ?>
}

客户将其解释为:

function myJavascriptFunction() {
    This is some PHP
}

这会给你错误。同样,PHP 是在服务器端运行的。

为了从 Javascript 运行 PHP 代码,您需要一个叫做“AJAX”的东西。基本上你把你想做的任何事情都保存在一个单独的 PHP 文件中。您可以随时静默运行该 PHP 文件。

试试这个教程: http ://www.w3schools.com/ajax/default.asp

于 2013-03-14T08:54:45.197 回答
0

您以错误的方式混合了 js 和 php ... PhP 将始终在 javascript 之前运行,因此 myfunction 中的 php 代码将始终运行而与条件无关。您的问题的可能解决方案可以是在确认条件为真时使用ajax的所有其他页面它可以像

 function myFunction()
{
    var r=confirm("Depois de carregar 'ok', todas as ações tomadas são irreversíveis. Desejas continuar?");
    if (r==true)
    {
        $.ajax{
                 url   : 'yourpage.php',
                 data  : {"data you want in page"}
              }
    }
    else
    {
        return 1;
    }
}

并在 yourpage.php 上写下你的这个 php 代码

<?php
    //Refresha o palpite do utilizador para 0 e guarda o palpite antigo como ultpalpite
    $qp5 = "UPDATE login.users SET ultpalpite = palpiteatual";
    $rqp5 = mysql_query($qp5);
    //Gera o número sorteado
    $numsort = rand(1,50);
    $qp2 = "UPDATE login.sorteio SET ultsorteio = '".$numsort."'";
    $rqp2 = mysql_query($qp2);
    $qp3 = "UPDATE login.next SET numsorteado = '".$numsort."'";
    $rqp3 = mysql_query($qp3); 
    //Adiciona +1 ao vezesganhou do(s) vencedor(es)
    $qp4 = "UPDATE login.users SET vezesganhou = vezesganhou + 1 WHERE ultpalpite = '".$numsort."'";
    $rqp4 = mysql_query($qp4);
    //Atualiza data do ultimo sorteio
    $d = date('j');
    $m = date('n');
    $y = date('Y');
    $aqp1 = "UPDATE login.sorteio SET diaultsort = '".$d."', mesultsort = '".$m."', anoultsort = '".$y."'";
    $arqp1 = mysql_query($aqp1);
    ?>

试试看....

于 2013-03-14T09:02:16.147 回答