首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何减少我的php代码来循环我的html表代码?

如何减少我的php代码来循环我的html表代码?
EN

Stack Overflow用户
提问于 2018-09-25 12:40:21
回答 2查看 104关注 0票数 2

我希望有人能帮助我进行我的php编码。以下是我想要做的事:

我在我的高中经营一个电子游戏俱乐部,今年我们有121个会员(在一所有900名学生的学校里最大的俱乐部)。回溯游戏在很多人中颇受欢迎,并由此引发了关于拥有领头羊的讨论。因此,我很早就意识到,不断更新HTML文件将是错误的,因此决定设置mysql数据库,在那里可以将高分尝试输入表单(仅由我输入)并填充到网页中。该网页为每个游戏标题提供了一张表格,以及数据库中的前3名。到目前为止,这个部分工作得很好。我的数据库模式如下所示:

表1(“游戏系统”):

  • gamesystems_id (主键,AI)
  • 游戏系统(varchar(30)) (例如Atari 2600、NES、Colecovision等)

表2:(“游戏”)

  • games_id (主键,AI)
  • gamesystems_id (外键)
  • 游戏(varchar(30)) (如Frogger,疯狂出租车等)

表3:("solo_leaderboard")

  • id (主键,AI)
  • 游戏系统(varchar(30))
  • 游戏(varchar(30))
  • 姓名(varchar(30))
  • 得分(int(10))
  • 日期(日期)
  • 等级(varchar(5)) (varchar是容纳N/A如果不是学生)
  • (“学生”、“老师”、“管理员”、“其他人”)

好吧。也许不是完美的,但是这个模式目前是有效的。我可以添加数据和拉数据,并将其张贴到我的网站上的php页面。下面是我现在发布的两个游戏的代码。问题应该是显而易见的:我必须添加30+代码行为每一个新的游戏,我想张贴高分。这太离谱了。我没有强大的mysql或php背景,但多年前我花了很多时间编写C++和Python代码。我认为应该有一个嵌套的循环,将每个游戏系统(表1)一个接一个地拉出来,并为每个游戏创建一个表(表2),并在网页中填充来自独奏主板的前3个分数(表3)。不幸的是,我不知道该怎么做。所以我才来这里。有什么想法吗?

代码语言:javascript
运行
复制
<?php
$servername="localhost";
$username="strickho_leader";
$password="***********";
$database="strickho_leaderboards";

echo "
<body style='background-color:powderblue'; 'text-align:center';>
<h1 style='color:black'; 'font-size:300%'; 'text-align:center';>Benton Central M.A.G.I. Gaming Leaderboard</h1>
</body>";

//Create Connection
$conn = new mysqli($servername, $username, $password, $database);

//FREEWAY
//*****************************************
$result = mysqli_query($conn,"SELECT * FROM solo_leaderboard WHERE game LIKE '%Freeway%' ORDER BY score DESC LIMIT 3");

echo "<table style='text-align:center'; border='1';>
<tr>
<th colspan='5'>Freeway</th>
</tr>
<tr>
<th colspan='5'><img src='https://www.mobygames.com/images/covers/l/20735-freeway-atari-2600-front-cover.jpg' height='200' width='145'></th>
</tr>
<tr>
<th>Name</th>
<th>Score</th>
<th>Date</th>
<th>Grade</th>
<th>Role</th>
</tr>";

while($row = mysqli_fetch_array($result))
{
echo "<tr>";
echo "<td>" . $row['name'] . "</td>";
echo "<td><b>" . $row['score'] . "</b></td>";
echo "<td>" . $row['date'] . "</td>";
echo "<td>" . $row['gradelevel'] . "</td>";
echo "<td>" . $row['whois'] . "</td>";
echo "</tr>";
}
echo "</table><br><br>";
//*******************************************
//END FREEWAY


//CRAZY TAXI
//*****************************************
$result = mysqli_query($conn,"SELECT * FROM solo_leaderboard WHERE game LIKE '%Crazy Taxi%' ORDER BY score DESC LIMIT 3");

echo "<table style='text-align:center'; border='1';>
<tr>
<th colspan='5'>Crazy Taxi</th>
</tr>
<tr>
<th colspan='5'><img src='https://www.mobygames.com/images/covers/l/5801-crazy-taxi-dreamcast-front-cover.jpg' height='200' width='200'></th>
</tr>
<tr>
<th>Name</th>
<th>Score</th>
EN

回答 2

Stack Overflow用户

发布于 2018-09-25 12:58:18

与每次游戏进行一次查询不同,您可以进行一个通用查询,该查询检索所有游戏的数据,然后循环执行。实际上是两个查询,但这两个查询应该处理所有的工作。我的建议需要对你的桌子做些改动,我会带你去看的。

第一个查询:

代码语言:javascript
运行
复制
SELECT * from games

只有games表。没别的了。然后拿出这个结果(每行一局),然后用一个预兆循环它:

代码语言:javascript
运行
复制
foreach ($games as $game)

