pHp Проблема: «Ожидание локального хоста»: Может быть, бесконечная проблема l oop? - PullRequest
0 голосов
/ 25 апреля 2020

Я сейчас работаю над системой сватовства на основе Эло. По сути, у меня есть база данных, в которой есть группа пользователей, каждый из которых имеет свой рейтинг.

Краткое объяснение кода, он выбирает одного пользователя случайным образом и выбирает другого пользователя, если второй пользователь находится в пределах + -100 разницы между уровнями первого пользователя (поэтому гроссмейстеры не играют с бронзовыми игроками). Если в пределах 100 эло никого нет, разность эло увеличивается на 50 и проверяется снова.

Проблема: я создал тестового пользователя, который на 100 эло больше, чем другие пользователи, для тестирования системы поиска совпадений. Программа работает за исключением случаев, когда первым выбранным игроком является мой тестовый пользователь. Страница никогда не загружается, и она застревает на «Ожидание локального хоста». Я предположил, что это означало, что один из моих циклов while продолжался бесконечно, но, потратив некоторое время на их редактирование и пытаясь выяснить, почему они могут продолжаться бесконечно, ошибка все еще сохраняется.

<?php


include('mysql.php');
include('functions.php');



$result2 = executeQuery("SELECT * FROM images ORDER BY score DESC");
function executeQuery($query2){
    $connect = mysqli_connect("localhost", "root", "password","database");
    $result2 = mysqli_query($connect, $query2);
    return $result2;
}

// Get random
$query="SELECT * FROM images ORDER BY RAND() LIMIT 0,1";
$result = @mysqli_query($connection, $query);

//Put random in images array
while($row = mysqli_fetch_object($result)) {
    $images[] = (object) $row;
}
//Get elo of random
$elo1 = $images[0]->score;


--------------------------
//Point of Interest Below
--------------------------


//Sort database by DESC. Then go through entire database. If current row's elo is with +- difference (which right now is 100) of elo1's rating, ($elo1-100 < x < $elo1+100), then put into new array with all matchups.
//Get length of array, if length is 0 (meaning no match ups were found), increase difference by 50 and try again. 
$potentialMatchup = [];
$diff = 100;
$arrayLength = count($potentialMatchup);
while ($arrayLength == 0){
    $diff += 50;
    while($row2 = mysqli_fetch_object($result2)){
        if(($row2->score > $elo1-$diff) && ($row2->score < $elo1+$diff)){
            $potentialMatchup[] = (object) $row2;
        }
    }
    $arrayLength = count($potentialMatchup);
}


-------------------------------


//Get random index between 0 and length of array.
$randomNumber = rand(0, $arrayLength-1);
//Put match up into images array
$images[1] = (object) $potentialMatchup[$randomNumber];


//Get names of images
$nameLeft = $images[0]->filename;
$nameRight = $images[1]->filename;

//If same person, pick another random
while($nameLeft == $nameRight){
    $randomNumber = rand(0, $arrayLength-1);
    $images[1] = (object) $potentialMatchup[$randomNumber];
    $nameRight = $images[1]->filename;
 }

// Close the connection
mysqli_close($connection);
$leftName = str_replace("_", " ", $images[0]->filename);
$rightName = str_replace("_", " ", $images[1]->filename);


?>
...