2013-03-14 2 views
0

페이지에 2 개의 버튼이 있습니다. 단추 중 하나는 3 개의 텍스트 상자를 통해 입력되는 날짜를 저장합니다. 다른 하나는 데이터 조작을 수행하는 함수를 호출합니다.HTML 버튼이있는 MySQL

이것은 위에서 언급 한 첫 번째 버튼부터 가지고 있습니다.

<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 취약점 및/또는 잘못된 코딩에 대해 걱정하지 마십시오. 이는 테스트 목적으로 만 사용됩니다.

+0

당신의 문제는 성격이 다르지만 이것은 [악의적 인 SQL 주입]을 요구합니다. (http://en.wikipedia.org/wiki/SQL_injection) 모든 데이터 ... 보안에 관해서 [이 대답] (http://stackoverflow.com/a/15390836/1667004)을보십시오 ... 여기에서 문제가 발생하면 PHP가 콘텐츠가 사용자에게 전송되기 전에 SERVER 측에서 실행됩니다. JavaScript는 클라이언트 측 (브라우저)에 도달 할 때까지 평가되지 않습니다. 그래서 당신의'if' 조건은 아무것도하지 않고, myFunction()의 PHP 내용은 무엇이든 상관없이 실행됩니다 ... – ppeterka

+1

나는 자바 스크립트와 PHP를 혼란시키고 있다고 생각합니다. 두 번째 버튼에 대한 PHP 코드는 항상 클라이언트에 DATA를 보내기 전에 서버에 의해 실행됩니다. – Frildoren

답변

2

귀하의 버튼 Finalizar는 매우 간단한 이유로 항상 실행됩니다.

PHP 코드와 Javascript 기능을 함께 사용할 수 없습니다. PHP 코드는 클라이언트에 전송되기 전에 실행됩니다 (따라서 서버 측 언어라고 함).

다음 스크립트했을 경우 당신에게 오류를 줄 것이다

function myJavascriptFunction() { 
    This is some PHP 
} 

: 클라이언트로 해석됩니다

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

합니다. 다시 말하지만 PHP는 서버 측에서 실행됩니다.

Javascript에서 PHP 코드를 실행하려면 "AJAX"가 필요합니다. 기본적으로 별도의 PHP 파일에서 원하는 작업을 저장합니다. 원할 때마다 PHP 파일을 자동으로 실행할 수 있습니다.

는이 튜토리얼에서 이동 유무 : myFunction이 내 PHP 코드는 항상 조건과 관계없이 실행할 수 있도록 잘못된 방법으로 http://www.w3schools.com/ajax/default.asp

+0

w3schools가 또 왜 필요한가요? ([this] (http://w3fools.com/)에서 왜 내가 묻는 지 읽어보십시오 ...) 그리고 "Javascript에서 PHP 코드 실행하기"또한 거짓말입니다 : PHP 코드의 실행을 트리거하는 요청을 발행합니다 ... – ppeterka

+0

나는 이해합니다. 도움을 청한 모든 분들께 감사드립니다. –

+0

W3schools는 배경 정보와 붙여 넣기를 복사 할 수 있도록 미리보기가 있기 때문에 초보자도 쉽게 사용할 수 있습니다. w3schools는 많은 잘못된 정보가있는 잘못된 리소스라는 사실을 잘 알고 있습니다. 또한 Javascript에서 PHP 코드를 실제로 실행하지 않고 대신 새로운 HTTP 요청을 트리거한다는 사실을 잘 알고 있습니다. 우리는 초보자를 상대하고 있습니다. 당신이하는 일의 배경을 이해하는 것은 시간이 지남에 따라옵니다. –

0

당신은 혼합 한 JS와 PHP를 ... PHP는 항상 앞서 자바 스크립트의 실행됩니다. 문제에 대한 가능한 솔루션은

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

처럼 될 수에 당신이 하나의 PHP 코드를 작성 yourpage.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); 
    ?> 

시도하십시오 ....

+0

감사. 나는 그것을 줄 것이다 –

+0

@ FábioMartinho 물론 .. – alwaysLearn

+0

실제로 POST를 사용하여 주위에 방법을 만들었습니다. 지금은 대단한 일입니다. 어쨌든 감사합니다 :) –