$ _GET确实存储了我的数据但$ _POST没有,为什么?

时间:2018-01-19 03:40:39

标签: php html post get

我尝试使用$_POST方法提交数据,但我的数据无法进入下一页。当我使用$_GET时,我的数据确实可以通过。我该如何解决这个问题?

我的代码:

    <form class="aanmelden" method="GET" action="login_verwerken.php">
        <h1>Aanmelden</h1>
        <label for="e_mail">E-mail:</label>
        <input type="text" id="e_mail" name="email" placeholder="E-mailadres" autofocus required>
        <label for="wachtwoord">Wachtwoord:</label>
        <input type="password" id="wachtwoord" name="wachtwoord" placeholder="Wachtwoord" required>
        <input type="checkbox" id="gegevens" name="onthouden">
        <label for="gegevens">Inloggegevens onhouden</label>
        <input type="submit" value="Aanmelden">
        <a href="registreren_persoonlijke_gegevens.php"><h2 class="registreren">Registreren</h2></a>
    </form>

使用$_GET作为方法时的结果:     -

使用$_POST时的结果:     enter image description here

正在发送$_GET$_POST数据的网页代码:

<?php
    session_start();
    require_once('../dbInfo.php');

    $mailadres = $_GET['email'];
    $wachtwoord = $_GET['wachtwoord'];

    echo $mailadres;
    echo $wachtwoord;

    $query = "SELECT gebruikersnaam FROM gebruikers WHERE emailAdres = '$mailadres' AND wachtwoord = '$wachtwoord' ";

    $data = $dbh->query($query);
    $test = $data->fetch();



    if ($row = $test[0]){
        $_SESSION['naam'] = $test[0];
        header('Location: ../login/filmoverzicht.php');
        //echo "gelukt";
        //echo $_SESSION['naam'];
    }else {
        echo "Login niet gelukt!";
        header('Location: ../public/home_page.php');
    }  
    ?>

有人能帮助我吗?

3 个答案:

答案 0 :(得分:1)

将表单方法GET更改为POST,然后尝试如下所示

<form class="aanmelden" method="POST" action="">
    <h1>Aanmelden</h1>
    <label for="e_mail">E-mail:</label>
    <input type="text" id="e_mail" name="email" placeholder="E-mailadres" autofocus required>
    <label for="wachtwoord">Wachtwoord:</label>
    <input type="password" id="wachtwoord" name="wachtwoord" placeholder="Wachtwoord" required>
    <input type="checkbox" id="gegevens" name="onthouden">
    <label for="gegevens">Inloggegevens onhouden</label>
    <input type="submit" value="Aanmelden">
    <a href="registreren_persoonlijke_gegevens.php"><h2 class="registreren">Registreren</h2></a>
</form>


<?php 

if(isset($_POST) && !empty($_POST)) {

    echo "<pre>";
    print_r($_POST);
}


?>

答案 1 :(得分:0)

很明显,您在代码中使用了$_GET。你不会从中获得任何POST值。您应该使用$_POST

$mailadres = $_POST['email'];
$wachtwoord = $_POST['wachtwoord'];

在HTML中,您应该从method="get"更改为method="post"

此外,请勿在查询中直接使用$_GET$_POST值。您应该首先转义或清除变量。

最后,在if案例(if ($row = $test[0]))中,您应该使用==代替=

答案 2 :(得分:0)

您从$_GET收到了数据,因为您已将method称为GET。它应该是method="POST"

<form class="aanmelden" method="GET" action="login_verwerken.php">

OR

<form class="aanmelden" action="login_verwerken.php">

以上表单标记将使用方法GET。如果您未在表单标记中提及method,则默认情况下会method="GET"。要使用POST发送数据,您必须在表单标记中使用method="POST"

<form class="aanmelden" method="POST" action="login_verwerken.php">

还有一件事。 SQL Injection可以通过以下查询完成。您已直接使用$mailadres$wachtwoord进行查询。

$query = "SELECT gebruikersnaam FROM gebruikers WHERE emailAdres = '$mailadres' AND wachtwoord = '$wachtwoord' ";

要阻止SQL Injection,您可以使用参数化查询。