(我使用了$games,但使用变量with实际获取查询结果)现在您正在循环游戏,进行第二个查询(在循环中),以获得该特定游戏的主板。

第二个查询:

代码语言:javascript
运行
复制
SELECT * FROM solo_leaderboard WHERE game LIKE '%game_name_from_previous_query%' ORDER BY score DESC LIMIT 3

这里我的建议是不要使用LIKE进行搜索,因为它效率较低,尽管它会工作。我的建议是修改solo_leaderboard表以包含游戏id,以便您可以使用WHERE game_id = the_id_from_the_previous_query进行搜索。

最后,在不退出最外层的foreach循环的情况下,您可以循环第二个查询的结果,并像现在这样绘制表。

这就是一般的想法。这将遍历所有游戏,获取每个游戏的主板并将其输出到一个表中,然后转到下一个游戏,等等。

票数 0
EN

Stack Overflow用户

发布于 2018-09-25 13:56:11

我已经很久没有使用PHP了,但是我会尽力帮助您的,可能我拼错了一些PHP术语或函数。

第一个建议,最好是直接编写html静态内容,而不是执行echo,您编写的每一段php代码都将由服务器处理,echo的影响很小,但是1k的长html echo最差。因此,与其:

代码语言:javascript
运行
复制
<?php
    $servername="localhost";
    $username="strickho_leader";
    $password="***********";
    $database="strickho_leaderboards";

    echo "<body style='background-color:powderblue'; 'text-align:center';>
<h1 style='color:black'; 'font-size:300%'; 'text-align:center';>Benton Central M.A.G.I. Gaming Leaderboard</h1>
</body>";

    //Create Connection
    $conn = new mysqli($servername, $username, $password, $database);

你应该这样做:

代码语言:javascript
运行
复制
<?php
    $servername="localhost";
    $username="strickho_leader";
    $password="***********";
    $database="strickho_leaderboards";
?>

<body style='background-color:powderblue'; 'text-align:center';>
<h1 style='color:black'; 'font-size:300%'; 'text-align:center';>Benton Central M.A.G.I. Gaming Leaderboard</h1>
</body>

<?php
    //Create Connection
    $conn = new mysqli($servername, $username, $password, $database);

如果您使用的是一个很好的web开发编辑器,那么您将以这种方式获得html语法的高度。当您必须在php代码中打印html值时,您可以打开一个php代码标记并生成一个var echo

从你的答案开始,你当然可以做嵌套循环。首先,我认为你应该改变你的数据模型,如果每个游戏的领导板是不同的,你应该在领导板表中有games_id而不是游戏名称。

因此,您的代码可能如下所示:

代码语言:javascript
运行
复制
<?php
    $LEADER_TOP = 3;
    $servername="localhost";
    $username="strickho_leader";
    $password="***********";
    $database="strickho_leaderboards";
?>

<body style='background-color:powderblue'; 'text-align:center';>
<h1 style='color:black'; 'font-size:300%'; 'text-align:center';>Benton Central M.A.G.I. Gaming Leaderboard</h1>

<?php
    //Create Connection
    $mysqli = new mysqli($servername, $username, $password, $database);

    /* Check connection (from docs) */
    if (mysqli_connect_errno()) {
        printf("Connection error: %s\n", $mysqli->connect_error);
        exit();
    }

    //All games
    $query = "SELECT * FROM games ORDER BY game ASC";

    if ($games = $mysqli->query($query)) {

        // Get single game
        while ($game = $games->fetch_assoc()) {         
            // Print game table
?>

<table style='text-align:center'; border='1';>
    <tr>
        <th colspan='5'><?php echo $game['game']; ?></th>
    </tr>
    <tr>
        <th colspan='5'><img src="<?php echo $game['image']; ?>" height='200' width='145'></th>
    </tr>
    <tr>
        <th>Name</th>
        <th>Score</th>
        <th>Date</th>
        <th>Grade</th>
        <th>Role</th>
    </tr>

<?php
            // Get leaders
            $query = "SELECT * FROM solo_leaderboard WHERE game_id = '"+ $game['games_id'] +"' ORDER BY score DESC LIMIT "+$LEADER_TOP;
            if ($leaders = $mysqli->query($query)) {
                while ($leader = $leaders->fetch_assoc()) {
?>
    <tr>
        <td><?php echo $leader['name']; ?></td>
        <td><b><?php echo $leader['score']; ?></b></td>
        <td><?php echo $leader['date']; ?></td>
        <td><?php echo $leader['gradelevel']; ?></td>
        <td><?php echo $leader['whois']; ?></td>
    </tr>
<?php
                } // END While Leaders

                // Free leaders
                $leaders->free();
            }
?>
</table><br><br>
<?php
        } // END While Games

        // Free games
        $games->free();
    }
?>

如您所见,您需要将图像url添加到您的游戏模型中,并将游戏名更改为games_id

另一个个人建议,在html属性中使用“始终加倍”:src="xxx"

祝好运!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52498471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档