ओनक्लिक के साथ PHP फ़ंक्शन निष्पादित करें


92

मैं एक PHP फ़ंक्शन को कॉल करने के लिए केवल एक सरल समाधान खोज रहा हूं, जब एक टैग पर क्लिक किया जाता है।

पीएचपी:

function removeday() { ... }

HTML:

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

अद्यतन: HTML और PHP कोड एक ही PHP फ़ाइल में हैं


5
HTML जावास्क्रिप्ट फ़ंक्शंस चलाता है, जो क्लाइंट पर चलता है। PHP सर्वर पर चलता है। आपको AJAX के बारे में जानने की आवश्यकता है।
बारमर

लेकिन क्यों AJAX? पूरा कोड एक ही PHP फ़ाइल में है।
माइक

1
AJAX क्यों? खैर, यह पता लगाने के लिए, आप बस किसी भी php स्क्रिप्ट को चला सकते हैं और इसके निष्पादन का कोड देख सकते हैं। फिर से - अजाक्स एकमात्र तरीका है जो आप कर सकते हैं
यांग

2
चेक किया गया उत्तर एक बटन की तरह दिखने पर काम करेगा यदि आप उपयोग करते हैं <a role="button" href="?action=removeday" class="debatebtn">Delete</a>जहां कार्रवाई पकड़ी गई है और निकाले गए () फ़ंक्शन के समान चलता है if($action == 'removeday'){ removeday(); }। मुझे पता है कि यह देर हो चुकी है, लेकिन मुझे लगता है कि यह अभी भी इस मुद्दे पर किसी की मदद कर सकता है। C§
सीएसएस

जवाबों:


142

सबसे पहले, समझें कि आपके पास एक साथ काम करने वाली तीन भाषाएँ हैं:

  • PHP: यह केवल सर्वर द्वारा चलता है और लिंक (GET) पर क्लिक करने या फ़ॉर्म सबमिट करने (POST) जैसे अनुरोधों का जवाब देता है।

  • HTML और जावास्क्रिप्ट: यह केवल किसी के ब्राउज़र में चलता है (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 केवल अनुरोधों (GET, POST, PUT, PATCH, और DELETE के माध्यम से $ _REQUEST) का जवाब देती है, यह है कि आपको एक ही फ़ाइल में रहते हुए भी PHP फ़ंक्शन चलाना होगा। यह आपको सुरक्षा का एक स्तर देता है, "क्या मुझे इस उपयोगकर्ता के लिए इस स्क्रिप्ट को चलाना चाहिए या नहीं?"।

यदि आप पृष्ठ को ताज़ा नहीं करना चाहते हैं, तो आप एसिंक्रोनस जावास्क्रिप्ट और XML (AJAX) नामक एक विधि के माध्यम से ताज़ा किए बिना PHP के लिए अनुरोध कर सकते हैं।

हालांकि यह कुछ ऐसा है जिसे आप YouTube पर देख सकते हैं। बस "jquery ajax" खोजें

मैं लारवेल को सलाह देता हूं कि कोई भी नया शुरू करने के लिए सही: http://laravel.com/


3
बस उल्लेख करने के लिए, मैं मान रहा हूं कि आप PHP में काफी नए हैं, मैं एक फ्रेमवर्क के रूप में laravel.com की सिफारिश करना चाहूंगा । व्यक्तिगत रूप से मुझे पूरा 'लर्निंग जेनरिक php' को छोड़ना और सीधे एक शक्तिशाली ढांचे में जाना पसंद होगा। यह वह है जिसे मैं अब भी उपयोग करता हूं।
माइकल जे। कल्किन्स

5
यार, बहुत बहुत धन्यवाद, आपका जवाब मुझे इस संदेह के साथ मदद नहीं करता है, लेकिन यह भी मुझे php इतना बेहतर समझ में आया! फिर से धन्यवाद!
महसूस करें

धन्यवाद मैं इसके लिए देख रहा हूँ। मैं इसे वर्डप्रेस के साथ कैसे लागू कर सकता हूं
फायरफॉग

1
धन्यवाद, मैं अपने उल्लेख के कारण लार्वा पर ध्यान केंद्रित करना शुरू करूँगा।
मोहम्मद अबुलनास्र

1
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

जावास्क्रिप्ट में, एक अजाक्स फ़ंक्शन करें,

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
वैनिला जावास्क्रिप्ट में प्रदान किया गया एक ही समाधान शुरुआती लोगों को बहुत बेहतर बनाने में मदद करता है। मैं इसे जावास्क्रिप्ट के एक अधिक अनुभवी उपयोगकर्ता के रूप में कहता हूं जो कभी पूर्ण शुरुआत था लेकिन पीएचपी के साथ कुशल था।
केन इनग्राम

11

यह आपको AJAX के माध्यम से करना होगा । मैं भारी आप के लिए यह आसान बनाने के लिए jQuery का उपयोग reccommend ....

$("#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 अनुरोध में संदर्भित करें।
एओ

1
"Url:" पैरामीटर बाहरी php फ़ाइल को संदर्भित करता है, मैं उसी फ़ाइल में php फ़ंक्शन को कैसे संदर्भित कर सकता हूं?
जो डो

2
@JoeDoe आप एक बाहरी फ़ाइल में फ़ंक्शन नहीं रख सकते
AO

11

यह किया जा सकता है और बल्कि साधारण php के साथ अगर यह आपका बटन है

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

और यह आपका php कोड है

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

कोड प्राप्त होने पर कोड प्राप्त होता है जिसे बटन क्लिक करने पर होता है।


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>

1

पृष्ठ पुनः लोड के बिना समाधान

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

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 नहीं, बस नियमित जावास्क्रिप्ट:

इसे पहले / मुख्य 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क्लिक किया जाता है, तो इस से पहले कई उदाहरणों की तरह, onclickहेडेक्स जावास्क्रिप्ट फ़ंक्शन का उपयोग $sendingValueअजाक्स के माध्यम से दूसरे php-पेज पर भेजने के लिए किया जाता है। अन्य पेज, ajax-php-page.phpGET मान के लिए जाँच करता है और साथ लौटता है 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 तत्वों में कहते हैं को हटाने +सिर्फ अद्यतन और एचटीएमएल की मौजूदा सामग्री की जगह 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 कोड पूर्व-संसाधित होता है; यह रनटाइम पर नहीं चलाया जाता है।
सिनटेक

या तो आपने प्रश्न नहीं पढ़ा या आपने अपने कोड का परीक्षण नहीं किया क्योंकि यह काम नहीं करेगा।
श्री पिज्जाग्यू
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.