PHP 将信息添加到数据库


PHP adding information to database


我的PHP页面有一个小问题。我很难在数据库中获取填写的数据。

让我向您展示索引的代码;

<form action="aanmelden.php" method="post">
Naam: <input type="text" name="naam"><br>
Achternaam: <input type="text" name="achternaam"><br>
<input type="submit">
</form>
<php
$nm = $_POST['naam;];
$anm = $_POST['achternaam'];
?>

现在我以为我已经获得了变量并发送到"aanmelden.php"文件。aanmelden.php 文件的内容是:

<?php
$nm = $_GET['naam'];
$anm = $_GET['achternaam'];
$connect = mysql_connect('localhost', 'root', 'usbw'); 
mysql_select_db ('kantine'); 
$sql = "INSERT into kantine (naam, achternaam) 
VALUES ('$nm', '$anm')"; 
$res = mysql_query($sql); 
mysql_close ($connect); ?>

对我来说看起来都很好,但是当我按下提交按钮时,我收到以下错误。

注意:未定义的索引:naam 在 I:''USBWebserver v8.6''root''aanmelden.php 在第 2

注意:未定义的索引:I:''USBWebserver 中的 achternaam v8.6''root''aanmelden.php在第 3

如果可以的话,请帮助我。

问候

德米恩

由于您的表单配置为使用 method="post" ,您应该使用 $_POST 数组而不是 $_GET

$name = $_POST['name'];
$lname = $_POST['lastname'];

请参阅方法属性。

此外,为了避免潜在的未定义索引,我建议使用三元运算符设置这些变量。这样,您可以在尝试访问特定索引之前检查它们是否存在。

$name = isset($_POST['name']) ? $_POST['name'] : false;
$lname = isset($_POST['lastname']) ? $_POST['lastname'] : false;

编辑

代码的其他潜在问题(或拼写错误)包括:

// invalid, should be <?php
<php
// semi-colon instead of a closing quote, should be $_POST['name']
$name = $_POST['name;];

注意不匹配:

<form action="register.php" method="post">
                                    ^^^^
$name = $_GET['name'];
         ^^^^

您可能想要$_POST

请注意,您容易受到SQL注入攻击

提交表单时使用的是方法 POST;但是您使用 GET 方法检索信息。

在注册时将 _GET 美元更改为 _POST 美元.php这应该可以解决问题。

您可能不希望SQL注入漏洞,因此我为您编写了一个连接到数据库并从POST在其中写入一些值的很好示例。

<?php
$DB_SERVER = 'server_adress';
$DB_USER = 'mysql_server';
$DB_PASSWORD = 'myPassword';
$DB_NAME = 'myFancyDB';
try {
    $db = new PDO("mysql:host=" . $DB_SERVER . ";dbname=" . $DB_NAME, $DB_USER, $DB_PASSWORD, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_PERSISTENT => true, PDO::MYSQL_ATTR_INIT_COMMAND => 'set names utf8mb4'));
} catch (PDOException $e) {
    //Remove this Errormessage in Production as it leaks dbname + password
    echo $e->getMessage();
}
//Now the DB has been initialized.
try {
    $name = $_POST['name'];
    $lastname = $_POST['lastname'];
    $sql = "INSERT INTO `registrierung` (Name, Lastname) VALUES (:name, :lastname);";
    $query = $db->prepare($sql);
    $query->execute(array(
        ':name' => $name,
        ':lastname' => $lastname));
    if (!$query) {
        echo 'Fail when executing query';
        exit;
    }
} catch (PDOException $e) {
    //Remove this Errormessage in Production!! Leaks DB info. Replace with generic Errormessage
    echo $e->getMessage();
    exit;
}
echo "Success!";