1

このような小さな PHP スクリプトがあります。

その18種類のレベルからランクをUPDATEしたい。

//Getting values
$getir=mysql_query("SELECT username FROM users WHERE bot='1'");
//First level
$level1="Ayakci";
// While for all
while($getirx=mysql_fetch_array($getir)) {
    echo $getirx[0] . "<br>";
    $guncelle=mysql_query("UPDATE users SET rank='$level1' WHERE bot='1'");
    //Pick a random level1 while exiting while
    $seviye1=rand(1,18);
    if($seviye1==1){
        $level1="Baron";
    } elseif($seviye1==2){
        $level1="Patron";
    } elseif($seviye1==3){
        $level1="Baskan";
    } elseif($seviye1==4){
        $level1="Lider";
    } elseif($seviye1==5){
        $level1="Mit Ajani";
    } elseif($seviye1==6){
        $level1="Efsane";
    } elseif($seviye1==7){
        $level1="Efsanevi Baba";
    } elseif($seviye1==8){
        $level1="Baba";
    } elseif($seviye1==9){
        $level1="Isadami";
    } elseif($seviye1==10){
        $level1="Tetikci";
    } elseif($seviye1==11){
        $level1="Suclu";
    } elseif($seviye1==12){
        $level1="Seri Katil";
    } elseif($seviye1==13){
        $level1="Kiralik Katil";
    }elseif($seviye1==14){
        $level1="Katil";
    }elseif($seviye1==15){
        $level1="Hirsiz";
    }elseif($seviye1==16){
        $level1="Ozel Koruma";
    }elseif($seviye1==17){
        $level1="Bodyguard";
    }elseif($seviye1==18){
        $level1="Ayakci";
    }

    echo $level1 . "<br>";
}

ランダムにエコーしますが、「ランク」値をランダムとして更新しません。ランダムな $level1 を選択しており、すべて同じように適用されます。

すべての bot='1' 値を更新しますが、それらすべてに同じレベルを適用します。

この問題を解決するにはどうすればよいですか?

4

3 に答える 3

3

OK いくつかのクリーンアップ項目と提案:

最初に、複数の if/elseif の代わりに switch/case を使用することを強く検討する必要があります。

switch ($seviye1)
{
    case 1:
        $level1 = "Baron";
        break;
    case 2:
        $level1 = "Patron";
        break;
    // and so on...
}

ただし、さらに一歩進んでいくつかの配列を定義し、返された数値を配列インデックスへの参照として使用することもできます。

$avails = array
(
    "Baron",
    "Patron",
    "Baskan",
    "Lider",
    // et. al.
);

$seviye1 = rand(0, 17);
$level1 = $avails[$seviye1];

編集:

botさらに検討した結果、値が 1のすべてのユーザーにランダムなランクを割り当てようとしているようです。

これを書き直すと次のようになります。

// Get user id's having bot = 1
$getir = mysql_query("SELECT username FROM users WHERE bot = 1;");

// Available levels
$avails = array
(
    "Baron", "Patron", "Baskan", "Lider",
    "Mit Ajani", "Efsane", "Efsanevi Baba", "Baba",
    "Isadami", "Tetikci", "Suclu", "Seri Katil",
    "Kiralik Katil", "Katil", "Hirsiz", "Ozel Koruma",
    "Bodyguard", "Ayakci"
);

// Update database; assign random levels to users
while($getirx = mysql_fetch_array($getir))
{
    echo $getirx[0] . "<br />";

    // Pick random level
    $level1 = $avails[rand(0, count($avails) - 1)];

    // Perform update
    $update_query = "UPDATE users SET rank = '$level1' WHERE bot = 1 AND username = '{$getirx[0]}';";
    $guncelle = mysql_query($update_query);
}

最初のユーザーに「Ayakci」のランク/レベルを割り当てることが重要な場合は、それを再度追加できます。この例では省略されています。

于 2012-11-01T23:32:23.247 に答える
2

それがあなたが達成しようとしてきたことだと思います:

$guncelle=mysql_query("UPDATE users SET rank='".$level1."' WHERE bot='1' AND username = '".$getirx[0]."'");
于 2012-11-01T23:31:55.143 に答える
0

このクエリ:

UPDATE users SET rank='$level1' WHERE bot='1'

users テーブル内のすべてのレコードを $level1 の値 (bot は 1) に更新します。

ループごとにそれを実行しています。つまり、毎回すべてのレコードでランク フィールドが変更されます。

編集:あなたの質問に対するMichael Berkowskiの2番目のコメントに同意します。

于 2012-11-01T23:30:19.537 に答える