php发布文章时 未定义索引,关于php:提交表单时未定义索引错误

本问题已经有最佳答案,请猛点这里访问。

我正在忙于学习PHP,并且一直在按照教程创建一个基本站点,您可以在该站点中注册并拥有用户帐户/更改密码/更新信息等。

我正在为您更改密码(此视频中,我的时间大约是6:10),我被卡住了。就我而言,我已经完成了他在教程中所做的一切,但是当我提交表单时,在下面出现了以下错误。请放心,因为我确定我遗漏了"或"或拼写错误,但对我而言,我找不到它。 (注意:提交表单时,我确实输入了当前密码,但收到验证错误,提示我没有输入。)

(更新:将此文章标记为重复并将我指向另一篇文章不是很有帮助。正如我在上面强调的那样,我只是在学习PHP,因此无法从该文章中挑出解决方案,并且以某种方式将其与我的问题相关联。 )

Notice: Undefined index: password_current in C:\wamp\www\Movrate\classes\Validate.php on line 15

Notice: Undefined index: password_current in C:\wamp\www\Movrate\classes\Validate.php on line 15

Notice: Undefined index: password_new in C:\wamp\www\Movrate\classes\Validate.php on line 15

Notice: Undefined index: password_new in C:\wamp\www\Movrate\classes\Validate.php on line 15

Notice: Undefined index: password_new_again in C:\wamp\www\Movrate\classes\Validate.php on line 15

Notice: Undefined index: password_new_again in C:\wamp\www\Movrate\classes\Validate.php on line 15

Notice: Undefined index: password_new_again in C:\wamp\www\Movrate\classes\Validate.php on line 15

需要password_current

需要password_new

再次要求password_new_again

这是我的更新密码页面的代码:

require_once 'core/init.php';

$user = new User();

if(!$user->isLoggedIn()) {

Redirect::to('index.php');

}

if(Input::exists()) {

if(Token::check(Input::get('token'))) {

$validate = new Validate();

$validation = $validate->check($_POST, array(

'password_current' => array(

'required' => true,

'min' => 6

),

'password_new' => array(

'required' => true,

'min' => 6

),

'password_new_again' => array(

'required' => true,

'min' => 6,

'matches' => 'password_new'

)

));

if($validation->passed()) {

// change of password

} else {

foreach($validation->errors() as $error) {

echo $error, '';

}

}

}

}

?>

Current password

New password

New password again

这是我的validate类的代码:

class Validate {

private $_passed= false,

$_errors = array(),

$_db = null;

public function __construct() {

$this->_db = DB::getInstance();

}

public function check($source, $items = array()) {

foreach ($items as $item => $rules) {

foreach ($rules as $rule => $rule_value) {

$value = trim($source[$item]);

$item = escape($item);

if($rule === 'required' && empty($value)) {

$this->addError("{$item} is required");

} else if(!empty($value)) {

switch($rule) {

case 'min':

if(strlen($value) < $rule_value) {

$this->addError("{$item} must be a minimum of {$rule_value} characters.");

}

break;

case 'max':

if(strlen($value) > $rule_value) {

$this->addError("{$item} must be a maximum of {$rule_value} characters.");

}

break;

case 'matches':

if($value != $source[$rule_value]) {

$this->addError("{$rule_value} must match {$item}");

}

break;

case 'unique':

$check = $this->_db->get($rule_value, array($item, '=', $value));

if($check->count()) {

$this->addError("{$item} already exists.");

}

break;

}

}

}

}

if(empty($this->_errors)){

$this->_passed = true;

}

return $this;

}

private function addError($error) {

$this->_errors[] = $error;

}

public function errors() {

return $this->_errors;

}

public function passed() {

return $this->_passed;

}

}

检查您的$_POST中是否存在键password_current,password_new,password_new_again

我相信您在上面发布了错误的"更新密码"页面代码。您已经为仅具有一个字段"名称"的表单发布了代码。但是输出响应,验证类,视频以及您说的"我确实输入了当前密码"的事实表明您已在某处创建了更新密码表单,但您必须在上面发布了错误的页面代码。您可能需要仔细检查并发布最新/正确的页面代码。您需要确保所有输入字段都存在于表单中。

在看不到该页面/代码的情况下,收到的通知可能是因为您的error_reporting级别与视频演示者的级别不同。您可以通过替换第15行来正确检查验证类中的数组值,以防止出现此通知:

$value = trim($source[$item]);

有了这个:

$value = isset($source[$item]) ? trim($source[$item]) : '';

值得一试。

嗨,Manachi,感谢您指出,我现在输入了正确的代码,请参见上文!我也会尝试您的建议。

嗨@skr-不用担心。您是否也尝试过该建议?我怀疑它应该解决问题。

嗨,Manachi,是的,确实可以消除错误通知。但是,验证仍然无法进行。即使我在提交表单时输入了当前密码,验证仍要求" current_password"。如果您看到下面我对mdami所作的评论,则在$ _POST上执行了var_dump,它看到password_current字符串中包含密码。您知道为什么验证会认为该字段为空吗?

如果您正在学习,可以

关闭通知http://php.net/manual/ru/function.error-reporting.php

error_reporting(E_ALL ^ E_NOTICE);

在使用数据之前先检查数据

$value = trim($source[$item]);

据我所知,您的表单中缺少输入字段

添加缺少的输入。

提交表单后检查发布的数据,并查看缺少的内容。

var_dump($_POST);

将输入密码说成" .."的密码更改为password_

将filedname与验证规则名称匹配。你应该没事的

嗨,女士,对不起,我在上面发布了错误的代码。我现在在更新密码页面中输入了正确的代码。

看到我更新的答案,输出应该包含您所有的表单字段。

我把var_dump放进去了:array(size = 4)passsword_current =>字符串密码(length = 8)passsword_new =>字符串(length = 0)passsword_new_again => string(length = 0)令牌=>字符串3d2c0e59a882afe842eb0d21e975abd4(length = 32)要求password_current密码是必需的password_new_again是必需的因此,即使我在其中输入了密码,该字段也是必需的。这是否意味着验证有问题?

检查您的输入名称passsword_current,pass ....您那里的验证规则只有2ss的地方有3ss :)。

哇,就是这样。谢谢mdamia。很抱歉浪费大家这么愚蠢的时间;)

不要提及它,它发生在我们当中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值