onclick으로 PHP 기능 실행


92

태그 를 클릭 할 때만 PHP 함수 를 호출하는 간단한 솔루션을 찾고 있습니다.

PHP :

function removeday() { ... }

HTML :

<a href="" onclick="removeday()" class="deletebtn">Delete</a>

업데이트 : html 및 PHP 코드가 동일한 PHP 파일에 있습니다.


5
HTML은 클라이언트에서 실행되는 Javascript 함수를 실행합니다. PHP는 서버에서 실행됩니다. AJAX에 대해 알아야합니다.
Barmar 2013-10-11

하지만 왜 AJAX인가? 전체 코드는 동일한 PHP 파일에 있습니다.
마이크

1
왜 AJAX인가? 글쎄, 그것을 알아 내기 위해, 당신은 단순히 PHP 스크립트를 실행하고 그 실행 코드를 볼 수 있습니다. 다시 말하지만, Ajax는 그렇게 할 수있는 유일한 방법입니다 .
Yang은

2
<a role="button" href="?action=removeday" class="debatebtn">Delete</a>액션이 잡힌 곳 을 사용 하고 if($action == 'removeday'){ removeday(); }. 와 유사한 removeday () 함수를 실행하면 확인 된 답변이 버튼처럼 보입니다 . 나는 이것이 늦었다는 것을 알고 있지만 여전히이 문제를 가진 누군가를 도울 수 있다고 생각합니다. C§
CSS

답변:


142

먼저 세 가지 언어가 함께 작동한다는 것을 이해하십시오.

  • PHP : 서버에서만 실행되며 링크 클릭 (GET) 또는 양식 제출 (POST)과 같은 요청에 응답합니다.

  • HTML 및 JavaScript : 다른 사람의 브라우저에서만 실행됩니다 (NodeJS 제외).

귀하의 파일이 다음과 같다고 가정합니다.

<!DOCTYPE HTML>
<html>
<?php
  function runMyFunction() {
    echo 'I just ran a php function';
  }

  if (isset($_GET['hello'])) {
    runMyFunction();
  }
?>

Hello there!
<a href='index.php?hello=true'>Run PHP Function</a>
</html>

PHP는 요청 ($ _REQUEST를 통해 GET, POST, PUT, PATCH 및 DELETE)에만 응답하기 때문에 동일한 파일에 있더라도 PHP 함수를 실행해야합니다. 이렇게하면 "이 사용자에 대해이 스크립트를 실행해야합니까?"라는 보안 수준이 제공됩니다.

페이지를 새로 고치지 않으려면 AJAX (Asynchronous JavaScript and XML)라는 메서드를 통해 새로 고치지 않고 PHP에 요청할 수 있습니다.

그래도 YouTube에서 찾아 볼 수 있습니다. "jquery ajax"를 검색하십시오.

처음 시작하는 사람에게 Laravel을 추천합니다 : http://laravel.com/


3
언급 하자면 , 저는 당신이 PHP를 처음 접하는 사람이라고 가정하고 laravel.com 을 프레임 워크 로 추천하고 싶습니다 . 개인적으로 저는 '일반 PHP 학습'전체를 건너 뛰고 곧바로 강력한 프레임 워크로 이동하고 싶었습니다. 이것은 내가 지금도 사용하는 것입니다.
Michael J. Calkins

5
정말 감사합니다. 귀하의 답변은이 의심에 도움이 될뿐만 아니라 PHP를 훨씬 더 잘 이해하게했습니다! 다시 감사합니다!
노이즈 느낌

고마워요 이걸 찾고 있어요. 워드 프레스로 어떻게 구현할 수 있습니까?
Firefog

1
당신의 언급 때문에 라 라벨에 집중하기 시작할 것입니다.
Mohamed Abulnasr

2
If you don't want to refresh the page, you can make a request to PHP without refreshing via a method called Asynchronous JavaScript and XML (AJAX).그가 onclick질문에 포함 시켰기 때문에 목표는 새로 고침없이 행동을 수행하는 것임이 분명합니다. ¬_¬
Synetech

38

자바 스크립트에서 ajax 함수를 만들고,

function myAjax() {
      $.ajax({
           type: "POST",
           url: 'your_url/ajax.php',
           data:{action:'call_this'},
           success:function(html) {
             alert(html);
           }

      });
 }

그런 다음 html에서 호출하십시오.

<a href="" onclick="myAjax()" class="deletebtn">Delete</a>

그리고 ajax.php에서

if($_POST['action'] == 'call_this') {
  // call removeday() here
}

명확히하기 위해 : type1.9.0 이전의 jQuery에서 사용되어야하며은 method별칭이며 최신 버전에서 사용해야합니다.
알레한드로 나바

1
Vanilla JavaScript에서도 제공되는 동일한 솔루션은 초보자에게 훨씬 더 나은 도움을줍니다. 저는 한때 완전한 초보자 였지만 PHP에 능숙한 JavaScript의 경험이 많은 사용자로서 이것을 말합니다.
Ken Ingram

12

이것이 당신의 버튼이라면 다소 간단한 PHP로 할 수 있습니다.

<input type="submit" name="submit>

그리고 이것은 당신의 PHP 코드입니다

if(isset($_POST["submit"])) { php code here }

버튼을 클릭 할 때 발생하는 get의 게시를 제출할 때 코드 get이 호출됩니다.


