Это звучит, как вы пытаетесь использовали вложенные циклы, но вы на самом деле имели одну петлю в начале которой закрыта, а затем вы Переберите все остальное. Вы должны переместить вашу закрывающая фигурная скобка отмечена ниже:
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 ['отвечает'] параллельно, и вам нужна корреляция 1-1 на вставке?
Наконец, я собираюсь предложить использовать подготовку и привязку, так как вы получаете данные от пользователя. В этом примере выполняется копирование/редактировалось 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 Injection (что является серьезным недостатком вашего кода в противном случае) и (2) будет намного быстрее с помощью цикла подготовки/выполнения.
Обратите внимание на точные отступы в моих примерах, где все выстраивается идеально с 3 или более пробелами на отступ - я не могу сказать вам, сколько раз я видел неаккуратное (или слишком малое) отступы, чтобы люди пропускали проблемы, которые было бы иначе очевидно.
Заявили вы $ filut объявления массив? – kiks73