5

onsubmitJavaScriptを使用して PHP から関数を呼び出すことは可能ですか? もしそうなら、誰かがそれがどのように行われるかの例を教えてもらえますか?

function addOrder(){
    $con = mysql_connect("localhost", "146687", "password");
    if(!$con){
        die('Could not connect: ' . mysql_error())
    }

    $sql = "INSERT INTO orders ((user, 1st row, 2nd row, 3rd row, 4th row)
    VALUES ($session->username,1st variable, 2nd variable, 3rd variable, 4th variable))";

    mysql_query($sql,$con)
    if(mysql_query($sql,$con)){
        echo "Your order has been added";
    }else{
        echo "There was an error adding your order to the databse: " . mysql_error();
    }
}

それが私が呼び出したい関数です。注文システムです。必要な各アイテムの数量を入力し、送信をクリックすると、注文がテーブルに追加されます

4

7 に答える 7

20

JavascriptからPHP関数を呼び出すことはできません...

Javascript はクライアント言語 (Web ページを受信した後に Web ブラウザーで実行される) であり、PHP はサーバー側 (Web ページがレンダリングされる前に実行される) です。別の電話をかける方法はありません。

...しかし、外部 PHP スクリプトの結果を取得することはできます

xhttprequest と呼ばれる Javascript 関数があり、Web サーバー上の任意のスクリプトを呼び出してその応答を得ることができます。したがって、問題を解決するには、テキスト (または XML、または JSON) を出力する PHP スクリプトを作成し、それを呼び出して、Javascript で回答を分析します。

このプロセスは私たちがAJAXと呼んでいるものであり、優れたツールを使用すると、自分で行うよりもはるかに簡単に実行できます。JQueryをご覧ください。AJAX ヘルパーが組み込まれた強力でありながら使いやすい Javascript ライブラリです。

JQuery の例 (クライアント側):

$.ajax({
   type: "POST", // the request type. You most likely going to use POST
   url: "your_php_script.php", // the script path on the server side
   data: "name=John&location=Boston", // here you put you http param you want to be able to retrieve in $_POST 
   success: function(msg) {
     alert( "Data Saved: " + msg ); // what you do once the request is completed
   }
于 2008-10-21T12:25:50.283 に答える
4

JavaScript を使用して間接的に PHP 関数を呼び出すことができます。他の人がすでに述べたように、何らかのタイプのリクエストを実行したいと思うでしょう - これは必ずしも Ajax である必要はありません。同期かもしれません。あなたが達成しようとしていることを正確に知らなくても、私が提案することは次のとおりです。

  • フォームの送信オプションにイベント ハンドラーを追加します (または、Ajax を使用しない場合は標準の送信を使用します)。
  • ページへのアドレスの POST またはクエリ文字列で、PHP 関数に渡す必要のあるパラメーターをまとめます。
  • リクエストを起動します (非同期または送信経由)
  • リクエスト対象のPHPスクリプトで、$_POSTまたは$_GETからパラメータを抜き出します。
  • パラメータを使用して、必要な PHP 関数を呼び出します。
  • リクエストが完了したら、レスポンスをエコー バックし、必要に応じて解析します。

繰り返しますが、これは少し一般的ですが、あなたの質問もそうです。うまくいけば、これは何らかの方向性を示します。

于 2008-10-21T12:03:15.240 に答える
4

AJAXが必要なようです。

これは、単一の回答としては大きすぎるトピックですが、それでうまくいくはずです。

基本的に、Javascript は HTTP リクエストをサーバー上の PHP スクリプトに送信し、そのレスポンスに対して何かを行います。 JSONについても学びたいと思うでしょう。

于 2008-10-21T10:32:26.687 に答える
2

最も近いのは、PHP 関数を AJAX 呼び出しにラップできるxajaxです。Zend Framework を使い始める前にかなり使用しましたが、オブジェクト指向の方法で実装するのは難しすぎることがわかりました。

xajax を使用して、通常のロジックをすべて実行する PHP 関数を作成し、AJAX (アラート ボックス、HTML、CSS の変更など) を介してブラウザーを操作する ObjectResponse オブジェクトを返します。関数を xajax に登録すると、xajax は JavaScript を HTML のセクションに吐き出します。

HTML では、xajax が生成した JavaScript 関数を呼び出すだけで、残りは AJAX を介して処理されます。

于 2008-10-21T12:03:30.687 に答える
2

あなたは次のようなことをしたいと思うでしょう:

<form action="add_order.php" method="POST" id="add_order_form">
<!-- all of your form fields -->
<input type='submit' value='Add Order'>
</form>

<script type="text/javascript">
$("#add_order_form").submit(function() {
    var action = $("#add_order_form").attr("action");
    var data = $("#add_order_form").serialize();
    $.post(action, data, function(json, status) {
        if(status == 'success') {
            alert(json.message);
        } else {
            alert('Something went wrong.');
        }
    }, "json"); 
    return false;
});
</script>

add_order.php次に、次のような名前の PHP ファイルを作成します。

$success = 0;
$con = mysql_connect("localhost", "146687", "password");
if(!$con) {
    $message = 'Could not connect to the database.';
} else {
    // SANITIZE DATA BEFORE INSERTING INTO DATABASE
    // LOOK INTO MYSQL_REAL_ESCAPE_STRING AT LEAST,
    // PREFERABLY INTO PREPARED STATEMENTS
    $query_ok = mysql_query("INSERT INTO `orders` ....");
    if($query_ok) {
        $success = 1;
        $message = "Order added.";
    } else {
        $message = "Unable to save information";
    }
}

print json_encode(array('success' => $success, 'message' => $message));

この美しさを機能させるには、jQuery Web サイトにアクセスしてダウンロードし、jquery.js ファイルを含める必要があります。

上記をテストしていませんが、動作するはずです。幸運を。

于 2008-10-21T14:02:13.787 に答える
0

申し訳ありませんが、あなたの質問はあまりにも基本的です。formsubmit Ajax で呼び出したいPHP 関数によっては、役に立ちません。PHP と JavaScript の基本的な (クライアント側/サーバー側) の違いを認識していますか?

于 2008-10-21T11:48:17.987 に答える
-1

はい、ajaxを学ぶためのもう1つの素晴らしくて簡単なチュートリアルは次のとおりです。

http://24ways.org/2005/easy-ajax-with-prototype/

プロトタイプは、プロジェクトをこれまで行ったことがなく、多くの機能を元に戻す必要がある場合に推奨するもう1つの方法です。

http://www.prototypejs.org/

幸運を!

于 2008-10-21T10:47:17.360 に答える