我已经在本地服务器上运行了很多次这个脚本,没有问题。然而,当我把它们上传到网络服务器上时,我遇到了未定义的错误。我很困惑。
什么问题??
已定义数据库表。
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不起作用。
感谢