関数 - php ボタン 処理




フォームアクションでPHP関数を実行するにはどうすればよいですか? (5)

username()関数を別のページに置いて、そのページにフォームを送ることができます...

私はフォームアクションでPHPスクリプトから関数を実行しようとしています。

私のコード:

<?php
require_once ( 'username.php' );

echo '
<form name="form1" method="post" action="username()">
  <p>
    <label>
      <input type="text" name="textfield" id="textfield">
    </label>
  </p>
  <p>
    <label>
      <input type="submit" name="button" id="button" value="Submit">
    </label>
  </p>
</form>';
?>

私はフォームをエコーし​​ますが、username.phpから呼び出される関数 "username"を実行します。 上記と同じようなやり方でこれをどうやって行うことができますか?


それはこれのようなものです...自分のページにデータを投稿し、おそらくユーザーの入力をチェックします。

   <?php
    require_once ( 'username.php' );

    if(isset($_POST)) {
      echo "form post"; // ex $_POST['textfield']
    }


    echo '
    <form name="form1" method="post" action="' . $_SERVER['PHP_SELF'] . '">
      <p>
        <label>
          <input type="text" name="textfield" id="textfield">
        </label>
      </p>
      <p>
        <label>
          <input type="submit" name="button" id="button" value="Submit">
        </label>
      </p>
    </form>';
    ?>

変数には異なる規則があるため、PHP関数では文字列の中で評価されません。

<?php
function name() {
  return 'Mark';
}

echo 'My name is: name()';   // Output: My name is name()
echo 'My name is: '. name(); // Output: My name is Mark

HTML内のタグに対するactionパラメータは、実行するPHP関数を参照するべきではありません。 アクションは、フォーム入力を処理して新しいHTMLをユーザーに返すWebサーバー上のページを参照する必要があります。 これは、フォームを出力するPHPスクリプトと同じ場所にすることも、アクションを処理するために別のPHPファイルを作成する方が好きな人もいます。

基本的なプロセスはいずれの方法でも同じです:

  1. ユーザーにHTMLフォームを生成します。
  2. ユーザーがフォームに記入し、[submit]をクリックします。
  3. フォームデータは、サーバー上のアクションによって定義された場所に送信されます。
  4. スクリプトはデータを検証し、そのデータで何かを行います。
  5. 通常、新しいHTMLページが返されます。

簡単な例は次のとおりです。

<?php
// $_POST is a magic PHP variable that will always contain
// any form data that was posted to this page.
// We check here to see if the textfield called 'name' had
// some data entered into it, if so we process it, if not we
// output the form.
if (isset($_POST['name'])) {
  print_name($_POST['name']);
}
else {
  print_form();
}

// In this function we print the name the user provided.
function print_name($name) {
  // $name should be validated and checked here depending on use.
  // In this case we just HTML escape it so nothing nasty should
  // be able to get through:
  echo 'Your name is: '. htmlentities($name);
}

// This function is called when no name was sent to us over HTTP.
function print_form() {
  echo '
    <form name="form1" method="post" action="">
    <p><label><input type="text" name="name" id="textfield"></label></p>
    <p><label><input type="submit" name="button" id="button" value="Submit"></label></p>
    </form>
  ';
}
?>

将来の情報については、PHPチュートリアルを読むことをお勧めします: http://php.net/tut.php : http://php.net/tut.php

フォームの取り扱いについてのセクションもあります。


私はusername()が返すはずのものがないので、あなたが達成しようとしていることを理解しているとは思えませんが、そのようなものを試してみるといいかもしれません。 また、ページ全体をエコーし​​ないで、そのようなものを使用することをお勧めします。読みやすく保守する方がはるかに簡単です。

<?php
require_once ( 'username.php' );
if (isset($_POST)) {
  $textfield = $_POST['textfield']; // this will get you what was in the
                                    // textfield if the form was submitted
}
?>

<form name="form1" method="post" action="<?php echo($_SERVER['PHP_SELF']) ?">
  <p>Your username is: <?php echo(username()) ?></p>
  <p>
    <label>
      <input type="text" name="textfield" id="textfield">
    </label>
  </p>
  <p>
    <label>
      <input type="submit" name="button" id="button" value="Submit">
    </label>
  </p>
</form>

結果は同じページに投稿されます。 最初にページを表示すると、空のフォームのみが表示されます。submitを押すと、テキストフィールドは$textfield変数になり、必要に応じて再度表示することができます。

私はusername()関数があなたに結果を送信すべき場所のURLを返すはずだったのかどうかはわかりませんが、それはあなたのフォームのaction属性に必要なものです。 サンプル段落に結果を表示して、結果をどのように表示するかを確認します。 「あなたのユーザー名は...」の部分を参照してください。

//編集

ページを離れずに値を送信する場合は、AJAXを使用します。 またはGoogleでjQueryを検索します。

おそらくあなたの関数はエコーではなく、ユーザー名を返すようにしたいでしょう。 しかし、もしあなたが関数からそれをエコーし​​たいのであれば、HTMLフォームの<?php username() ?>ように呼び出すだけ<?php username() ?>

さらに進める前に、ページのクライアント/サーバープロセスの流れを理解する必要があると思います。 上のサンプルコードがform.phpと呼ばれているとしましょう。

  1. あなたのform.phpが呼び出されます。
  2. form.phpはHTMLを生成し、クライアントのブラウザに送信されます。
  3. クライアントは結果のHTMLフォームのみを表示します。
  4. ユーザーがボタンを押すと、次の2つの選択肢があります。a)ブラウザに通常の操作をさせて、フォームフィールドの値をactionで指定されたページに送信します(この場合、URLは現在のPHP_SELFで定義されます)。 page.php)。 または、b)ページを更新せずにこのデータをページにプッシュするためにjavascriptを使用します。これは一般にAJAXと呼ばれます。
  5. あなたのケースでは、username.phpに変更することができ、ユーザ名が存在し、必要な値を含むHTMLを再生成したい場合は、ステップ1に戻ります。

<?php
require_once ( 'username.php' );

if (isset($_POST['textfield'])) {
    echo username();
    return;
}

echo '
<form name="form1" method="post" action="">
  <p>
    <label>
      <input type="text" name="textfield" id="textfield">
    </label>
  </p>
  <p>
    <label>
      <input type="submit" name="button" id="button" value="Submit">
    </label>
  </p>
</form>';
?>

フォームが送信されるページで関数を実行する必要があります。





php