web-dev-qa-db-ja.com

php、送信後に同じページを使用するフォーム

Phpでユーザー/パスと送信ボタンのあるフォームを作成する最も簡単な方法は何だと思いますが、送信した後、別のphpページに移動するのではなく、同じページに戻ります。

If/elseステートメントを考えていますが、何度も試行しても設定方法が少し混乱していますが、それでも望みどおりの結果が得られません。

奇妙な私が投稿する前に君たちが言ったすべてのことをした..しかし...>。<"このような単純なものを言いましょう...

何も入力されていない場合は設定したいですが、sumbitをクリックするとエラーが発生します...簡単なはずですが、なぜそれを理解できないのかわかりません

<?php
function userPass()
{
    echo "<form method='post' action=" . $_SERVER['PHP_SELF'] . ">";
    echo "<input type='text' name='user' /><br/>";
    echo "<input type='text' name='pass' /><br/>";
    echo "<input type='submit' value='Login' />";
}
    if(empty($_POST["user"]))
    {
        userPass();
    }
    if(!(empty($_POST["user"])))
    {
        if($_POST["user"] == "comp")
        {
            echo "Welcome comp";
        }
        else
        {
            echo "Wrong user";
        }
    }
    ?>
9
Dora

他の答えは正しいです。 "action"プロパティでユーザーを現在のページに送り返すだけです。 「isset」を使用して、そうしたかどうかをテストできます。

私が驚いたのは、まだ言及されていないことですが、あなたの入力はサニタイズされておらず、災害に備えています。 巨大アクション属性のインジェクションの脆弱性:

_$_SERVER['PHP_SELF']
_

これをサニタイズしない場合、誰かが表示するURLを変更するだけで、あなたの貧弱なPHPスクリプトは、それをSELFとして処理するよりもよく知ることができません。絶え間ない。

つまり、絶対にmusthtmlspecialchars()関数を使用して、そのパラメーターをHTMLエンコードします。これで、actionhtmlspecialchars($_SERVER['PHP_SELF'])のようになります。

6
forresthopkinsa

現在のページがindex.phpの場合、フォームタグのindex.phpをアクションの値として使用します。

このような:

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

次のように入力することで、送信されたフォームを確認できます。

if(isset($_POST)){
...
}

ページ上部

4
codefreak

以下の構文を使用してください

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

Isset()メソッドを使用して、投稿が設定されているかどうかを確認できます。

2
Techie
<?php function userPass() {
    echo "<form method='post' action=" . $_SERVER['PHP_SELF'] . ">";
    echo "<input type='text' name='user' /><br/>";
    echo "<input type='text' name='pass' /><br/>";
    echo "<input type='submit' value='Login' />"; }
    if(empty($_POST["user"]))
    {
        userPass();
    }
   *if(!(empty($_POST["user"])))*
    {
        if($_POST["user"] == "comp")
        {
            echo "Welcome comp";
        }
        else
        {
            echo "Wrong user";
        }
    }
    ?>

コードのこの部分は間違っています。次のように入力してください:if(!empty($ _ POST ["user"]))

1
Axel Capaert
 <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">

これは、このフォーム内の送信ボタンをクリックしたときにフォームを使用してページをリロードする方法とまったく同じです。

ADDITIONAL:必要なすべての入力にrequiredを追加するか、空かどうかを確認します。

1
Jei

このコードはあなたを助けます

<form action="<?= $_SERVER['REQUEST_URI'] ?>" method="post">

またはあなたはこれを行うことができます:

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

ありがとうございました ....

1
Ehsan Ilahi

これは、必要な入力フィールドの学習を制御するために作成したコードで、要件を満たしています。この場合、データはデータベースに送信されます。要件を満たしていない場合は、ページの上部にメッセージが表示される場合があります

<?php
if (!isset($_POST['submitform'])) {   
}
else
{
$_SESSION['firstname'] = $_POST['firstname'];
$_SESSION['lastname'] = $_POST['lastname'];
$_SESSION['email'] = $_POST['email'];
$_SESSION['mobile'] = $_POST['mobile'];
$_SESSION['telephone'] = $_POST['telephone'];
$_SESSION['place'] = $_POST['place'];
$_SESSION['street'] = $_POST['street'];
$_SESSION['housenumber'] = $_POST['housenumber'];
$_SESSION['gender'] = $_POST['gender'];

if (empty($_POST['firstname']) or empty($_POST['lastname']) or empty($_POST['email']) or empty($_POST['mobile'])or empty($_POST['telephone']) or empty($_POST['place'])
or empty($_POST['street']) or empty($_POST['housenumber']) or !isset($_POST['gender']))
{
    echo "Sending denied";
}
else
{       
    require 'database.php';

    header('Location: succes.php');
}  ?>

これがあなたにとって役立つ情報であることを願っています

1
Boris

私はすべて、実際の質問を見逃していると思います。つまり、フォームの送信後に同じページにとどまるする方法がある場合です。答えは[〜#〜] no [〜#〜]です。フォームを送信したら-POSTまたはGETメソッドを使用するかどうか、そしてもちろん$ _SERVER ['PHP_SELF']または空のアクションなどを使用していると想定します。-- 新しいページが自動的に開きます。これは少なくともPHPに当てはまります(XAMPPを使用してさまざまな方法を試しました)他のスクリプト言語については説明しません。

0
Apostolos

フォーム送信で定義できます:

<form method=get action=index.php >

アクションを完全に省略することもでき、同じファイルに自動的に投稿/取得されます。

0