web-dev-qa-db-ja.com

HTMLまたはJavascriptからPHPファイルを呼び出す方法

私は長い間探し回っていましたが、この一見基本的な質問に答える場所を見つけることができません。ページがすぐにリロードされるか結果がすぐに表示されるかは気にしません。私のウェブサイトにPHPファイルを実行させるボタンが必要です。それでおしまい。そして、すべてのWebサイトがHTMLでPHPコードを直接実行する方法を教えているか、ajaxを使用するように指示していることがわかりました。必要であることが判明した場合はajaxを使用しますが、ajaxが存在する前にPHPが使用されていたため、もっと簡単な方法があると思います。 HTML内にコードをうまく記述できるのであれば、そこでファイルを参照したり、Javascriptで簡単に呼び出したりできないのはなぜですか?

Ajaxが唯一の方法であることが判明した場合、ボタンを押すとテキストファイルを作成するPHPファイルを呼び出すには、何を知る必要がありますか?私は自分用のシンプルなブログサイトを作成しています。サイトのコードと、textareaに書いた投稿を受け取ってすぐに表示できるjavascriptがあります。サーバーに永続的なブログ投稿を作成するPHPファイルにリンクしたいだけなので、ページをリロードしたときに投稿がそこに残っています。

読んで答えてくれてありがとう。

14
Jackery

ボタンでPHPを呼び出す方法は?

ページがすぐにリロードされるか結果がすぐに表示されるかは気にしません。

良い!

:ページを更新したくない場合は、「Ok ...を参照してください。しかし、とにかくAjaxを使用するにはどうすればよいですか?以下。

私は自分のウェブサイトにPHPファイルを実行するボタンを作りたいだけです。

これは、単一のボタンを持つフォームで実行できます。

<form action="">
  <input type="submit" value="my button"/>
</form>

それでおしまい。

かなり。また、ajaxが実際に進むべき方法である場合があることに注意してください。

それはあなたが望むものに依存します。一般的に、ページの再読み込みを避けたい場合にのみ、ajaxが必要です。それでもあなたはそれを気にしないと言っています。


JavaScriptからPHPを直接呼び出せないのはなぜですか?

HTML内にコードをうまく記述できるのであれば、そこでファイルを参照したり、Javascriptで簡単に呼び出したりできないのはなぜですか?

PHPコードはHTML just fineにありません。これは、ほとんどのサーバー側スクリプト言語(PHP、JSP、ASPを含む)の動作方法によって作成された錯覚です。サーバー上で、何らかのリモート呼び出しがなければ、クライアント(ブラウザー)からは到達できません。

ブラウザにページのソースコードを表示するように依頼すると、この証拠を見ることができます。そこにはPHPコードが表示されません。これは、PHPコードがクライアントに送信されないため、クライアントから実行できないためです。クライアントがPHP=コードの実行をトリガーできるようにするためにリモート呼び出しを行う必要がある理由。

フォームを使用しない場合(上記を参照)、JavaScriptからのリモート呼び出しをAjaxと呼ばれる小さな操作で実行できます。また、PHPでやりたいことをJavaScriptで直接行うことができるかどうかを検討することもできます。


anotherPHP file?

フォームを使用して呼び出しを行います。ユーザーを特定のファイルに誘導することができます:

<form action="myphpfile.php">
  <input type="submit" value="click on me!">
</form>

ユーザーはmyphpfile.phpページに表示されます。現在のページで機能するようにするには、actionを空の文字列に設定します(これは、前に示した例で行ったことです)。

サーバーに永続的なブログ投稿を作成するPHPファイルにリンクしたいので、ページをリロードしたときに投稿がまだ残っています。

サーバーで操作を行いたい場合、フォームに必要なフィールドを持たせる必要があります(type="hidden"POSTを使用する場合でも):

<form action="" method="POST">
  <input type="text" value="default value, you can edit it" name="myfield">
  <input type="submit" value = "post">
</form>

