我的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!";