提问人:DMSJax 提问时间:12/28/2013 最后编辑:Giacomo1968DMSJax 更新时间:12/28/2013 访问量:206
foreach 循环结果分配给进度变量
foreach loop result assign to progressing variable
问:
我有一个包含 4 个文本字段和多个文件上传(5 个文件/字段)的表单:
数据库表有 9 个字段,其中 4 个用于文本字段,其余 5 个应包含表单上传的图像的 URL 路径,对于数据库中的 5 个 URL 字段,它们被简单地命名为 image1、image2、image3...
通常我们收集表单数据并执行我们需要插入或更新的任何MySQL查询,但是我无法弄清楚如何将循环结果分配给渐进式/动态变量名称,以便在迭代后我只执行1个MySQL查询/插入。foreach
$inum=0;
foreach ($_FILES["prodi"]["error"] as $key => $error)
{
if ($error == UPLOAD_ERR_OK) {
$tmp_name = $_FILES["prodi"]["tmp_name"][$key];
$name = $_FILES["prodi"]["name"][$key];
$type = $_FILES["prodi"] ["type"] [$key];
if ($type=="image/jpg" OR $type=="image/jpeg" OR $type=="image/pjpeg" OR $type=="image/png")
{move_uploaded_file($tmp_name, "../zzz/zzz-images/$name");
$ipath=$domain."/zzz/zzz-images/".$name;
$inum++;
$i="image".$inum; // STUCK AT THIS POINT //}
}
所以,如果我回声并在循环内部,我会得到:$i
$ipath
image1 (The table field storing the url) / *ttp://www.whaterver......(the url stored)
image2 (The table field storing the url) / *ttp://www.whaterver......(the url stored)
依此类推,直到数组中没有更多文件需要处理,但是我如何将每个循环结果设置为一个新变量,以便 mysqli 查询像这样工作:
mysqli_query($con,"INSERT INTO `table1` (`field1`,`field2`,`field3`,`field4`,`image1`,`image2`,`image3`,`image4`,`image5`) VALUES ('field1',field2','field3','field4','loop_result1','loop_result2','loop_result3' etc. etc. etc.);")
答:
1赞
Digital Chris
12/28/2013
#1
使用 php,您可以使用变量来创建变量名称!因此,在你被卡住的地方,你应该:
$varname = "image".$inum; // "image1" for example
$$varname = $ipath; // this magic puts the value of $ipath into the variable $image1, $image2, etc
下面是它的工作示例: https://eval.in/83538
评论
0赞
DMSJax
12/28/2013
谢谢,我以为变量变量是答案的一部分,但我以前没有使用过它,也不确定我是否理解它。但我现在确实明白了,而且奏效了。谢谢!
0赞
Giacomo1968
12/28/2013
是的,这样的事情似乎是一个错误,但它们在这样的场景中效果很好。$$varname
0赞
Jérôme Teisseire
12/28/2013
#2
试试这个:
$inum++;
${'image' . $inum} = $ipath; // STUCK AT THIS POINT //}
}
请参阅:PHP 中的动态变量名称
评论