1

我是 php 新手,在通知方面遇到了一些麻烦。“注意:未定义的偏移量:1”问题在第 38 行:

  $commentator_comment = $comment_array[$i+1];

当我编写这段代码时,我在一台旧笔记本电脑上工作,我不得不在服务器上工作,因为 WAMP 等没有工作,当时我没有收到通知。不久前我写了它,但我尽我所能找到问题没有运气。

<?php
$filename = "data/comments.txt";
    if( isset( $_POST["name"]) && isset( $_POST["comment"])) {
$comment_name = @$_POST["name"];
$comment_comment = @$_POST["comment"];
$theComment = "<div id='comment'><p><b>" . $comment_name . "</b><br>" . $comment_comment . "</p></div>";

file_put_contents($filename, $theComment, FILE_APPEND);}
?>

<?php
$comments_from_file = file_get_contents($filename);
$comment_array = str_getcsv($comments_from_file, "|");
$i = 0;
while ($i < count($comment_array)){
    $commentator_name = $comment_array[$i];
    $commentator_comment = $comment_array[$i+1];

    echo "$commentator_name" . "$commentator_comment";


    $i = $i + 2;

}?>

提前感谢所有帮助,它的appriciated。

4

4 回答 4

2

“通知”的简单修复:只需检查该索引是否存在。所以这段代码:

$commentator_name = $comment_array[$i];
$commentator_comment = $comment_array[$i+1];

对此的更改:

$commentator_name = $commentator_comment = '';
if (isset($comment_array[$i])) {
  $commentator_name = $comment_array[$i];
}
if (isset($comment_array[$i+1])) {
  $commentator_comment = $comment_array[$i+1];
}

当我编写这段代码时,我在一台旧笔记本电脑上工作,我不得不在服务器上工作,因为 WAMP 等没有工作,当时我没有收到通知。

可能是新服务器设置与旧服务器设置之间的错误报告级别。这意味着新服务器设置为报告 PHP 通知,但旧服务器没有。

要调整错误报告的设置,您可以先进入您php.ini的线路并寻找error_reporting线路。在 Ubuntu 12.04 和其他 Linux 安装上,php.ini位于此处:

/etc/php5/apache2/php.ini

通常,该行只是设置为E_ALL如下所示:

 error_reporting = E_ALL

要禁用通知,您可以将该行调整为:

 error_reporting = E_ALL & ~E_NOTICE

您甚至可以通过将它们链接到该行的末尾来添加更多要禁用的选项,如下所示:

 error_reporting = E_ALL & ~E_NOTICE & ~E_WARNING

PHP 错误级别常量的完整列表应该在该php.ini文件中。如果在典型php.ini文件的注释中显示的副本,则为以下副本:

; Error Level Constants:
; E_ALL             - All errors and warnings (includes E_STRICT as of PHP 6.0.0)
; E_ERROR           - fatal run-time errors
; E_RECOVERABLE_ERROR  - almost fatal run-time errors
; E_WARNING         - run-time warnings (non-fatal errors)
; E_PARSE           - compile-time parse errors
; E_NOTICE          - run-time notices (these are warnings which often result
;                     from a bug in your code, but it's possible that it was
;                     intentional (e.g., using an uninitialized variable and
;                     relying on the fact it's automatically initialized to an
;                     empty string)
; E_STRICT          - run-time notices, enable to have PHP suggest changes
;                     to your code which will ensure the best interoperability
;                     and forward compatibility of your code
; E_CORE_ERROR      - fatal errors that occur during PHP's initial startup
; E_CORE_WARNING    - warnings (non-fatal errors) that occur during PHP's
;                     initial startup
; E_COMPILE_ERROR   - fatal compile-time errors
; E_COMPILE_WARNING - compile-time warnings (non-fatal errors)
; E_USER_ERROR      - user-generated error message
; E_USER_WARNING    - user-generated warning message
; E_USER_NOTICE     - user-generated notice message
; E_DEPRECATED      - warn about code that will not work in future versions
;                     of PHP
; E_USER_DEPRECATED - user-generated deprecation warnings
于 2014-06-11T14:08:10.867 回答
0

我认为是因为您正在尝试访问在循环的最后一次交互中不存在的偏移量。尝试这个:

<?php
    $filename = "data/comments.txt";
    if( isset( $_POST["name"]) && isset( $_POST["comment"])) {
        $comment_name = @$_POST["name"];
        $comment_comment = @$_POST["comment"];
        $theComment = "<div id='comment'><p><b>" . $comment_name . "</b><br>" . $comment_comment . "</p></div>";
        file_put_contents($filename, $theComment, FILE_APPEND);
    }
?>

<?php
    $comments_from_file = file_get_contents($filename);
    $comment_array = str_getcsv($comments_from_file, "|");
    $i = 0;
    while ($i < (count($comment_array)-1)){

        $commentator_name = $comment_array[$i];
        $commentator_comment = $comment_array[$i+1];

        echo "$commentator_name" . "$commentator_comment";


        $i = $i + 2;

    }
?>

或者,您也可以尝试:

while ($i < count($comment_array){

        $commentator_name = $comment_array[$i];
        if ($i < (count($comment_array)-1)) {
            $commentator_comment = $comment_array[$i+1];
        }

        echo "$commentator_name" . "$commentator_comment";


        $i = $i + 2;

    }
于 2014-06-11T14:43:12.187 回答
0

您的通知只会在某些情况下显示,特别是当您的 csv 文件中有奇数个元素时。

看看这两行:

while ($i < count($comment_array)){
    // ...
    $commentator_comment = $comment_array[$i+1];
    // ...

while 条件将保证索引$i将存在,但它不保证索引$i+1。如果您的 csv 文件中只有一项,它将显示通知。如果您有 2 个项目,您将不会看到通知。

@JakeGould 的解决方案将起作用,但要提供替代解决方案(将按照您的意图对所有输入对进行操作),然后您可以简单地将您的 while 条件更改为:

while( ($i + 1) < count($comment_array) ) {
    // ...

这样做的副作用是,如果您有奇数个条目(基本上是没有关联评论的评论名称条目),那么它将完全忽略最后一条评论,这可能比处理没有评论的评论名称更有益于您评论。

于 2014-06-11T14:20:27.020 回答
0

简短的语法:

$commentator_name = isset($comment_array[$i]) ? $comment_array[$i] : '';

$commentator_comment = isset($comment_array[$i+1]) ? $comment_array[$i+1] : '';

在本地开发环境中,设置 error_reporting = E_ALL。由于您收到通知,它已经设置好了。

于 2014-06-11T14:26:57.773 回答