这听起来像你试图使用嵌套循环,但实际上有一个循环,在其收出开始,然后你遍历休息。您需要将下面标明您的右大括号:
for($i=0; $i<count($_FILES['upload']['name']); $i++) {
$filut = basename($_FILES['upload']['name'][$i]);
} <<<<<<<<<=========== This curly brace closes the "for loop"
if(isset($_POST['subi'])) {
$data1 = $_POST['answers'];
foreach($data1) as $postValues) {
$sql4 = 'INSERT INTO db_image (text, image) VALUES("'.$postValues.'","'.$filut.'")';
$my->query($sql4);
}
}
??? <<<<<======== For a nested loop you should close it here
或者你试图分配$filut
在这种情况下,开始for...
循环需要像这样的数组:
for($i=0; $i<count($_FILES['upload']['name']); $i++) {
$filut[] = basename($_FILES['upload']['name'][$i]);
}
(注意在$filut
之后加[]
。)
但是,如果这就是你想要的(使$ filut成为一个数组),那么你需要在下面做一些不同的操作来访问jus t数组中的一个元素。这是一个嵌套foreach
可以解决这个问题 - 也许这是你打算如何完成它:
if(isset($_POST['subi'])) {
$data1 = $_POST['answers'];
foreach($data1 as $postValues) {
foreach ($filut as $f) {
$sql4 = 'INSERT INTO db_image (text, image)
VALUES("'.$postValues.'","'.$f.'")';
$my->query($sql4);
}
}
}
这将插入在$ filut每个值的行为$ _ POST每一个值[“答案” ]。那是你想要的吗?或者是$ filut和$ _POST ['answers']并行,并且您希望插入内容为1-1关联?
最后我会建议你使用prepare和bind,因为你从用户那里获取数据。这个例子复制/从here修改:
<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
/* Prepare an insert statement */
$query = "INSERT INTO db_image (text, image) VALUES (?,?)";
$stmt = $my->prepare($query);
#### NOTE THE USE OF YOUR VARIABLES HERE IN THE BIND - the "ss" means they are strings
$stmt->bind_param("ss", $postValues, $f);
#### HERE IS WHERE YOUR CODE IS GETTING INSERTED
foreach($data1 as $postValues) {
foreach ($filut as $f) {
/* Execute the statement */
$stmt->execute();
}
}
/* close statement */
$stmt->close();
/* close connection */
$my->close();
?>
我不能保证我得到了改变,以匹配你的代码中的所有变量,但希望它是足够接近,给你一个想法。这个解决方案(1)可以保护您免受SQL注入(否则这是您代码中的严重缺陷),并且(2)通过准备/执行周期更快。
请注意我的例子中的仔细缩进,每个缩进都有3个或更多的空格完美排列 - 我不能告诉你我看过多少次(或者太少)缩进让人们错过了哪些问题否则会很明显。
声明了$ filut广告的阵列? – kiks73 2015-03-25 06:03:24