2

このスクリプトの動作を完了したばかりで、同じページで複数回使用する必要があります。ただし、2回目に使用すると、 Fatal error: Cannot redeclare get_names() (previously defined. というエラーが表示されます。スクリプトは次のとおりです。

<?php
$db = mysql_connect('localhost', 'username', 'pass') or die("Database error");
mysql_select_db('dbname', $db);

$query = "SELECT pool FROM winners";
$result = mysql_query($query) or die(mysql_error());

while($row = mysql_fetch_array($result))
if ($row['pool'] % 2) {
    echo "<h4>Result 1</h4>";
    $names = get_names(1);
    foreach($names as $name) {
        echo $name . "<br/>";
    }
} else {
    echo "<h4>Result 2</h4>";
    $names = get_names(0);
    foreach($names as $name) {
        echo $name . "<br/>";
    }
}

function get_names($pool_result)
{
$name_array = array();

$query = "SELECT * FROM comments WHERE commentid % 2 = $pool_result";
$result = mysql_query($query);

while ($row = mysql_fetch_array($result)) {
    array_push($name_array, $row['name']);
}

return $name_array;

} ?>

4

4 に答える 4

2

関数をでラップするか、ファイルをif(!function_exists('get_names'))使用include_onceまたはrequire_onceインクルードするかinclude、呼び出し元のスクリプトを修正して2回(またはそれ以上)インクルードしないようにすることができます。

于 2012-02-14T01:58:16.820 に答える
2

これは醜いハックですが、関数の周りにこれを置くことができます:

if ( !function_exists("get_names") ) {

/// the function

}

もちろん、より良い方法は、問題の関数include_once("includefile.php");includefile.php含むことです (注:includefile.php開始タグと終了<?php ?>タグも必要です)。

于 2012-02-14T01:57:37.570 に答える
1

関数定義を独自のファイルに入れ、そのファイルのページの上部で include (または require) を 1 回呼び出します。

get_namesが複数回定義されているため、2 回目に致命的なエラーが発生します。

編集:

独自のファイルに含める必要がある唯一の部分は、関数定義です。

function get_names($pool_result)
{
    $name_array = array();

    $query  = "SELECT * FROM comments WHERE commentid % 2 = $pool_result";
    $result = mysql_query($query);

    while ($row = mysql_fetch_array($result))
        array_push($name_array, $row['name']);

    return $name_array;
}

私も他の人も、コードをさらに整理することを推奨するでしょうが、その関数を library.php などのファイルに配置してrequire_once('path/to/library.php')から、残りの部分を複数回実行できるはずです。

于 2012-02-14T01:56:27.723 に答える
0

あなたは試すことができます:

<?php
$db = mysql_connect('localhost', 'username', 'pass') or die("Database error");
mysql_select_db('dbname', $db);

$query = "SELECT pool FROM winners";
$result = mysql_query($query) or die(mysql_error());

while($row = mysql_fetch_array($result))
if ($row['pool'] % 2) {
    echo "<h4>Result 1</h4>";
    $names = get_names(1);
    foreach($names as $name) {
        echo $name . "<br/>";
    }
} else {
    echo "<h4>Result 2</h4>";
    $names = get_names(0);
    foreach($names as $name) {
        echo $name . "<br/>";
    }
}
if(!function_exists("get_names")) {

  function get_names($pool_result)
  {
  $name_array = array();

  $query = "SELECT * FROM comments WHERE commentid % 2 = $pool_result";
  $result = mysql_query($query);

  while ($row = mysql_fetch_array($result)) {
      array_push($name_array, $row['name']);
  }

  return $name_array;
}
于 2012-02-14T01:58:53.120 に答える