这似乎应该是如此明显,但它让我发疯!我所拥有的是一个for循环,它输出一个数字(在这种情况下为10)的随机卡,并将生成的列表更新到数据库中,但由于某种原因,我只能让它更新最后生成的卡。我做错了什么?
仅供参考,$ card在admin / random.php中声明(它会随机抽出一个随机数字,所以在这种情况下它会拉出“testdeck01”或“testdeck12”等)
$select=mysqli_query($connect, "SELECT * FROM `members` WHERE name='name'");
while($row=mysqli_fetch_assoc($select)) {
$new=$row['new'];
for($i=1; $i<=10; $i++) {
include ("admin/random.php");
$cards=$card.", ";
echo $cards;
$newcards=$new.$cards;
$update = "UPDATE `members` SET new='$newcards' WHERE name='name'";
if (mysqli_query($connect, $update)) {
}
}
echo "<br><br>".$update;
}
当我回复$ cards时,我得到了我想在数据库中看到的内容 - “testdeck02,testdeck09,testdeck04,testdeck15,”......等等
所以我尝试将列“new”设置为$ cards,但它只将最后一张卡添加到数据库中,所以当我尝试获取数据库值并通过创建$ newcards添加每张卡时,但我仍然只得到最终价值。我做错了什么?
这是我得到的当前输出:
testdeck14, testdeck07, testdeck10, testdeck14, testdeck09, testdeck14, testdeck10, testdeck08, testdeck03, testdeck14,
UPDATE `members` SET new='testdeck14, ' WHERE name='name'
我预计它看起来更像是这样:
testdeck14, testdeck07, testdeck10, testdeck14, testdeck09, testdeck14, testdeck10, testdeck08, testdeck03, testdeck14,
UPDATE `members` SET new='testdeck14, testdeck07, testdeck10, testdeck14, testdeck09, testdeck14, testdeck10, testdeck08, testdeck03, testdeck14, ' WHERE name='name'
如果我要刷新页面,这就是我得到的:
testdeck11, testdeck05, testdeck05, testdeck06, testdeck09, testdeck02, testdeck03, testdeck07, testdeck08, testdeck15,
UPDATE `members` SET new='testdeck14, testdeck15, ' WHERE name='name'
答案 0 :(得分:2)
因此,您真正想要做的是使用单个值更新单个数据库行。因此,您不希望在循环中发生$cards
!
此外,您的输出在屏幕上看起来是正确的,但实际上是10 将打印件分隔到屏幕上。您的
$cards
变量永远不会包含 所有的文字一下子。这就是为什么数据库只能获得 最后的价值!
所以,让我们使用$cards = $cards . $card . ', ';
变量存储所有卡片的整个列表,如下所示:
$cards .= $card . ', ';
或更短的语法$cards = ''; // will contain comma separated list
for ($i = 1; $i <= 10; $i++) {
include("admin/random.php");
$cards .= $card . ", "; // builds list
}
$newcards = $new . $cards;
$update = "UPDATE `members` SET new='$newcards' WHERE name='name'";
然后从循环中获取更新,所以它看起来像这样:
random.php
当您在循环中包含文件时,它确实使代码更难以遵循。假设您的getRandomCard()
有一个名为include
的函数。你只能对include("admin/random.php");
for ($i = 1; $i <= 10; $i++) {
$card = newRandomCard();
$cards .= $card . ", "; // builds list
}
文件执行一次,然后多次调用该函数:
void freeD(D ** a){
free( ( *a )->num);
free(*a);
*a=NULL;
}
//...
freeD( &smth );