एक ही फ़ाइल में एक HTML फार्म से एक PHP फ़ंक्शन कॉल करना?




forms post (7)

उपयोगकर्ता एक पाठ में प्रवेश करने और एक सबमिट बटन दबाए जाने के बाद मैं उसी पृष्ठ पर एक PHP फ़ंक्शन निष्पादित करने की कोशिश कर रहा हूं।

पहले मुझे लगता है कि रूपों का उपयोग कर रहा है जब उपयोगकर्ता एक फ़ॉर्म सबमिट करता है, तो एक PHP फ़ंक्शन एक ही पेज पर निष्पादित होगा। उपयोगकर्ता को किसी अन्य पृष्ठ पर निर्देशित नहीं किया जाएगा। प्रसंस्करण किया जाएगा और एक ही पृष्ठ में प्रदर्शित किया जाएगा (पुनः लोड किए बिना)

यहाँ मैं जो तक पहुंचता हूं:

Test.php फ़ाइल में:

    <form action="test.php" method="post">
            <input type="text" name="user" placeholder="enter a text" />
            <input type="submit" value="submit" onclick="test()" />
    </form>

पीएचपी कोड [ test() फ़ंक्शन ] एक ही फाइल में भी है:

    <?php
    function test() {
    echo $_POST["user"]; //just an example of processing
    }    
    ?>

हालांकि, मुझे अभी भी समस्या हो रही है! किसी भी एक विचार है?


अब यह है कि PHP कैसे काम करता है test() निष्पादित होगा जब पृष्ठ लोड हो जाता है, नहीं जब सबमिट बटन क्लिक किया जाता है।

इस तरह की बात करने के लिए, आपके पास एक PHP फ़ाइल में एक एजेएक्स कॉल करने पर onclick विशेषता है।


आप पृष्ठ को ताज़ा करने के बिना फॉर्म जमा कर सकते हैं, लेकिन मेरे ज्ञान के लिए जावास्क्रिप्ट / एजेएक्स कॉल को आपके सर्वर पर PHP स्क्रिप्ट पर इस्तेमाल किए बिना असंभव है। निम्नलिखित उदाहरण jQuery के जावास्क्रिप्ट पुस्तकालय का उपयोग करता है।

एचटीएमएल

<form method = 'post' action = '' id = 'theForm'>
...
</form>

जावा स्क्रिप्ट

$(function() {
    $("#theForm").submit(function() {
        var data = "a=5&b=6&c=7";
        $.ajax({
            url: "path/to/php/file.php",
            data: data, 
            success: function(html) {
                .. anything you want to do upon success here ..
                alert(html); // alert the output from the PHP Script
            }
        });
        return false;
    });
});

प्रस्तुत करने पर अनाम जावास्क्रिप्ट फ़ंक्शन कहलाएगा, जो आपके PHP फ़ाइल के लिए केवल एक अनुरोध भेजता है (जिसे एक अलग फाइल में होना चाहिए, बीटीडब्ल्यू)। ऊपर दिए गए data को यूआरएल एन्कोडेड क्वेरी स्ट्रिंग की आवश्यकता है जिसे आप PHP फाइल में भेजना चाहते हैं (मूल तौर पर फार्म फ़ील्ड के सभी मौजूदा मान)। ये $_GET सुपर ग्लोबल में आपके सर्वर-साइड PHP स्क्रिप्ट पर दिखाई देंगे। एक उदाहरण नीचे है

var data = "a=5&b=6&c=7";

यदि यह आपकी डेटा स्ट्रिंग है, तो PHP स्क्रिप्ट इसे इस रूप में देखेंगे:

echo($_GET['a']); // 5
echo($_GET['b']); // 6
echo($_GET['c']); // 7

हालांकि आपको अपने फार्म के लिए मौजूद फार्म फ़ील्ड से डेटा का निर्माण करना होगा, जैसे:

var data = "user=" + $("#user").val();

(आपको प्रत्येक प्रपत्र फ़ील्ड को 'आईडी' के साथ टैग करने की आवश्यकता होगी, उपरोक्त आईडी 'उपयोगकर्ता' है।)

पीएचपी स्क्रिप्ट चलाता है, success समारोह को कहा जाता है, और PHP स्क्रिप्ट द्वारा निर्मित किसी भी और सभी आउटपुट को चर html में संग्रहित किया जाएगा।

...
success: function(html) {
    alert(html);
}
...

पुनः लोड किए बिना, html y php का प्रयोग केवल यह सही नहीं है, लेकिन यह आप जो चाहते हैं, उसके समान हो सकता है, लेकिन आपको पुनः लोड करना होगा:

<?php
function test() {
  echo $_POST["user"]; 
}    

