我有这个代码,我想知道是否有更简单的方法让它重复。我有大约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>";
}
?>
答案 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>";
}
}
然后根据需要简单地从数据库,文件或数组中恢复值。