11

AJAX 를 통해이 작업을 수행해야합니다 . 나는 당신이 이것을 더 쉽게 만들기 위해 jQuery를 사용하는 것이 좋습니다 ....

$("#idOfElement").on('click', function(){

    $.ajax({
       url: 'pathToPhpFile.php',
       dataType: 'json',
       success: function(data){
            //data returned from php
       }
    });
)};

http://api.jquery.com/jQuery.ajax/


1
왜 AJAX인가? 동일한 PHP 파일 (내 질문을 업데이트) 것
마이크

3
@Barmar가 설명했기 때문에 그렇게 작동하지 않습니다. PHP를 별도의 파일에 배치 한 다음 AJAX 요청에서 해당 파일을 참조 할 수 있습니다.
AO

1
"url :"매개 변수는 외부 PHP 파일을 참조합니다. 동일한 파일에서 PHP 함수를 어떻게 참조 할 수 있습니까?
Joe Doe

2
@JoeDoe 당신은 외부 파일에 함수를 배치 할 수 없습니다
AO

2

페이지를 다시로드하지 않는 솔루션

<?php
  function removeday() { echo 'Day removed'; }

  if (isset($_GET['remove'])) { return removeday(); }
?>


<!DOCTYPE html><html><title>Days</title><body>

  <a href="" onclick="removeday(event)" class="deletebtn">Delete</a>

  <script>
  async function removeday(e) {
    e.preventDefault(); 
    document.body.innerHTML+= '<br>'+ await(await fetch('?remove=1')).text();
  }
  </script>

</body></html>

1

다음과 같이 시도하십시오.

<!--Include jQuery-->
<script type="text/javascript" src="jquery.min.js"></script> 

<script type="text/javascript"> 
function doSomething() { 
    $.get("somepage.php"); 
    return false; 
} 
</script>

<a href="#" onclick="doSomething();">Click Me!</a>

0

이것이 가능한 가장 쉬운 방법입니다. 게시물을 통해 양식이 게시되면 php 기능을 수행하십시오. 페이지를 다시로드 할 필요없이 비동기 적으로 기능을 수행하려면 AJAX가 필요합니다.

<form method="post">
    <button name="test">test</button>
</form>

    <?php
    if(isset($_POST['test'])){
      //do php stuff  
    }
    ?>

Note that if you want to perform function asynchronously (without the need to reload the page), then you'll need AJAX.글쎄, onclick그가 원하는 것이 정확히 표시됩니다. ¬_¬
Synetech

0

다음은 AJAX의 대안이지만 jQuery는없고 일반 JavaScript 만 있습니다.

작업을 호출하려는 첫 번째 / 기본 PHP 페이지에 추가하지만 잠재적 a태그 (하이퍼 링크)에서 button요소로 변경하여 봇이나 악성 앱 (또는 기타)에 의해 클릭되지 않도록합니다.

<head>
<script>
  // function invoking ajax with pure javascript, no jquery required.
  function myFunction(value_myfunction) {
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange = function() {
      if (this.readyState == 4 && this.status == 200) {
        document.getElementById("results").innerHTML += this.responseText; 
        // note '+=', adds result to the existing paragraph, remove the '+' to replace.
      }
    };
    xmlhttp.open("GET", "ajax-php-page.php?sendValue=" + value_myfunction, true);
    xmlhttp.send();
  }

</script>
</head>

<body>

  <?php $sendingValue = "thevalue"; // value to send to ajax php page. ?> 

  <!-- using button instead of hyperlink (a) -->
  <button type="button" onclick="value_myfunction('<?php echo $sendingValue; ?>');">Click to send value</button>

  <h4>Responses from ajax-php-page.php:</h4>
  <p id="results"></p> <!-- the ajax javascript enters returned GET values here -->

</body>

button클릭하면 onclickhead의 자바 스크립트 함수를 사용하여이 $sendingValue페이지 앞의 많은 예제와 같이 ajax를 통해 다른 php-page 로 보냅니다 . 다른 페이지 인 ajax-php-page.php은 GET 값을 확인하고 다음을 반환합니다 print_r.

<?php

  $incoming = $_GET['sendValue'];

  if( isset( $incoming ) ) {
    print_r("ajax-php-page.php recieved this: " . "$incoming" . "<br>");
  } else {
    print_r("The request didn´t pass correctly through the GET...");
  }

?>

print_r그런 다음 응답 이 반환되고 다음과 함께 표시됩니다.

document.getElementById("results").innerHTML += this.responseText;

+=채우고은 제거, 기존의 HTML 요소에 추가 +단지 업데이트를하고 HTML의 기존 내용 대체 p요소를 "results".


-3

이것을 시도하면 잘 작동합니다.

<script>
function echoHello(){
 alert("<?PHP hello(); ?>");
 }
</script>

<?PHP
FUNCTION hello(){
 echo "Call php function on onclick event.";
 }

?>

<button onclick="echoHello()">Say Hello</button>

2
그것은 작동하지 않습니다 (당신이 그것을 정리하더라도), 게다가 작동 하지 않습니다 . PHP 코드는로드 될 때 사전 처리됩니다. 런타임에 실행되지 않습니다.
Synetech

질문을 읽지 않았거나 작동하지 않으므로 코드를 테스트하지 않았습니다.
Mr PizzaGuy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.