ボタンを押すとテキストファイルを作成するPHPファイルを呼び出すには、何を知っておく必要がありますか?

参照: PHPでファイルに書き込む方法 .


サーバーのPOSTからデータを受信するにはどうすればよいですか?

聞いてくれてうれしいです... newb はじめに、フォローできる小さなテンプレートを紹介します。

<?php
    if ($_SERVER['REQUEST_METHOD'] === 'POST')
    {
        //Ok we got a POST, probably from a FORM, read from $_POST.
        var_dump($_PSOT); //Use this to see what info we got!
    }
    else
    {
       //You could assume you got a GET
       var_dump($_GET); //Use this to see what info we got!
    }
 ?>
 <!DOCTYPE html>
 <html lang="en">
   <head>
     <meta char-set="utf-8">
     <title>Page title</title>
   </head>
   <body>
     <form action="" method="POST">
       <input type="text" value="default value, you can edit it" name="myfield">
       <input type="submit" value = "post">
     </form>
   </body>
 </html>

注:var_dumpは削除できますが、これは単にデバッグを目的としています。


どうすれば...

私は次の段階を知っています、あなたはどうするかを尋ねるでしょう:

  1. 変数をPHPファイルから別のファイルに渡す方法は?
  2. ユーザーを覚える/ログインする方法は?
  3. ページをリロードするときに表示される不快なメッセージを回避する方法は?

そのための唯一の答えがあります:セッション。

Post-Redirect-Get のより広範なテンプレートを提供します

<?php
    if ($_SERVER['REQUEST_METHOD'] === 'POST')
    {
        var_dump($_PSOT);
        //Do stuff...
        //Write results to session
        session_start();
        $_SESSION['stuff'] = $something;
        //You can store stuff such as the user ID, so you can remeember him.
        //redirect:
        header('Location: ', true, 303);
        //The redirection will cause the browser to request with GET
        //The results of the operation are in the session variable
        //It has empty location because we are redirecting to the same page
        //Otherwise use `header('Location: anotherpage.php', true, 303);`
        exit();
    }
    else
    {
        //You could assume you got a GET
        var_dump($_GET); //Use this to see what info we got!
        //Get stuff from session
        session_start();
        if (array_key_exists('stuff', $_SESSION))
        {
           $something = $_SESSION['stuff'];
           //we got stuff
           //later use present the results of the operation to the user.
        }
        //clear stuff from session:
        unset($_SESSION['stuff']);
        //set headers
        header('Content-Type: text/html; charset=utf-8');
        //This header is telling the browser what are we sending.
        //And it says we are sending HTML in UTF-8 encoding
    }
 ?>
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta char-set="utf-8">
    <title>Page title</title>
  </head>
  <body>
    <?php if (isset($something)){ echo '<span>'.$something.'</span>'}?>;
    <form action="" method="POST">
      <input type="text" value="default value, you can edit it" name="myfield">
      <input type="submit" value = "post">
    </form>
  </body>
</html>

認識できない関数呼び出しについては、php.netをご覧ください。また、まだお持ちでない場合は、HTML5に関する優れたチュートリアルを入手してください。

また、UTF-8を使用します TF-8のため


私は自分のために簡単なブログサイトを作成しています。このサイトのコードと、テキストエリアに書いた投稿を受け取ってすぐに表示できるJavaScriptを持っています。

CMS(Codepress、Joomla、Drupalなど)を使用している場合は?それはあなたが物事をどうやってやったかについていくつかの制約を課します。

また、フレームワークを使用している場合は、ドキュメントを参照するか、フォーラム/メーリングリスト/ディスカッションページ/連絡先で質問するか、著者に質問してください。


わかりました...しかし、とにかくAjaxを使用する方法は?

まあ... AjaxはいくつかのJavaScriptライブラリによって簡単になりました。あなたは初心者なので、 jQuery をお勧めします。

それでは、jQueryを使用してAjax経由でサーバーに何かを送信しましょう。この例では $。ajax の代わりに $。post を使用します。

