PHP Notice: undefined index原因与解决办法

 更新时间:2016年11月25日 17:39  点击:2453
在php开发时可能会碰到如PHP Notice: undefined index这种错误提示,下面我来给大家介绍关于undefined index错误提示的解决办法。

如 $_GET['aa']; 就会出现PHP Notice: undefined index ‘aa‘了。

下面我来总结出现PHP Notice: undefined index 解决办法。

1、php.ini配置文件,error_reporting = E_ALL & ~E_NOTICE

2、加个isset函数 isset($_GET["page"]) if-else判断

还有一个办法就是自定一个函数,这样就直接使用函数操作

 代码如下 复制代码

function _get($str){
    $val = !empty($_GET[$str]) ? $_GET[$str] : null;
    return $val;
}


调用方法

 _get('str') 代替 $_GET['str'] 即可

我们经常会要碰到把uft-8字符转换在gbk或gb2312编码,但在使用过程中转换经常会碰到一些问题,下面我来介绍利用php自带的字符串转换函数来实现字符编码转换。

iconv函数的一个bug。iconv在转换字符”—”到gb2312时会出错
解决方法很简单,就是在需要转成的编码后加 “//IGNORE” 也就是iconv函数第二个参数后.
如下:
以下为引用的内容:

 代码如下 复制代码
