【问题标题】:PHP "Notice: Undefined index" [duplicate]PHP“注意:未定义的索引” [重复]
【发布时间】:2016-04-28 18:24:18
【问题描述】:

这真的开始让人讨厌了……

我正在尝试创建一个发送用户名、密码和安全级别的注册页面。

HTML 表单

<div class="login">
    <h1>Register</h1>
    <form method="POST" action="" name="register_form">
        <input type="text" name="user" placeholder="Username" required="required" />
        <input type="password" name="pass" placeholder="Password" required="required" />
        <input type="text" name="level" placeholder="LEVEL" value="1" disabled="true"/>
        <button type="submit" name="Register" class="btn btn-primary btn-block btn-large">Register</button>
    </form>
</div>

还有我在同一个文件中的 PHP 代码...

<?php
    require 'config/db_connect.php';

    if (isset($_POST['Register'])) {
        session_start();
        $username = $_POST['user'];
        $password = $_POST['pass'];
        $level = $_POST['level'];
        //$seccode = $_POST['seccode'];

        $sql = $con->query("INSERT INTO secure_login (email, password, lvl) VALUES('{$username}', '{$password}','{$level}')");
    }
?>

我不断收到此错误:

注意:未定义索引:第 8 行 C:\xampp\htdocs\tools\register.php 中的级别

【问题讨论】:

  • 禁用的input 元素不会被发布
  • 旁注:在将输入推送到数据库之前,您绝对应该(!)清理输入。和/或使用参数化查询。那里的代码注定是sql-injections
  • 如前所述 - 禁用的输入元素不会被发布,您可以改用 readonly 属性。
  • 危险:您正在使用an unsuitable hashing algorithm,需要take better care 的用户密码。

标签: php


【解决方案1】:
Notice: Undefined index: level in C:\xampp\htdocs\tools\register.php on line 8

当您尝试通过数组中不存在的键访问数组时发生。

提示:检查变量是否存在做print_r($_POST);

禁用的表单元素的值不会传递给处理器 方法。 W3C 称这是一个成功的元素。(这类似于 形成未选中的复选框。)

与其禁用输入,不如添加一些 Javascript 使其无法编辑,如下所示:

var defaultValue = "hello";
element.addEventListener("keyup", function(e){
    this.value = defaultValue ;
});

或者直接使用:readonly 代替 disabled,或者使用:style="display: none"

例如:

<input type="text" name="level" placeholder="LEVEL" value="1" style="display: none"/>

(我将它用于隐藏文件上传表单。)

因为我已经买了咖啡:

您的数据库连接(或多或少)不安全。 试试这个例子以获得安全的连接:

    $db = new PDO("mysql:host=$db_host;dbname=$db_name;charset=utf8", "$db_user", "$db_pass");
    $query = $db->prepare("INSERT INTO accounts(username, password) VALUES (?, ?)");
    $query->execute(array($username, $password));
    $db = null;

【讨论】:

  • 我把你说的做“只读”仍然得到错误aswel,当我输入“print_r($_POST);它只显示用户名和密码?
  • 那你没有删除禁用。更新了一个 100% 的工作示例。
  • 你能在这里拜访我吗:chat.stackoverflow.com/rooms/17/javascript ?
  • 很抱歉,没有足够的代表。是的,即使使用您的代码仍然会发生
  • 执行以下操作:将 添加到 DOM 表单并给我 print_r 结果。
猜你喜欢
  • 1970-01-01
  • 2016-02-25
  • 1970-01-01
  • 2015-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-26
相关资源
最近更新 更多