Foreach просто повторяет первый вход - PullRequest
2 голосов
/ 29 октября 2010

Прошу прощения, если бы я знал лучше, но я уже довольно долго борюсь с этим.

У меня есть база данных mysql с 300 строками. Он содержит 4 столбца: «Eventid», «Player1», «Player2», «Score». В игре player1 дает различным другим (player2) счет из 100.

То, что я пытаюсь сделать, это показать вошедшему в систему пользователю (player1) таблицу «player2», которые они забили.

Мой код выглядит так:

$currentuserid = 00001;

$opponent_data = mysql_query("SELECT * FROM `scores` WHERE `player1` = $currentuserid ORDER by score");

$opponent_count = mysql_num_rows($opponent_data);

    echo $opponent_count.'<br>'; // Just to test -> and it shows I have 144 entries in the array, i.e. 144 player 2's that player 1 has scored

$opponent_scores = mysql_fetch_assoc($opponent_data);

$runrows = $opponent_scores;

foreach ($opponent_scores as &$runrows);

    {
    $id = $runrows['eventid'];
    $player2 = $runrows['player2'];
    $score = $runrows['score'];


    echo $player2." got ".$score;

    echo "<br>";

    }

Когда я запускаю это, я вижу только

144

73 получил 44

но я надеялся, что 144 строки «игрок 2» получат «счет игрока 2».

Что я делаю не так?

Ответы [ 5 ]

9 голосов
/ 29 октября 2010

У вас есть точка с запятой после цикла for-each;этого не должно быть.

6 голосов
/ 29 октября 2010

Кроме того: mysql_fetch_assoc будет возвращать только указатель на вашу первую строку в наборе результатов.Вот почему вы получите только одну строку.

Измените свой код на:

while($opponent=mysql_fetch_assoc($opponent_data)) {
     echo $opponent['player2']." got ".$opponent['score'];
}
1 голос
/ 29 октября 2010

mysql_fetch_assoc возвращает ассоциативный массив отдельной записи.

Проверьте в документах пример того, что вы должны делать: http://uk3.php.net/mysql_fetch_assoc

while ($row = mysql_fetch_assoc($opponent_scores)) {
    // var_dump($row);
}
1 голос
/ 29 октября 2010
$currentuserid = 00001;

$opponent_data = mysql_query("SELECT * FROM `scores` WHERE `player1` = $currentuserid ORDER by score");

$opponent_count = mysql_num_rows($opponent_data);

    echo $opponent_count.'<br>'; // Just to test -> and it shows I have 144 entries in the array, i.e. 144 player 2's that player 1 has scored

$opponent_scores = mysql_fetch_assoc($opponent_data);

foreach ($opponent_scores as $row);

    {
    $id = $row['eventid'];
    $player2 = $row['player2'];
    $score = $row['score'];


    echo $player2." got ".$score;

    echo "<br>";

    }
1 голос
/ 29 октября 2010

Похоже, что после каждого оператора есть аномальная точка с запятой

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...