【问题标题】:User::getvar gives undefined offsetUser::getvar 给出未定义的偏移量
【发布时间】:2016-05-23 08:54:00
【问题描述】:

我有一段代码似乎不起作用,因为它在读取数组时出错。

我正在使用这个函数从用户数组中获取一个变量:

static function getVar($v) {
  if(in_array($v, user::$struc)) {
    return self::$user[user::$struc[$v]];
  }
  else die("getVar: ".$v." > is unkown in struc");
}

现在我在使用示例时遇到错误:

user::getVar('Klantnummer');

它给了我一个通知:

注意:未定义的偏移量:第 79 行 C:\xampp\htdocs\Snackbar\System\Modules\User.php 中的 0 第 79 行是这样的: return self::$user[user::$struc[$v]];

我已经在登录名上放了一个 var_dump 来查看它是否将数据放入数组中并且工作正常,如下所示:

array(9) {
  ["Klantnummer"]=> string(1) "2"
  ["LoginNaam"]=> string(5) "Thimo"
  ["Wachtwoord"]=> string(128) "SPOOFED OUT 
  ["Voornaam"]=> string(5) "Thimo" 
  ["Achternaam"]=> string(7) "Franken" 
  ["Adres"]=> string(10) "Poortugaal" 
  ["Huisnummer"]=> string(2) "11" 
  ["Plaats"]=> string(10) "Poortugaal" 
  ["Postcode"]=> string(6) "3176VE"
}

现在这里是$struc 数组:

    static $struc = array(
    "Klantnummer"   => 0,
    "LoginNaam"     => 1,
    "Wachtwoord"    => 2,
    "Voornaam"      => 3,
    "Achternaam"    => 4,
    "Adres"         => 5,
    "Huisnummer"    => 6,
    "Plaats"        => 7,
    "Postcode"      => 8
);

有人知道可能出了什么问题吗?

完整代码:

<?php
class user {


static $struc = array(
    "Klantnummer"   => 0,
    "LoginNaam"     => 1,
    "Wachtwoord"    => 2,
    "Voornaam"      => 3,
    "Achternaam"    => 4,
    "Adres"         => 5,
    "Huisnummer"    => 6,
    "Plaats"        => 7,
    "Postcode"      => 8
);

static $ses = "loggedin";
static $hash = "whirlpool";
static $user = array();

static $usda = "userdat";

static function login($username, $password) {
    $host =     'localhost';
    $database = 'Snackbar';
    $user =     'root';
    $password = '';

    try {
        $conn = new PDO('mysql:host='.$host.';dbname='.$database, $user, $password);
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }
    catch(PDOException $e) {
        $msg = "Regelnummer: ".$e->getLine()."<br/>
                Bestand: ".$e->getFile()."<br/>
                Foutmelding: ".$e->getMessage()."";

        trigger_error($msg);
    }


    $HashPW = hash('whirlpool', $_POST['Password']);
    $Hashed = strtoupper($HashPW);

    $Login = $conn->prepare("SELECT * FROM Klanten WHERE LoginNaam = :Naam AND Wachtwoord=:Wachtwoord");

    $Login->bindParam(':Naam', $_POST['Name'], PDO::PARAM_STR, 45);
    $Login->bindParam(':Wachtwoord', $Hashed, PDO::PARAM_STR, 129);

    $Login->execute();


    if($Login->rowCount() > 0) {
        self::$user = $Login->fetch(PDO::FETCH_ASSOC);
        $_SESSION[self::$ses] = true;
        $_SESSION[self::$usda] = self::$user;
        var_dump(self::$user);
        print("Succesvol ingelogd");

    }       
    else
    {
        $_SESSION[self::$ses] = false;
        $_SESSION[self::$usda] = false;
        print("Verkeerde login naam en/of wachtwoord"); 
    }
}
static function logOut() {
    $_SESSION[self::$ses] = false;
    $_SESSION[self::$usda] = false;

    self::$user = null;
}
static function loggedIn() {
    return $_SESSION[self::$ses];
}
static function getVar($v) {
    if(in_array($v, user::$struc)) {
        return self::$user[user::$struc[$v]];
    }
    else die("getVar: ".$v." > is unkown in struc");
}
}

【问题讨论】:

    标签: php arrays string static-methods


    【解决方案1】:

    您的方法getVar() 有错误。 self::$user 不存在,这使得 self::$user[user::$struc[$v]] 未定义。你真正想访问的是self::$struct[$v]

    static function getVar($v) {
      if(in_array($v, self::$struc)) {
        return self::$struc[$v];
      }
      else die("getVar: ".$v." > is unkown in struc");
    }
    

    有关工作示例,请参阅 http://sandbox.onlinephpfunctions.com/code/e4f3a3ada495ec97e16f55b4132b99c9c1f4b4f9

    【讨论】:

    • 静态 $user = array();位于我的代码之上,这是用户登录时保存数据的地方。 return self::$user[users::$struc[$v]];所以这应该得到与 $user 匹配并且也在 $struc 中的数据。所以只放 self::$struc[$v] 是行不通的。我需要 $user 数组中的数据
    猜你喜欢
    • 2013-08-18
    • 1970-01-01
    • 2011-03-13
    • 2022-01-02
    • 2013-01-25
    • 2011-07-22
    • 2014-10-01
    • 1970-01-01
    相关资源
    最近更新 更多