iconv(“UTF-8″,”GB2312//IGNORE”,$data)

ignore的意思是忽略转换时的错误,如果没有ignore参数,所有该字符后面的字符串都无法被保存。

这个iconv()这个函数,在php5中是内置的.

列子

 代码如下 复制代码

<?php
echo $str= '你好,这里是卖咖啡!';
echo '<br />';

echo iconv('GB2312', 'UTF-8', $str);      //将字符串的编码从GB2312转到UTF-8
echo '<br />';

echo iconv_substr($str, 1, 1, 'UTF-8');   //按字符个数截取而非字节
print_r(iconv_get_encoding());            //得到当前页面编码信息

echo iconv_strlen($str, 'UTF-8');         //得到设定编码的字符串长度

//也有这样用的

   $content = iconv("UTF-8","gbk//TRANSLIT",$content);
?>

但是使用iconv函数可能会碰到如notice: iconv() [function.iconv]: detected an illegal character in input string ...错误了,

原因是因为这个编码范围的问题,gb2312小于gbk小于uft8哦,所以大家转换时要注意了,不过我们php还提供了一个函数mb_detect_encoding他可以比较好的解决这个问题了。

现在把它写成更专业的函数

 代码如下 复制代码

<?php
function phpcharset($data, $to) {
 if(is_array($data)) {
  foreach($data as $key => $val) {
   $data[$key] = phpcharset($val, $to);
  }
 } else {
  $encode_array = array('ASCII', 'UTF-8', 'GBK', 'GB2312', 'BIG5');
  $encoded = mb_detect_encoding($data, $encode_array);
  $to = strtoupper($to);
  if($encoded != $to) {
   $data = mb_convert_encoding($data, $to, $encoded);
  }
 }
 return $data;
}
?>

有时我们不知道字符的编码这时会需要先检测出编码再进行转换。

 代码如下 复制代码


function asciitog($brand)
{
 $cha=mb_detect_encoding($brand);
 if($cha=='utf-8')
 {
   $brand2 = iconv($cha,"gb2312",$brand);
 }
 $cha2=mb_detect_encoding($brand2);
 if($cha2!='ascii'){
  $brand=$brand2;
 }
 
 return $brand;
}

出现phpmyadmin不能登录是我在修改我mysql服务器密码之后导致的,后来百度了相关的原因,原来是修改了mysql密码之后我们还需要在phpmyadmin目录中去修改config.inc.php中的内容。

错误提示

#1045 - Access denied for user 'root'@'localhost' (using password: YES)

phpmyadmin目录中找到config.inc.php文件,修改如下位置即可

对于config.inc.php文件,最重要的即是修改加入phpMyAdmin连接MySQL的用户名和密码。寻找到代码行:

 代码如下 复制代码


// $cfg['Servers'][$i]['controluser'] = 'pma';
// $cfg['Servers'][$i]['controlpass'] = 'pmapass';


将“//”注释号删除,同时输入MySQL中配置的用户名和密码比如这里:

 

 代码如下 复制代码
$cfg['Servers'][$i]['controluser'] = 'ids.la';
$cfg['Servers'][$i]['controlpass'] = '*********';


注意:如果需要通过远程服务器调试使用phpMyAdmin,则需要添加blowfish_secret内容定义Cookie,寻找到代码行:

 代码如下 复制代码

$cfg['blowfish_secret'] = '';


设置内容为COOKIE

 代码如下 复制代码

$cfg['blowfish_secret'] = 'leosn';

Linux下phpmyadmin不能登录连接MySQL,且无任何提示的问题解决方法


问题如下 :
php环境已经配好,正常。phpmyadmin不能登录,不论密码输入是否正确,都没有任何错误提示,自动跳转回到登录页

面。

解决方法 :
1、在php.ini 找到session.save_path 这一行,设成session.save_path = “/var/lib/php/session”,并把前面的

分号去掉。
以上的/var/lib/php/session根据你实际情况设定。

2、修改此目录的权限和属主:

 代码如下 复制代码
# chown -R nobody:nobody /var/lib/php/session

(nobody权限很低,最好设置它为web运行账户!)

 代码如下 复制代码
# chmod 777 /var/lib/php/session

(session目录至少设置770权限以上,否则phpmyadmin登录会有问题。)

3、重启相关服务,如果是apache,就重启apache服务:/etc/init.d/httpd restart;如果是nginx,就重启php-fpm

服务

 代码如下 复制代码
:/etc/init.d/php-fpm restart
在使用phpmyadmin中我们有时会看到有这种提示无法载入mysqli扩展,下面我来总结解决办法。

mysqli为php的mysql扩展的加强版.性能比mysql系列函数要好的多.

1、首先装你的php目录下的php.ini-dist复制到C:WINNT(win2003,winxp,win98应该是相应的系统目录)下

2、将刚才的php.ini-dist后面的”-dist”去掉,再用记事本打开,搜索”php_mysqli.dll”去掉前面的”;”保存

3、将C\:phpext(此处应为你的php目录)目录下的php_mysql.dll复制到C:WINNT\system32目录下

4、拷贝 libmysql.dll入 C:windows\system32


对于php.ini文件

进入 C:PHP,将 php.ini-dist 复制一份放到 C:WINNT( Windows XP/2003 下为 C:Windows )内,改名为

php.ini,然后用记事本打开,利用记事本的查找功能搜索 extension_dir = "./",并将其路径指到你的 PHP 目录下

的 extensions 目录,比如:extension_dir = "C:PHPext";再搜索 register_globals = Off,将 Off 改成 On;
查找 ;extension=php_mysql.dll,将前面的引号“;”去掉。
2、手册中关于配置IIS的说明,将其中的“PHPsapiphp4isapi.dll”改为php目录下的“php5isapi.dll”
3、重要:在按照手册说明复制了php目录、ext(手册中对于php4x是extension,这里应该是ext)目录下的dll文件到

system32的基础上,再复制php目录下的libmysql.dll文件到system32下。

最简单的办法利用php自带的函数用array_flip实现去重效果,另一个方法是使用php的array_flip函数来间接的实现去重效果

array_flip是反转数组键和值的函数,他有个特性就是如果数组中有二个值是一样的,那么反转后会保留最后一个键和

值.利用这个特性我们用他来间接的实现数组的去重.

 代码如下 复制代码

<?php
$arr = array("a"=>"a1","b"=>'b1',"c"=>"a2","d"=>"a1");
$arr1 = array_flip($arr);
print_r($arr1);//先反转一次,去掉重复值,输出Array ( [a1] => d [b1] => b [a2] => c )
$arr2 = array_flip($arr);
print_r($arr2);//再反转回来,得到去重后的数组,输出Array ( [a1] => d [b1] => b [a2] => c )
$arr3 = array_unique($arr);
print_r($arr3);//利用php的array_unique函数去重,输出Array ( [a] => a1 [b] => b1 [c] => a2 )
?>

用户自定义函数操作

 代码如下 复制代码

<?php
function assoc_unique($arr, $key) {
 $tmp_arr = array();
 foreach($arr as $k => $v) {
  if(in_array($v[$key], $tmp_arr)) {
   unset($arr[$k]);
  } else {
   $tmp_arr[] = $v[$key];
  }
 }
 sort($arr);
 return $arr;
}

$aa = array(
 array('id' => 123, 'name' => '淡淡清香弥漫世界'),
 array('id' => 123, 'name' => '螃蟹'),
 array('id' => 124, 'name' => '前端开发者'),
 array('id' => 125, 'name' => '螃蟹'),
 array('id' => 126, 'name' => 'HTML5研究者')
);
$key = 'name';
assoc_unique(&$aa, $key);
print_r($aa);
?>

[!--infotagslink--]

相关文章

  • 409错误是什么 http 409错误怎么解决

    409错误是什么?http 409错误怎么解决呢?不少站长在遇到这个错误代码之后都一筹莫展,本次一聚教程网为大家带来了详细的说明,快来看看吧。 409错误是什么: HTTP 40...2017-01-22
  • PHP session_start()很慢问题分析与解决办法

    本文章来给各位同学介绍一下关于PHP session_start()很慢问题分析与解决办法,希望碰到此问题的同学可进入参考。 最近在做东西的时候发现一个问题 有一个接口挂...2016-11-25
  • http 405错误是什么 http 405错误怎么解决

    http 405错误是什么?http 405错误怎么解决?相信很多站长都在找这两个问题的答案,本次小编为大家带来了详细的教程,快来看看吧。 405错误是什么: HTTP 405错误是H...2017-01-22
  • php中json_decode()和json_encode()用法与中文不显示解决办法

    本文章介绍了关于php中json_decode()和json_encode()用法与中文不显示解决办法,有需要的朋友可以参考一下下。 php中json_decode()和json_encode() 1.json_decode(...2016-11-25
  • phpexcel导出数据身份证后四位0000解决办法

    在php中我们如果要导入excel数据我们通常会使用phpexcel插件了,但是有朋友会发与使用phpexcel导出数据出现身份证后四位是0000情况了,下面我们就来看解决办法。 最...2016-11-25
  • 401错误码代表什么 401错误解决办法

    401是HTTP状态码的一种,属于“请示错误”,表示请求可能出错,已妨碍了服务器对请求的处理。具体的401错误是指:未授权,请求要求进行身份验证。登录后,服务器可能会返回对页面...2017-01-22
  • apache网站提示503错误解决办法

    Apache status 503 的原因大致有如下几种情况 : 1、 CPU 负载过高,服务器响应不过来,返回503 2、 系统连接数超限,超过MaxVhostClients的上限,返回503 3、 单IP连接数超限,超过M...2016-01-28
  • 403错误是什么 403错误怎么解决

    403错误是HTTP状态码的一种,属于“请示错误”,表示服务器拒绝请求。如果在搜索引擎尝试抓取您网站上的有效网页时显示此状态代码,那么,这可能是您的服务器或主机拒绝搜索...2017-01-22
  • 412错误是什么 412错误怎么解决

    412错误是什么?412错误怎么解决?本次一聚教程网将为大家带来详细的介绍,帮助大家全面了解412错误的意思以及解决412错误的方法。 412错误是什么: HTTP 412错误,(Precond...2017-01-22
  • 解决springboot使用logback日志出现LOG_PATH_IS_UNDEFINED文件夹的问题

    这篇文章主要介绍了解决springboot使用logback日志出现LOG_PATH_IS_UNDEFINED文件夹的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-04-28
  • Perl CPAN::Modulelist的解决办法

    今天用CPAN安装Term::ReadLine,报了个这样的错误 Going to read /root/.cpan/sources/modules/03modlist.data.gz Can't locate object method "data" via package "C...2016-11-25
  • 407错误是什么 407错误怎么解决

    407错误是什么?407错误怎么解决?不少站长都遇到过407错误,下面小编将告诉大家如何处理407错误。 407错误是什么: HTTP 407错误是HTTP协议状态码的一种,表示需要代...2017-01-22
  • 406错误是什么 406错误怎么解决

    HTTP 406错误是HTTP协议状态码的一种,表示无法使用请求的内容特性来响应请求的网页。一般是指客户端浏览器不接受所请求页面的 MIME 类型。 而MIME类型是在把输出...2017-01-22
  • 410错误是什么 http 410错误怎么解决

    410错误是HTTP协议状态码的一种,本次一聚教程网将为大家详细介绍HTTP 410错误是什么,以及410错误的解决办法。 410错误是什么: HTTP 410错误是HTTP协议状态码的...2017-01-22
  • HTTP 400错误是什么 HTTP 400错误怎么解决

    每当遇到http错误代码为400,代表客户端发起的请求不符合服务器对请求的某些限制,或者请求本身存在一定的错误,那么HTTP 400错误怎么解决呢?请看下文介绍。 目前400错...2017-01-22
  • phpStudy访问速度慢和启动失败的解决办法

    下面给大家介绍phpstudy访问速度慢的解决办法。1、修改mysql数据库链接地址为ip地址127.0.0.1。2、使用最新版本,这个坑了我好久时间。下面一段内容是关于phpstudy启动失败的解决办法。php5.3、5.4和apache都是用vc9编...2015-11-24
  • PHP Curl出现403错误的解决办法

    自己用的小PHP应用,使用curl抓网页下来处理,为了穿墙方便,使用Privoxy作为代理,便于选择哪些网站使用proxy、哪些不用。但今天却遇到了奇怪的问题,访问google baidu这些网站居然都返回403错误,而访问其他的一些网站没事,如果...2014-05-31
  • PHP判断上传文件类型的解决办法

    分享给大家php判断上传文件类型的方法,大家一起学习学习。/** * 读取文件前几个字节 判断文件类型 * @return String */ function checkTitle($filename){ $file=fopen($filename, "rb"); $bin=fread($file, 2); /...2015-10-21
  • Jrebel启动失败解决方案详解

    这篇文章主要介绍了Jrebel启动失败解决方案详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-07-07
  • android.os.BinderProxy cannot be cast to com解决办法

    本文章来给大家介绍关于android.os.BinderProxy cannot be cast to com解决办法,希望此文章对各位有帮助呀。 Android在绑定服务的时候出现java.lang.ClassCastExc...2016-09-20