php下foreach()错误提示Warning: Invalid argument supplied for foreach()

 更新时间:2016年11月25日 17:05  点击:1894
Warning: Invalid argument supplied for foreach() 的中文意思是说foreach需要是一个数组而给它的是一个无效的参数。

在没有购物商品直接进入购物车时竟然出现警告提示

php下foreach()错误提示Warning: Invalid argument supplied for foreach()

错误提示:

Warning: Invalid argument supplied for foreach() in E:wampwwwmyshopcart.php on line 95
 

解决方案:就是在循环前面加上判断

直接使用is_array判断给的值是不是为数组

 代码如下 复制代码

if(is_array($items) && !empty($items)){

foreach( )

或者 强制转换数据类型

 代码如下 复制代码

foreach((array)$v as $k1 => $v1) {
     $edu[$k1][$k] = my_h($v1);// v1是最终要入库的数据,进行转义处理
}

你可能所有不知道获取短网址跳转后的真实地址我们可以使用get_headers()函数来实现,下面我一起来看我总结的一些例子。

获取到一个短连接,需要将短连接转换成真实的网址,通过查资料,发现 PHP 提供了一个函数 get_headers() ,可以完成这个任务,先把 头部信息获取到,然后再分析跳转地址即可

利用get_headers() 函数获取http头
php 自带的get_headers()取得服务器响应一个 HTTP 请求所发送的所有标头。 获取301状态肯定没问题。

例子

 代码如下 复制代码

$url = 'http://t.cn/h5mwx';
$headers = get_headers($url, TRUE);

print_r($headers);

//输出跳转到的网址
echo $headers['Location'];

附:

Array
(
    [0] => HTTP/1.1 302 Moved Temporarily
    [Location] => http://www.111Cn.net
    [Content-Type] => Array
        (
            [0] => text/html;charset=UTF-8
            [1] => text/html;charset=utf-8
        )

    [Server] => Array
        (
            [0] => weibo
            [1] => BWS/1.0
        )

    [Content-Length] => Array
        (
            [0] => 203
            [1] => 16424
        )

    [Date] => Array
        (
            [0] => Thu, 12 Dec 2013 10:42:25 GMT
            [1] => Thu, 12 Dec 2013 10:42:25 GMT
        )

    [X-Varnish] => 2893360335
    [Age] => 0
    [Via] => 1.1 varnish
    [Connection] => Array
        (
            [0] => close
            [1] => Close
        )
)

好了我们看一个获取短网址跳转之前的网址

 代码如下 复制代码

$header = get_headers($url, 1);
if (strpos($header[0], '301') || strpos($header[0], '302')) {
if (is_array($header['Location'])) {
return $header['Location'][count($header['Location'])-1];
} else {
return $header['Location'];
}
} else {
return $url;
}

在php中测试字符串长度的函数是strlen,但今天我发现使用isset更加的更高效哦,口说不你不相信下面我举两个例子来给各位看看。

学PHP的都了解,在PHP中获取字符串有一个strlen自带函数;

这里和大家分享一个在一些特定情况下判断字符串长度较为高效的方式;

来看下面两段代码的执行效率吧,自己理解理解代码的执行思路:

 代码如下 复制代码

<?php 

   //使用strlen方式 

   $arr = '123456'; 

   $sTime = microtime(1); 

   if(strlen($arr) > 6){ 

    // echo 1; 

  }     

   echo microtime(1) - $sTime; 

  // 输出:0.00035595893859863 

 /*-------------------------------------*/

   //使用isset($arr{})方式 

   $arr = '123456'; 

   $sTime = microtime(1); 

   if(!isset($arr{6})){ 

    // echo "1rn"; 

   } 

   echo microtime(1) - $sTime; 

// 输出:0.00019097328186035

留言板是在刚接触php时用来学习的一个简单的应用例子了,今天我再给初学php的朋友提供一个完整的php留言板的全部制作过程,希望对你会有帮助。

在网上找了这方面的教程 但是基本就是没有人说什么 然后在某一天看见一个PHP程序设计出了一张类似这样的数据库设计图之后就有了很多领悟!下面是数据库的结构图

 

 下面我们就来继续一下介绍

   id                        这个算是父Id 可以通过这个id来查询 在这个id下是否有子id 同时也可以记录这个是那条留言的id 

   son_id                  这个是子id 然后通过这个id 可以找到相对应的父id
   news_id                记录文章的id
   sender_author       接受留言的人
   receiver_author     发送留言的人
   content                留言的内容
   status                   在有人回复你的帖子的时候 这个值从0转为1时候 该消息不在显示 如果没点击进去 该消息依然存在
   time                     记录留言的时间

 留言板回复思路

 当发送方(也就留言的人)要到该文章下留言或者回复的的时候就需要接收方(也就文章的作者或者要被回复的人)来接收。单数据库语句查询到这个键sender_author和receiver_author 的是就会知道接收方是谁和发送方是谁了。然后在根据这个判断来显示出回复内容

 

  提示你有一条新的消息思路

 当发送方发送消息的时候 这个status的值默认为0 就是提示接收发 你有一条新的消息。当点击进去的时候 调用数据库修改语句把指定的值修改成为1 这样就不显示了                  

 

查看评论的时候 的数据库操作语句

 

 代码如下 复制代码

 

function message($id){   
  $query = $this->db->query("SELECT * FROM message WHERE news_id = '$id'");//或者文章id后查询里面所有评论  
  return $query->result();   
 }

 

这个是获取父的留言内容的代码

 代码如下 复制代码


<?php foreach($query as $sel){?>
<p>留言用户:<?php echo $sel->receiver_author;?> 留言内容:<?php echo $sel->content?></p>
<?php }?>

 

证 用户是否登陆 并给予留言权限

 

 代码如下 复制代码

 

<form id="form1" name="form1" method="post" action="<?php echo site_url()."/publish/user_message"?>">
<textarea rows="5" cols="50" name="huifu" <?php if($uere_name == "0"){echo "disabled";}?> >
<?php
 if($uere_name == "0")
{echo "抱歉你还没登录不能进行留言";}
?>www.111cN.net
</textarea>
<input class="wole" name="author" value="<?php echo $author;?>" /><!--接受方帖子作者-->
<input class="wole" name="news_id" value="<?php echo $news_idx;?>" /><!--文章id-->
<input type="submit" name="Submit"/>
</form>
<script language="javascript">
function updateinfo(){
  if(<?php echo $uere_name;?> == 1){
    document.form1.Submit.value = "留言";
    document.form1.Submit.disabled = false;
  }
  else{
    document.form1.Submit.value = "还未登录";
 document.form1.Submit.disabled = "disabled";
  }
}
updateinfo();
</script>

 

这个是显示了 获取指定的父id 之后来显示他里面的全部子id 和留言内容

 

 代码如下 复制代码

 

<p>这里是<?php echo $is;?>楼 用户:<?php echo $sel->receiver_author;?> <br />留言内容:<?php echo $sel->content?>&nbsp;&nbsp;&nbsp;

<a onClick="showdiv('contentid<?php echo $is;?>','showtext<?php echo $is;?>')" href="javascript:void(0)">回复</a>
<div id="contentid<?php echo $is;?>" class="none">
<?php 
 $query = $this->db->query("select * from message where son_id ='$sel->id' order by id");//获取指定父id的子回复
 $revis = $query->result();
    foreach($revis as $row){?>
 <p><?php if($row->sender_author == $row->receiver_author){echo $row->sender_author;}
 else{ echo $row->sender_author."回复了:".$row->receiver_author;}?>
  内容是:<?php echo $row->content?></p>
<?php }?>
<form action="<?php echo site_url()."/publish/son_message"?>" method="post">
<input name="son_idx" class="wole" value="<?php echo $sel->id?>" />
<input name="receiver_author" class="wole" value="<?php echo $sel->receiver_author;?>" />
<input class="wole" name="news_id" value="<?php echo $news_idx;?>" /><!--文章id-->
<textarea rows="5" cols="50" name="huifux"></textarea>
<br><input type="submit" name="sub" value="回复"></form></div></p>
<script language="JavaScript" type="text/JavaScript">
<!--www.111cn.net
function showdiv(targetid,objN){
  
      var target=document.getElementById(targetid);
      var clicktext=document.getElementById(objN)
     
            if (target.style.display=="block"){
                target.style.display="none";
                clicktext.innerText="回复";
 

            } else {
                target.style.display="block";
                clicktext.innerText='收起';
            }
  
}
-->
</script>

 

这个是实现之后的效果图片 留言板已经实现了 留言内容回复

 然后这个是实现了 回复你的时候 会显示你有一条新的留言 

保存数据到mysql数据库中我们需要使用update或insert来协助我们完成,下面我给学习php的朋友介绍几个应用例子,希望文章给你带来帮助。

我们先来介绍INSERT语句

语法1: INSERT INTO table_name VALUES ("1", "2")

解说: 就是插入插入2个值。第一个值为:1 第二个值为:2

 
语句2:INSERT INTO table_name (column1, column2)VALUES (value1, value2)

解说:就是根据指定的键!插入指定的值。在字段 column1 插件的值为:value1 ,然后再字段column2 插入的值为:value2

INSERT语句的列子

 代码如下 复制代码

<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("my_db", $con);

mysql_query("INSERT INTO Persons (FirstName, LastName, Age)
VALUES ('Peter', 'Griffin', '35')");

mysql_query("INSERT INTO Persons (FirstName, LastName, Age)
VALUES ('Glenn', 'Quagmire', '33')");

mysql_close($con);
?>

例子

 代码如下 复制代码

<?php  
 /* 
  * 资料保存 
  * 程序:刘兴 
  * 时间:2010-6 
  */ 
?>  
<!DOCTYPE html PUBLIC ”-//W3C//DTD XHTML 1.0 Transitional//EN” ”http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>  
<html xmlns=”http://www.w3.org/1999/xhtml”>  
<?php   
  require_once(“gxpass.php”);//引入密码验证   
  require_once(“connDB.php”);//引入数据库连接参数    
  $zl=$_POST;  
 
//数据保存  
  list ($pid,$pname)=split(‘-’,$zl[people]);  
  $year=$zl[year];  
  $jd=$zl[jd];     
  foreach($zl as $key => $value){    
   if  (strstr($key,”fs”)) {  
   if (strstr($key,”kfs”)){  
          $khxm=substr($key,3,strlen($key)-3);  
    $fs=$zl[$key];  
    continue;             
   }   //www.111cn.nEt
   else{  
          $khxm=substr($key,2,strlen($key)-2);  
   }     
      $khfs=$value;   
   $khinfo=$zl[$khxm];        
          $sql=”delete from khzl where peopleid=’$pid’ and khbm=’$khxm’ and time=’$jd’ and year=’$year’”;  
    $result=mysql_query($sql) ;            
       $sql=”INSERT INTO khzl (peopleid ,khbm ,fenshu ,time ,year ,info,fs ) VALUES  (‘$pid’, ’$khxm’, $khfs, ’$jd’, ’$year’, ’$khinfo’,'$fs’)”;  
    $fs=0;  
   $result=mysql_query($sql);    
   }  
 }   
?>  
<head>  
<meta http-equiv=”Content-Type” content=”text/html; charset=gb2312″ />  
<title>数据保存</title>  
</head>  
<body>  
<?php   
 
//网址转向  
echo ”<script language=’javascript’>”;   
echo ” location=’peoplexz.php’;”;   
echo ”</script>”;  
?>  
</body>  
</html> 

一聚教程小编提醒你,保存数据时我们要注意页面之间的编码以免出现不必要的麻烦了,还有就是数据类型与我们提交的数据要一致否则数据是保存不成功的哦。

[!--infotagslink--]

相关文章

  • php错误提示 open_basedir restriction in effect 解决

    今天在帮助一个朋友配置一台服务器时发现网站配置好了缓存目录读写不成功,在打开错误时发现提示 Warning: file_exists() [function.file-exists]: open_basedir restr...2016-11-25
  • php中的foreach函数的2种用法

    Foreach 函数(PHP4/PHP5)foreach 语法结构提供了遍历数组的简单方式。foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息。...2013-09-28
  • 浅谈Java8 的foreach跳出循环break/return

    这篇文章主要介绍了Java8 的foreach跳出循环break/return,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-07-28
  • JavaScript中的数组遍历forEach()与map()方法以及兼容写法介绍

    下面小编就为大家带来一篇JavaScript中的数组遍历forEach()与map()方法以及兼容写法介绍。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-05-20
  • mybatis-plus  mapper中foreach循环操作代码详解(新增或修改)

    这篇文章主要介绍了mybatis-plus mapper中foreach循环操作代码详解(新增或修改),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-11-17
  • Nodejs 数组的队列以及forEach的应用详解

    这篇文章主要介绍了Nodejs 数组的队列以及forEach的应用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-25
  • Xml中使用foreach遍历对象实现代码

    这篇文章主要介绍了Xml中使用foreach遍历对象实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-12-04
  • C#使用foreach语句遍历二维数组的方法

    这篇文章主要介绍了C#使用foreach语句遍历二维数组的方法,实例分析了C#遍历数组的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • 解决mybatis使用foreach批量insert异常的问题

    这篇文章主要介绍了解决mybatis使用foreach批量insert异常的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-09
  • Notice:undefined index ..错误提示解决方法

    这句是在php开发中会碰的一些问题,看这提示我们都知道是变量未定义,那么下面来解决Notice:undefined index方法, 一,这个因为是变量未定义我们只要找到相关的位置加...2016-11-25
  • foreach()有两种用法

    foreach()有两种用法 1: foreach(array as $value) { 表达式; } 这里的array是你要遍历的数组名,每次循环中,array数组的当前元素的值被赋给$value,...2016-11-25
  • C#检查foreach判读是否为null的方法

    这篇文章主要介绍了C#如何检查foreach判读其是否为null,文中给出了示例代码,介绍的很详细,需要的朋友可以参考下方法...2020-06-25
  • C#使用foreach语句遍历集合类型的方法

    这篇文章主要介绍了C#使用foreach语句遍历集合类型的方法,可实现通过foreach语句遍历集合类的功能,需要的朋友可以参考下...2020-06-25
  • php CURLOPT错误Warning: curl_setopt() [function.curl-setopt]:...

    在我们使用php curl函数时提示Warning: curl_setopt() [function.curl-setopt]: CURLOPT_FOLLOWLOCATION cannot be activated when in safe_mode or an open_basedir...2016-11-25
  • PHP7新特性foreach 修改使用例子

    PHP7新特性foreach与前版本稍一些改变了,那么在PHP7新特性foreach到底作了什么改变呢,我们下面一起来看看PHP7新特性foreach 修改使用例子,希望文章能够帮助到大家。...2016-11-25
  • php错误提示:Call-time pass-by-reference has been deprecated

    今天在写引用时突然出现了Warning: Call-time pass-by-reference has been deprecated - argument passed by value; If you would like to pass it by reference, mo...2016-11-25
  • php foreach/for循环跳出问题

    在php 中for循环与foreach是常用的两个函数,for是用于数字较多,而foreach一般用于数组遍历中。 代码如下 复制代码 //php当前循环为1,循环由...2016-11-25
  • C#中foreach原理以及模拟的实现

    这篇文章主要介绍了C#中foreach原理以及模拟的实现方法,备有详尽的注释,便于深入理解C#原理,需要的朋友可以参考下...2020-06-25
  • Warning: mysql_num_rows():

    Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in F:\myweb\lzlj\cn.php on line 23 问题是你的mysql_query()时的sql出现...2016-11-25
  • C#从foreach语句中枚举元素看数组详解

    这篇文章主要给大家介绍了关于C#从foreach语句中枚举元素看数组的相关资料,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。...2020-06-25