尝试设置超链接时收到的错误

时间:2013-01-25 02:54:29

标签: php html

我正在尝试将每个图像名称设置为超链接。但问题是我收到3个错误,2个是未定义的错误,另一个是期望1个参数。

当前不起作用的代码:

    <table id="tableqanda" cellpadding="0" cellspacing="0">
    <thead>
    <tr>
        <th width="11%" class="image">Image</th>
    </tr>
    </thead>
    </table>
    <div id="tableqanda_onthefly_container">
    <table id="tableqanda_onthefly" cellpadding="0" cellspacing="0">
    <tbody>
        <?php

function imageName( $imgitem ) {
    return htmlspecialchars($imgitem); //432
}


          foreach ($arrQuestionId as $key=>$question) {
        echo '<tr class="tableqandarow">'.PHP_EOL;
        echo '<td width="11%" class="imagetd">';

        if (empty($arrImageFile[$key])) {
            echo '&nbsp;';
        } else {
    echo '<ul class="qandaul"><li><a href="previewImage.php?imgId=[' . $imgitem . ']" target="_blank">'; //line 456
    echo implode('</li>\n<li></a><a href="previewImage.php?imgId=[' . $imgitem . ']" target="_blank">', imageName($arrImageFile[$key]) ); //line 457
    echo '</li></ul></a>';
        }
        echo '</td>';
        echo '</tr>'.PHP_EOL;
        }
?>
    </tbody>
    </table>
    </div>

收到的错误:

警告:htmlspecialchars()期望参数1为字符串,在第432行的...中给出数组

注意:未定义的变量:第456行的imgitem

注意:未定义的变量:imgitem in ... on line 457


格式化代码:

<table id="tableqanda" cellpadding="0" cellspacing="0">
    <thead>
        <tr>
            <th width="11%" class="image">Image</th>
        </tr>
    </thead>
</table>
<div id="tableqanda_onthefly_container">
    <table id="tableqanda_onthefly" cellpadding="0" cellspacing="0">
        <tbody>
            <?php
                function imageName( $imgitem ) {
                    return htmlspecialchars($imgitem); //432
                }
                foreach ($arrQuestionId as $key=>$question) {
                    echo '<tr class="tableqandarow">'.PHP_EOL;
                    echo '<td width="11%" class="imagetd">';
                    if (empty($arrImageFile[$key])) {
                        echo '&nbsp;';
                    } else {
                        echo '<ul class="qandaul"><li><a href="previewImage.php?imgId=[' . $imgitem . ']" target="_blank">'; //line 456
                        echo implode('</li>\n<li></a><a href="previewImage.php?imgId=[' . $imgitem . ']" target="_blank">', imageName($arrImageFile[$key]) ); //line 457
                        echo '</li></ul></a>';
                    }
                    echo '</td>';
                    echo '</tr>'.PHP_EOL;
                }
            ?>
        </tbody>
    </table>
</div>

var_dump结果:

从指定的var_dump中得出结果如下:

array(2) { 
  [72]=> array(2) { 
    [0]=> string(16) "Lighthouse_4.jpg" 
    [1]=> string(12) "Tulips_3.jpg" 
  } 
  [73]=> array(1) { 
    [0]=> string(16) "Hydrangeas_3.jpg" 
  } 
}
int(73)

更新

使用Praveen的代码我收到错误声明:

Fatal error: Cannot redeclare imageName() (previously declared in ...:451) in ... on line 451

以下是代码:

<table id="tableqanda" cellpadding="0" cellspacing="0">
    <thead>
        <tr>
            <th width="11%" class="image">Image</th>
        </tr>
    </thead>
