0

ページに2つのボタンがあります。ボタンの 1 つは、3 つのテキスト ボックスを介して入力された日付を保存します。もう 1 つは、何らかのデータ操作を行う関数を呼び出します。

これは、上記の最初のボタンから得たものです。

<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 } 
}

そして、これは2番目のボタンからのそれぞれのコードです

<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」と呼ばれる) をクリックするたびに、2 番目のボタン (「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 で、この 1 つの 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 に答える