用户
 找回密码
 入住 CI 中国社区
搜索
楼主: xyst0524
收起左侧

[HELP] Undefined offset错误怎么解决

  [复制链接]
 楼主| 发表于 2011-5-7 19:23:52 | 显示全部楼层
回复 jeongee 的帖子

在foreach之前就截掉了哦
你再仔细看看
发表于 2011-5-7 19:26:52 | 显示全部楼层
本帖最后由 jeongee 于 2011-5-7 19:35 编辑

回复 xyst0524 的帖子

没看见,我说的是用substr函数截掉最后的<|>
不是说的explode
重点是explode函数,你试试print_r    explode('|','a|b|')和explode('|','a|b')的值你就明白了

或者你别用foreach,直接for,从0到count($data) - 1



再或者,你先array_pop($data),把最后一个值弹出来,再foreach



 楼主| 发表于 2011-5-7 19:36:42 | 显示全部楼层
回复 jeongee 的帖子

我是这样理解的
第一截之后变成一个数组,
第二截就是从数组里面再次取得单个的值并编辑这些值
照你的意思的话三个变量是远远不够的...而且就不需要加上$message后面的那一句"<|>"了。
发表于 2011-5-7 19:41:19 | 显示全部楼层
本帖最后由 jeongee 于 2011-5-7 19:50 编辑

回复 xyst0524 的帖子


简单点的只要一句话就可以了
第一种解决:
在这个之后加:
$data = explode('<|>', $buffer);
array_pop($data);第二种:
$data = explode('<|>',$buffer);
的前面加
$buffer = substr($buffer,0,strlen($buffer) - 3);
第三种:
foreach那行
改成
for($i = 0 ,$length =  count($data) - 1; $i < $length  ; $i ++)[这种方法,循环体可以也要跟着改变]
---------------------------------------


发表于 2011-5-7 19:47:43 | 显示全部楼层
回复 xyst0524 的帖子

你没有理解你的问题到底出在哪
你试试print_r ( explode('|','a|b|'))和print_r ( explode('|','a|b'))
看有什么不一样,然后再思考下你的程序。
 楼主| 发表于 2011-5-7 19:56:39 | 显示全部楼层
回复 jeongee 的帖子


有点明白explode函数了
那不用ci写这个的时候为什么就不报错呢?
<html>
        <head>
                <title>网络留言板</title>
        </head>
        <body>
                <?php
                        $filename = "text_data.txt";
                        if(isset($_POST["sub"]))
                        {
                                $message = $_POST["username"]."||".$_POST["title"]."||".$_POST["mess"]."<|>";
                                $handle = fopen($filename, "a");
                                flock($handle, LOCK_EX);
                                fwrite($handle, $message);
                                flock($handle, LOCK_UN);
                                fclose($handle);
                        }
                        if(file_exists($filename))
                        {
                                $handle = fopen($filename, "r");
                                flock($handle, LOCK_SH);
                                $buffer.= fread($handle, 1024);
                                $data = explode('<|>', $buffer);
                                foreach($data as $line)
                                {
                                        list($username, $title, $mess) = explode('||', $line);
                                        if($username !=="" && $title !=="" && $mess !=="")
                                        {
                                                echo $username."说:".$mess.'<hr>';
                                        }
                                }
                                flock($handle, LOCK_UN);
                                fclose($handle);
                        }
                ?>

                <form action="" method="post">
                用户名:<input type="text" name="username"><br>
                主题:<input type="text" name="title"><br>
                <textarea name="mess" rows="10" cols="50">请在这里留言!</textarea>
                <input type="submit" name="sub" value="提交">
                </form>
        </body>
</html>
发表于 2011-5-7 20:06:31 | 显示全部楼层
回复 xyst0524 的帖子

那可能是你PHP.INI把错误提示关了,而CI默认是把错误提示打开了的
 楼主| 发表于 2011-5-7 20:52:48 | 显示全部楼层
回复 jeongee 的帖子

额,貌似明白了。谢谢了
发表于 2011-5-7 23:32:38 | 显示全部楼层
呵呵,观望中
发表于 2011-5-11 20:49:23 | 显示全部楼层
PHP复制代码
error_reporting(E_ALL & ~(E_STRICT | E_NOTICE));
复制代码

本版积分规则