重复PHP代码

时间:2013-05-03 04:51:41

标签: php

我有这个代码,我想知道是否有更简单的方法让它重复。我有大约60个,我将永远添加更多,所以如果有人可以帮助我找出一个循环或其他东西,以便我不必手动添加每个,这将是很好的。其中每个都是下载的链接,所以我猜我可能不得不使用变量名作为文件名。文件名01 Intro.mp3告诉下载的位置,所以我猜这个工作我还要把它改成变量名。

这是我用来获取变量名的代码。

while ($row = mysqli_fetch_array($resultstwo))
    {
    extract($row);
    }

以下是我想重复的代码。我包括其中两个。

<?php
            if ($intro ==1) {
                $strKey = createKey();
                mysqli_query($resDB,"INSERT INTO downloads (downloadkey, file, expires) VALUES ('{$strKey}', '01 Intro.mp3', '".(time()+(60*60))."')");
                echo "<a href='download.php?key=$strKey'>Intro</a>";
            }
        ?>
        <?php
            if ($fightingfires ==1) {
                $strKey = createKey();
                mysqli_query($resDB,"INSERT INTO downloads (downloadkey, file, expires) VALUES ('{$strKey}', '02 Fighting Fires.mp3', '".(time()+(60*60))."')");
                echo "<a href='download.php?key=$strKey'>Fighting Fires</a>";
            }
        ?>

4 个答案:

答案 0 :(得分:2)

我建议在数据库中包含一些变量(如果尚未包含),例如:

id,caption,filename
--------------------
1,Intro,01 Intro.mp3
2,Fighting Fires,02 Fighting Fires.mp3

以下是用于创建此表的SQL查询:

CREATE TABLE `music` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `caption` varchar(32),
  `filename` varchar(32),
  PRIMARY KEY (`id`),
  UNIQUE KEY `uc_filename` (`filename`)
);

以及您也可以插入的一些测试数据。

INSERT INTO `music`(`caption`,`filename`) VALUES('Intro','01 Intro.mp3'),('Fighting Fires','02 Fighting Fires.mp3');

假设用户表遵循当前格式:

id,username,intro,fightingfires
-------------------------------
1,michael,1,NULL
2,dave,NULL,NULL

我认为应该改变它来代替:

id,username,music_id
--------------------
1,michael,1,
2,dave,NULL

该表的结构可以写成:

CREATE TABLE `users` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `username` varchar(32),
 `music_id` int(11),
 PRIMARY KEY (`id`),
 KEY `music_id` (`music_id`),
 CONSTRAINT `users_music_id_ibfk_1` FOREIGN KEY (`music_id`) REFERENCES `music` (`id`) ON DELETE CASCADE
);

现在,当从音乐表中删除音乐行时,任何希望下载该音乐的用户也将被删除。

尝试现在查询数据库:

$resultstwo=$mysqli->query("SELECT `music_id` FROM `users` WHERE `username`='michael'");

根据登录的用户更改用户名,但我想您可以控制用户。

然后您可以更好地管理数据:

while ($row = mysqli_fetch_array($resultstwo)) {
    $strKey = createKey();
    mysqli_query($resDB,"INSERT INTO downloads (downloadkey, file, expires) VALUES ('{$strKey}', '".$row['filename']."', '".(time()+(60*60))."')");
    echo "<a href='download.php?key=$strKey'>".$row['caption']."</a>";
    break;
}

然后,您可以通过添加或删除上表中的列来更好地管理音乐下载。

答案 1 :(得分:1)

我完全不明白你想做什么,但我假设如下:

您正在从包含文件名的表中读取,并且对于要在表下载中创建条目的每个文件,以及输出HTML链接到下载。

以下是您可以执行此操作的方法,但看起来您需要将文件的表结构更改为以下内容:

id  track_no  filename

在这种情况下,您可以直接在第一个循环中执行所有操作:

<?php
while($row = mysqli_fetch_array($resultstwo))
{
    $strKey = createKey();
    mysqli_query($resDB, 
        "INSERT INTO downloads (downloadkey, file, expires) 
        VALUES(
            $strKey, 
            $row['track_no']." ".$row['filename'], 
            (time()+(60*60))
        )");
    echo "<a href=\"download.php?key=$strKey\">$row['filename']</a>";        
}

如果这不能回答您的问题,您应该告诉我们有关包含文件的表的更多信息。

答案 2 :(得分:1)

在其他答案的基础上,这里是如何进行循环并只打一次数据库。

$query = "INSERT INTO downloads (downloadkey, file, expires) VALUES ";

while ($row = mysql_fetch_array($resultstwo)) {
    $strKey = createKey();
    $time = time()+(60*60);

    $query .= "('{$strKey}', '{$row['filename']}', {$time}),";
    echo "<a href='download.php?key=$strKey'>{$row['caption']}</a>";
}

$query = substr ( $query, 0, -1 ); // Remove the last comma.

mysql_query ( resDB, $query );

查询的最终结果如下:

INSERT INTO downloads (downloadkey, file, expires) VALUES 
                      ('adfsdfgsdgs', 'Bladerunner.avi', 12345678),
                      ('dfghfyadfsg', 'How_I_met_your_mother.avi', 12345678),
                      ('34t34t3t', 'Simpson_the_movie.avi', 12345678),
                      ('taert43te', '{$row['filename']}', 12345678),
                      ('at43t3t', '{$row['filename']}', 12345678),

这将仅使用此一个查询将所有值插入到mysql中。

答案 3 :(得分:0)

怎么样:

function f($condition, $filename, $prettyname) 
{ 
    if ($condition) 
    {
        $strKey = createKey();
        mysqli_query($resDB,"INSERT INTO downloads (downloadkey, file, expires) VALUES ('{$strKey}', '$filename', '".(time()+(60*60))."')");
        echo "<a href='download.php?key=$strKey'>$prettyname</a>";
    }
}

然后根据需要简单地从数据库,文件或数组中恢复值。