if (isset($_POST[])){ //If it is the first time, it does nothing   
  test();
}
?>

<form action="test.php" method="post">
            <input type="text" name="user" placeholder="enter a text" />
            <input type="submit" value="submit" onclick="test()" />
</form>

यद्यपि बेकार है, यहां वर्णन करने के लिए यहां एक पूर्ण php स्क्रिप्ट है। आपको सर्वर साइड बनाम क्लाइंट-साइड पर पढ़ना होगा। PHP क्लाइंट-साइड पर नहीं चल सकता है, आपको सर्वर से इंटरैक्ट करने के लिए जावास्क्रिप्ट का उपयोग करना होगा, या पेज रीफ्रेश के साथ रखना होगा। यदि आप यह समझ नहीं सकते हैं, तो कोई रास्ता नहीं है कि आप अपने कोड (या किसी और के) को अपने लाभ में इस्तेमाल करने में सक्षम होंगे।

निम्नलिखित कोड jQuery के बिना AJAX कॉल करता है, और AJAX को स्ट्रीम XML को एक ही स्क्रिप्ट पर कॉल करता है। इसके बाद उपयोगकर्ता बॉक्स के नीचे एक div में अपना उपयोगकर्ता नाम और एक <br/> सम्मिलित किया जाता है

AJAX के रूप में उन्नत होने के कुछ प्रयास करने से पहले कृपया मूलभूत जानकारी सीखने के लिए वापस जाएं। आप केवल अंत में अपने आप को भ्रमित करेंगे और संभावित रूप से अन्य लोगों के पैसे बर्बाद कर रहे होंगे।

<?php
    function test() {
        header("Content-Type: text/xml");
        echo "<?xml version=\"1.0\" standalone=\"yes\"?><user>".$_GET["user"]."</user>"; //output an xml document.
    }
    if(isset($_GET["user"])){
        test();
    } else {
?><html>
    <head>
        <title>Test</title>
        <script type="text/javascript">
            function do_ajax() {
                if(window.XMLHttpRequest){
                    xmlhttp=new XMLHttpRequest();
                } else {
                    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
                }
                xmlhttp.onreadystatechange = function(){
                    if (xmlhttp.readyState==4 && xmlhttp.status==200)
                    {
                        var xmlDoc = xmlhttp.responseXML;
                        data=xmlDoc.getElementsByTagName("user")[0].childNodes[0].nodeValue;
                        mydiv = document.getElementById("Test");
                        mydiv.appendChild(document.createTextNode(data));
                        mydiv.appendChild(document.createElement("br"));
                    }
                }
                xmlhttp.open("GET","<?php echo $_SERVER["PHP_SELF"]; ?>?user="+document.getElementById('username').value,true);
                xmlhttp.send();
            }
        </script>
    </head>
    <body>
        <form action="test.php" method="post">
            <input type="text" name="user" placeholder="enter a text" id="username"/>
            <input type="button" value="submit" onclick="do_ajax()" />
        </form>
        <div id="Test"></div>
    </body>
</html><?php } ?>

SAJAX का उपयोग करें या जावास्क्रिप्ट पर स्विच करें

सज़ाक्स एक ओपन सोर्स टूल है जो प्रोग्रामिंग वेबसाइटों को अजाक्स फ्रेमवर्क का उपयोग करने के लिए तैयार करता है - जिसे एक्सएमएचटीटीपीआरएक्वेस्ट या दूरस्थ स्क्रिप्टिंग के रूप में भी जाना जाता है - जितना आसान हो उतना आसान है। Sajax, PHP, Perl या Python फ़ंक्शन को अपने वेबपृष्ठों से जावास्क्रिप्ट के माध्यम से एक ब्राउज़र रीफ्रेश किए बिना कॉल करना आसान बनाता है।


अगर आप अजाक्स का उपयोग नहीं करना चाहते हैं, और चाहते हैं कि आपका पृष्ठ पुनः लोड हो।

<?php
if(isset($_POST['user']) {
echo $_POST["user"]; //just an example of processing
}    
?>

यह एक बेहतर तरीका है जिसका उपयोग मैं किसी प्रपत्र में लोड किए बिना सबमिट करने के लिए करता हूं।

यदि आप चाहें तो आइफ्रेम को स्टाइल करने के लिए आप कुछ सीएसएस का उपयोग कर सकते हैं।

एक पीएचपी परिणाम iframe में लोड किया जाएगा।

<form method="post" action="test.php" target="view">
  <input type="text" name="anyname" palceholder="Enter your name"/>
  <input type="submit" name="submit" value="submit"/>
  </form>
<iframe name="view" frameborder="0" style="width:100%">
  </iframe>






post