";未定义的“;当本地服务器上一切正常时,其他web服务器上出现错误


"Undefined" Error on another web server while everything is fine on local server

我已经在本地服务器上运行了很多次这个脚本,没有问题。然而,当我把它们上传到网络服务器上时,我遇到了未定义的错误。我很困惑。

什么问题??

已定义数据库表。

PHP版本在本地:5.3.5,在web服务器上:5.3.26

我得到这些错误

            A PHP Error was encountered
            Severity: Notice
            Message:  Undefined index: username
            Filename: models/user.php
            Line Number: 7
            A PHP Error was encountered
            Severity: Notice
            Message:  Undefined index: password
            Filename: models/user.php
            Line Number: 8
            A PHP Error was encountered
            Severity: Warning
            Message:  Cannot modify header information - headers already sent by (output started at /home/caspian/domains/caspiansang.ir/public_html/system/core/Exceptions.php:185)
            Filename: views/login.php
            <p>Line Number: 1

Controller/verifylogin.php:

            <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
            class VerifyLogin extends CI_Controller {
             function __construct()
             {
               parent::__construct();
               $this->load->model('user','',TRUE);
             }
             function index()
             {
                    $result = $this->user->validate();
                    if(! $result){
                     $data['msg'] = 'اطلاعات وارد شده اشتباه است!';
                    $this->load->view('login',$data);
                    }else{
                        redirect('admin');
                    }        
                }

            }

型号/user.php

            <?php
            Class User extends CI_Model
            {
             public function validate(){
                    $username = $_POST['username'];
                    $password = $_POST['password'];

                    // Prep the query
                    $this->db->where('username', $username);
                    $this->db->where('password', md5($password));
                    // Run the query
                    $query = $this->db->get('admin');
                    // Let's check if there are any results
                    if($query->num_rows() == 1)
                    {
                        // If there is a user, then create session data
                        $row = $query->row();
                        $data = array(
                                'userid' => $row->userid,
                                'fname' => $row->fname,
                                'lname' => $row->lname,
                                'username' => $row->username,
                                'validated' => true
                                );
                        $this->session->set_userdata($data);
                        return true;
                    }
                    return false;
                }

            }

Views/login.php:

       <?php echo form_open('verifylogin'); ?>
           <br>
                    <div style="font-color:black; padding-bottom:10px;"> <?php if(!   empty($msg)) echo $msg;?></div>        
         < label for="username">نام کاربری</label>
         <input type="text" size="20" id="username" name="username"/>
         <br/>
         <label for="password">رمز عبور</label>
         <input type="password" size="20" id="passowrd" name="password"/>
         <br/>

您在一台服务器上关闭了display_errors,在另一台上打开了display_errors。这两个服务器上仍然会出现问题,只是在其中一个服务器上没有被告知。

问题是,在尝试使用变量或数组的部分之前,您正在访问这些变量或部分。

远程服务器已打开display_errors选项,error_reporting选项设置为包括E_NOTICE

简单的解决方案是将display_errors设置为0

正确的解决方案是在本地机器上复制服务器的设置,并修复

的通知

$_POST超全局数组可能没有设置用户名和密码。为了解决这个问题,你可以检查它们是否设置了isset():

if(isset($_POST['submit']))
{
//code block
}

打开错误报告将帮助您找出脚本的错误。要做到这一点,请将其添加到脚本的顶部:

ini_set('display_errors',1); 
error_reporting(E_ALL);

要全局设置,您可以编辑php.ini文件并将error_reporting指令更改为以下内容:

error_reporting = E_ALL

headers already sent错误消息通常由<?php之前或?>之后的空白引起。有关详细解释和有用提示,请参阅此StackOverflow答案。

希望这能有所帮助!

您也可以尝试使用代码点火器输入类$_POST['username'];您使用了PHP原生后超全局变量尝试$this->input->post('username'),看看这个问题是否已经解决

我找到了解决方案。这是因为在htaccess中启用了mod_rewrite,所以$_post不起作用。

感谢