6

私は(ある程度)PHPを初めて使用しますが、周りを見回しても、私の質問に正確に対応する情報が見つからないので、ここにあります。

2つのフィールドと送信ボタンを持つフォームを宣言するとします。

<form name = "tryLogin" action = "logIn()" method = "post">
            Username: <input type = "text" name = "username" placeholder = "username.."><br>
            Password: <input type = "text" name = "password" placeholder = "password.."><br>
            <input type = "submit" value = "Submit">
</form>

ここでは、アクションを関数「logIn()」として設定しようとしたことがわかります。これは、このファイルのヘッダーにすでに含まれています。

外部のphpファイルには次のものがあります。

function logIn()
{
if($_POST['username'] == "shane" && $_POST['password'] == "shane")
{
    $_SESSION['loggedIn'] = '1';
    $_SESSION['user'] = $_POST['username'];
}

header ("Location: /index.php");
}

function logOut()
{
$_SESSION['loggedIn'] = '0';
header ("Location: /index.php");
}

(「これを行うべきではない、それを行う」は無視してください。ここで絵を描いているだけです)。

だから基本的に私はフォームをその特定の機能に送信したいのですが、それは可能ですか?私はここで根本的に間違ったことをしていますか?

4

3 に答える 3

5

他の人が言っているように、投稿を関数に自動的に送信することはできませんが、PHPコードで送信されるフォームに応じて、PHP側で何をするかを動的に決定できます。1つの方法は、次のように、同じページでさまざまなアクションを処理できるように、非表示の入力を使用してロジックを定義することです。

<form name="tryLogin" action="index.php" method="post">
            <input type="hidden" name="action" value="login" />
            Username: <input type="text" name="username" placeholder="username.."><br />
            Password: <input type="text" name="password" placeholder="password.."><br />
            <input type="submit" value="Submit">
</form>

<form name="otherform" action="index.php" method="post">
            <input type="hidden" name="action" value="otheraction" />
            Type something: <input type="text" name="something"><br />
            <input type="submit" value="Submit">
</form>

そしてあなたのPHPで:

if (isset($_POST['action'])) {
    switch($_POST['action']) {
    case 'login':
        login();
        break;
    case 'otheraction':
        dosomethingelse();
        break;
    }
}
于 2012-12-31T02:26:38.380 に答える
2

いいえ、フォームをページに送信し、フォームが送信された場合は関数を実行します。

HTML:

<form action="index.php" method="post">

PHP(index.php):

if ($_SERVER['REQUEST_METHOD'] == "POST"){
    // Run your function
    login();
}
于 2012-12-31T02:20:49.367 に答える
2

あなたの質問に直接答えるために、はい、あなたは何か間違ったことをしています。ただし、簡単に修正できます。

フォームのアクションは、フォームを送信する場所です。つまり、リクエストを送信するページです。コードが「ページの上部にある」と言っているので、フォームをそのページに送信し直す必要があります。したがって、ページの完全なURLをアクションに含めるか、空白のままにすることができます。

<form name = "tryLogin" action = "" method = "post">

送信を処理するために、PHPにはクライアント側のコードから関数を直接呼び出す方法はありませんが、現在の「タスク」を含む非表示フィールドを送信することで、よりリクエストを処理する方法でリクエストを処理できます。

たとえば、HTMLフォームで、次を追加してみてください。

<input type="hidden" name="task" value="logIn" />

次に、PHPコードで、これを追加してみてください。

if (isset($_POST['task'])) {
    if ($_POST['task'] == 'logIn') {
        // the user is trying to log in; call the logIn() function
        logIn();
    } else if ($_POST['task'] == 'logOut') {
        // the user is trying to log out; call the logOut() function
        logOut();
    }
}

taskこのコードは、フィールドが投稿されているかどうかを確認することにより、フォームが送信されているかどうかを確認します。次に、値を確認します。の場合logInlogIn()関数が呼び出されます。または、の場合logOutlogOut()関数が呼び出されます。

ログアウトフォームを作成するには、それに応じてアクションを調整し、上記のように値が。の非表示フィールドを追加しますlogOut

于 2012-12-31T02:24:19.530 に答える