</table>
<div id="tableqanda_onthefly_container">
    <table id="tableqanda_onthefly" cellpadding="0" cellspacing="0">
        <tbody>
  //line 451          <?php function imageName( $imgitem ) { return htmlspecialchars($imgitem);
            } foreach ($arrQuestionId as $key=>$question) { echo '
            <tr class="tableqandarow">'.PHP_EOL; echo '
                <td width="11%" class="imagetd">'; function imageName( $imgitem ) { return htmlspecialchars($imgitem);
                    function getImgLink ( $imgKey ) { return $imgKey[0]; if (empty($arrImageFile[$key]))
                    { echo '&nbsp;'; } else { echo '
                    <ul class="qandaul">
                        <li>
                            <a href="previewImage.php?imgId=[' . getImgLink($arrImageFile($key)) . ']"
                            target="_blank">'; echo implode('</li>\n
                        <li>
                            </a>
                            <a href="previewImage.php?imgId=[' . getImgLink($arrImageFile($key)) . ']"
                            target="_blank">', imageName($arrImageFile[$key]) ); echo '</li>
                    </ul>
                    </a>'; } echo '</td>'; } } echo '</tr>'.PHP_EOL; } ?></tbody>
    </table>
</div>

2 个答案:

答案 0 :(得分:3)

有很多错误!!!

  1. 您在哪里定义了$imgitem
  2. 你为什么要implode一个字符串?
  3. 为什么要提前关闭函数,并在代码中使用函数中的变量?
  4. $arrImageFile定义在哪里?
  5. 最后,你想做什么?
  6. 其他错误......

    function imageName( $imgitem ) {
        return htmlspecialchars($imgitem); //432
    }
    ///////////////////////////////////////////////////////////////////
    // You are closing the function here, hence the $imgitem's scope //
    ///////////////////////////////////////////////////////////////////
    
    
              foreach ($arrQuestionId as $key=>$question) {
            echo '<tr class="tableqandarow">'.PHP_EOL;
            echo '<td width="11%" class="imagetd">';
    
            if (empty($arrImageFile[$key])) {
                echo '&nbsp;';
            } else {
        echo '<ul class="qandaul"><li><a href="previewImage.php?imgId=[' . $imgitem . ']" target="_blank">'; //line 456
    ////////////////////////////////////////////////////
    // The $imgitem's variable is not accessible here //
    ////////////////////////////////////////////////////
    
        echo implode('</li>\n<li></a><a href="previewImage.php?imgId=[' . $imgitem . ']" target="_blank">', imageName($arrImageFile[$key]) ); //line 457
    ////////////////////////////////////////////////////////////////////////////
    // Why are you trying to implode something like this? Not a right syntax! //
    ////////////////////////////////////////////////////////////////////////////
        echo '</li></ul></a>';
            }
            echo '</td>';
            echo '</tr>'.PHP_EOL;
            }
    

    更新

    <table id="tableqanda" cellpadding="0" cellspacing="0">
        <thead>
            <tr>
                <th width="11%" class="image">Image</th>
            </tr>
        </thead>
    </table>
    <div id="tableqanda_onthefly_container">
        <table id="tableqanda_onthefly" cellpadding="0" cellspacing="0">
            <tbody>
                <?php
                    function imageName( $imgitem ) {
                        return htmlspecialchars($imgitem); //432
                    }
    ----------------^
    ///////////////////////////////////////////////////////////////////
    // You are closing the function here, hence the $imgitem's scope //
    ///////////////////////////////////////////////////////////////////
    
                    foreach ($arrQuestionId as $key=>$question) {
                        echo '<tr class="tableqandarow">'.PHP_EOL;
                        echo '<td width="11%" class="imagetd">';
                        if (empty($arrImageFile[$key])) {
                            echo '&nbsp;';
                        } else {
                            echo '<ul class="qandaul"><li><a href="previewImage.php?imgId=[' . $imgitem . ']" target="_blank">'; //line 456
    -------------------------------------------------------------------------------------------^
    /////////////////////////////////////
    // Where have you defined $imgitem //
    /////////////////////////////////////
    
                            echo implode('</li>\n<li></a><a href="previewImage.php?imgId=[' . $imgitem . ']" target="_blank">', imageName($arrImageFile[$key]) ); //line 457
    ------------------------------------------------------------------------------------------^
    /////////////////////////////////////
    // Where have you defined $imgitem //
    /////////////////////////////////////
    
                            echo '</li></ul></a>';
                        }
                        echo '</td>';
                        echo '</tr>'.PHP_EOL;
                    }
                ?>
            </tbody>
        </table>
    </div>
    

    根据var_dump的输出,我觉得您需要添加另一个函数来获取图像的链接,因为它始终存在于0索引中。

    function getImgLink ( $imgKey )
    {
        return $imgKey[0];
    }
    

    现在,以这种方式使用它:

    <a href="previewImage.php?imgId=[' . getImgLink($arrImageFile($key)) . ']" target="_blank">
    

答案 1 :(得分:0)

尝试删除包含[' . $imgitem . ']的方括号。方括号不是有效的查询字符串char

另一件事,为什么要使用implode