【问题标题】:PHP adding information to databasePHP向数据库添加信息
【发布时间】:2015-03-11 17:12:54
【问题描述】:


我的 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 in I:\USBWebserver v8.6\root\aanmelden.php2

注意:未定义索引:I:\USBWebserver 中的 achternaam v8.6\root\aanmelden.php上线3

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

问候,

德米恩

【问题讨论】:

  • 请将原始代码发给我们。您的错误表明错误与 naam 和 archternaam 相关,但您的代码中没有。我假设您为我们翻译了姓名和姓氏,但这确实无助于调试具体问题。
  • 还要检查&lt;php$_POST['name;];上的语法应该是&lt;?php$_POST['name'];

标签: php sql


【解决方案1】:

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

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

The Method Attribute

另外,为了避免潜在的undefined indexes,我建议使用ternary operator 设置这些变量。这样,您可以在尝试访问特定索引之前检查它们是否存在。

$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;];

【讨论】:

    【解决方案2】:

    注意不匹配:

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

    你可能想要$_POST

    请注意,您很容易受到sql injection attacks的攻击

    【讨论】:

      【解决方案3】:

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

      在 register.php 上将 $_GET 更改为 $_POST 就可以了。

      【讨论】:

        【解决方案4】:

        您可能不想要 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!";
        

        【讨论】:

        • 在我看来,这个问题的具体答案在您的帖子中并不明显。虽然使用 PDO 是个好建议,但您的答案似乎是代码重写,没有明确解决 OP 的问题。
        猜你喜欢
        • 1970-01-01
        • 2022-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-22
        • 1970-01-01
        • 2020-08-23
        相关资源
        最近更新 更多