1

このコードがありますが、実行しようとすると、次のエラーが発生します。
Fatal error: Cannot redeclare genereerLiveCodeP() (previously declared in livestream.php:33) in livestream.php on line 32.

session_start();

mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

//header("location: index.php");
if($_SESSION['***'] == '***'){
$fp = fopen("test.html", 'w');
fwrite($fp, "");
fwrite($fp, '<p class="green">*** is online</p>');



$result = mysql_query("select count(1) FROM ***");
$row = mysql_fetch_array($result);

$rows = $row[0]+1000;

echo "Rows: ".$rows."\n";

for ($id = 1000; $id < $rows; $id++) {

echo "ID: ".$id."\n";

function genereerLiveCodeP () {
        $lengthCode = 6;
        $characters = '1234567890abcdefghijklmnopqrstuvwxyz';
        $liveCodeFunction = '';

        for ($p = 0; $p < $lengthCode; $p++) {
        $liveCodeFunction .= $characters[mt_rand(0, strlen($characters))];
    }

    return $liveCodeFunction;
}

$livecode = genereerLiveCodeP ();

echo "Livecode: ".$livecode."\n";

$x = mysql_query("UPDATE *** SET livecode='".$livecode."' WHERE *** = '".$***."'");

echo $x."\n";

}



}

私は何をすべきか?

4

3 に答える 3

1

まず、非推奨の拡張機能 ( ext/mysql) を使用しています。

for関数をループの外に移動する必要があります。PHP はそのようには機能しません (関数を再宣言できないため、エラーが発生します)

準備されたクエリを使用し、将来性のあるコードを使用すると、パフォーマンスを大幅に向上させることができます (これらの関数がエラーをスローし始めると、コードは PHP 5.5 で壊れます)。

session_start();
$db = new mysqli($host, $username, $password, $db_name);
function generate_live_code($length = 6) {
    $characters = '1234567890abcdefghijklmnopqrstuvwxyz';
    $str = '';
    for ($i = 0; $i < $length; $i++) {
        $str .= $characters[mt_rand(0, strlen($characters))];
    }

    return $str;
}

//header("location: index.php");
if($_SESSION['id'] == 'debug') {
    $fp = fopen("test.html", 'w');
    fwrite($fp, "");
    fwrite($fp, '<p class="green">*** is online</p>');
    // writing html to a file? consider using a database...
    $result = $db->query("select count(1) FROM x");
    $row = $result->fetch_assoc($result);
    $rows = $row[0]+1000;

    echo "Rows: $rows\n"; // no need to concat with double quotes.
    if ($query = $db->prepare("UPDATE x SET livecode = ? WHERE id = ?")) {
        for ($id = 1000; $id < $rows; $id++) {
            echo "ID: ".$id."\n";
            $livecode = generate_live_code();
            echo "Livecode: $livecode\n";
            $query->bind_param("si", $livecode, $id);
            $query->execute();
        }
    }
}
于 2013-02-09T22:42:04.827 に答える
1

forを宣言する前にループを閉じるのを忘れましたfunction。コードは次のようになります。

...
for ($id = 1000; $id < $rows; $id++) {
echo "ID: ".$id."\n";
}

function genereerLiveCodeP () {
...
于 2013-02-09T22:13:36.217 に答える
0

genereerLiveCodeP()ループ内で関数を宣言しています。ファイルの先頭に配置してみてください。

于 2013-02-09T22:14:51.627 に答える