<?php
    if ($_SERVER['REQUEST_METHOD'] === 'POST')
    {
        var_dump($_PSOT);
        header('Location: ', true, 303);
        exit();
    }
    else
    {
        var_dump($_GET);
        header('Content-Type: text/html; charset=utf-8');
    }
 ?>
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta char-set="utf-8">
    <title>Page title</title>
    <script>
        function ajaxmagic()
        {
            $.post(                             //call the server
                "test.php",                     //At this url
                {
                    field: "value",
                    name: "John"
                }                               //And send this data to it
            ).done(                             //And when it's done
                function(data)
                {
                    $('#fromAjax').html(data);  //Update here with the response
                }
            );
        }
    </script>
  </head>
  <body>
    <input type="button" value = "use ajax", onclick="ajaxmagic()">
    <span id="fromAjax"></span>
  </body>
</html>

上記のコードはPOSTリクエストをページtest.phpに送信します。

:必要に応じて、sessionsajaxなどを混在させることができます。


どうすれば...

  1. データベースに接続するにはどうすればよいですか?
  2. SQLインジェクションを防ぐにはどうすればよいですか?
  3. Mysql_ *関数を使用しないのはなぜですか?

...これらまたはその他については、別の質問をしてください。これは多すぎる。

53
Theraot

私はちょうどPHPファイルを実行する私のウェブサイト上のボタンが欲しいです

<form action="my.php" method="post">
    <input type="submit">
</form>

ただし、一般的に、保存する新しいデータをサーバーに送信しない限り、リンクを使用するだけです。

<a href="my.php">run php</a>

(ただし、サーバーではなく、ユーザーの視点から何が起こるかを説明するリンクテキストを使用する必要があります)


私は自分のために簡単なブログサイトを作成しています。このサイトのコードと、テキストエリアに書いた投稿を受け取ってすぐに表示できるJavaScriptを持っています。サーバーに永続的なブログ投稿を作成するPHPファイルにリンクしたいので、ページをリロードしたときに投稿がまだ残っています。

これはより巧妙です。

まず、フォームとPOST(保存するデータを送信しているため)を使用する必要があります。

次に、データをどこかに保存する必要があります。これは通常、データベースを使用して行われます。 PHPのPDOライブラリーを読んでください。これは、データベースと対話する標準的な方法です。

次に、データを再び引き出す必要があります。ここでの最も簡単なアプローチは、クエリ文字列を使用して、表示するエントリを持つデータベース行の主キーを渡すことです。

<a href="showBlogEntry.php?entry_id=123">...</a>

SQLインジェクションとXSSについても必ず読んでください。

0
Quentin

質問ですでに述べたように、複数の選択肢があります。非常に基本的なアプローチは、method属性でPHPファイルを参照するタグを使用することです。ただし、難解なように聞こえるかもしれませんが、AJAXはより完全なアプローチです。 AJAX呼び出し(jQueryと組み合わせて)は次のように簡単にできることを考慮すると:

$.post("yourfile.php", {data : "This can be as long as you want"});

また、サーバーリクエストが完了した後に機能をトリガーするなど、より柔軟なソリューションが得られます。お役に立てれば。

0
ferret96

フォームデータをphpファイルの挿入関数に投稿するだけです。以下を参照してください:)

class DbConnect
{
// Database login vars
private $dbHostname = '';
private $dbDatabase = '';
private $dbUsername = '';
private $dbPassword = '';
public $db = null;

public function connect()
{

    try
    {
        $this->db = new PDO("mysql:Host=".$this->dbHostname.";dbname=".$this->dbDatabase, $this->dbUsername, $this->dbPassword);
        $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }
    catch(PDOException $e)
    {
        echo "It seems there was an error.  Please refresh your browser and try again. ".$e->getMessage();
    }
}

public function store($email)
{
    $stm = $this->db->prepare('INSERT INTO subscribers (email) VALUES ?');
    $stm->bindValue(1, $email);

    return $stm->execute();
}
}
0
Luke