Так будет загружать? Код (Text): <?php foreach ($_FILES as $oneFile) { if (is_uploaded_file($oneFile['tmp_name'])) { $filename = $oneFile['name']; $targetFile = $_SERVER['DOCUMENT_ROOT'] . '/uploads/' . $filename; move_uploaded_file($oneFile['tmp_name'], $targetFile); } }
проблема была в прокладке между рулем и сиденьем, вот такая конструкция заработала PHP: if (isset($_POST['submit'])) { if (!empty($_FILES['files']['tmp_name'])) { foreach ($_FILES['files']['tmp_name'] as $key => $tmp_name) { if (is_uploaded_file($tmp_name)) { $filename = $_FILES['files']['name'][$key]; $targetFile = $_SERVER['DOCUMENT_ROOT'] . '/uploads/' . $filename; if (move_uploaded_file($tmp_name, $targetFile)) { echo "Файл " . $filename . " загружен успешно<br>"; } else { echo "Ошибка загрузки файла " . $filename . "<br>"; } } } } else { echo "Не выбраны файлы для загрузки<br>"; } }
Можно выполнить скриптом phpinfo(); и на странице поискать error_log. Если значение пустое, искать в сети что-то типа "openserver php error log default location".
по сути говоря все время искал ошибку в form.php, но ошибка была в index.php, а именно в кнопке отправки формы, было так: HTML: <input type='file' name='files[]' multiple /></br> <input id="submit" type="submit" value="Отправить данные"><br/> стало так: HTML: <input type='file' name='files[]' multiple /></br> <input id="submit" type="submit" name="submit" value="Отправить данные"><br/> --- Добавлено --- добавил проверку на некорректные расширения, если друг кому интересно: PHP: if (isset($_POST['submit'])) { if (!empty($_FILES['files']['tmp_name'])) { foreach ($_FILES['files']['tmp_name'] as $key => $tmp_name) { if (is_uploaded_file($tmp_name)) { $filename = basename($_FILES['files']['name'][$key]); $targetFile = $_SERVER['DOCUMENT_ROOT'] . '/uploads/' . $filename; if (preg_match('/.(php|phtml|js|sh|py|pl)$/', $filename)) { echo "Загрузка файлов с подобным расширением запрещена<br>"; continue; } if (move_uploaded_file($tmp_name, $targetFile)) { echo "Файл " . $filename . " загружен успешно<br>"; } else { echo "Ошибка загрузки файла " . $filename . "<br>"; } } } } else { echo "Не выбраны файлы для загрузки<br>"; } }
Дамы и господа, нарисовался новый трабл, теперь картинка не выводится на экран зрителю, то есть мне, в mysql есть "images.image" куда пишется путь до файла, может кто подсказать где косячу? PHP: $basename = bin2hex(random_bytes(8)) . '.' . $extension; $targetFile = $_SERVER['DOCUMENT_ROOT'] . '/uploads/' . $basename; $query = "INSERT INTO images (id_ticket, imgname, image) VALUES (?, ?, ?)"; $statement = $pdo->prepare($query); $statement->execute([$ticket_id, $filename, $targetFile]); вывод выглядит таким образом PHP: $sql = "SELECT shop.id_shop, shop.name, tickets.problem, tickets.contacts, tickets.data, images.image FROM shop JOIN tickets ON shop.id_shop = tickets.id_shop JOIN images ON tickets.id_ticket = images.id_ticket"; $result = $pdo->query($sql); echo "<table border='1'><tr><th>Магазин</th><th>Проблема</th><th>Дата заявки</th><th>Контакт</th><th>Изображение</th></tr>"; while($row = $result->fetch()){ echo "<tr style='border-color: black;'>"; echo "<td>" . $row["name"] . "</td>"; echo "<td>" . $row["problem"] . "</td>"; echo "<td>" . $row["data"] . "</td>"; echo "<td>" . $row["contacts"] . "</td>"; echo "<td><img src='" . $row["image"] . "' /></td>"; echo "</tr>"; } echo "</table>"; } catch (PDOException $e) { echo "Ошибка: " . $e->getMessage(); }
Скорее всего у вас в PHP: $_SERVER['DOCUMENT_ROOT'] . '/uploads/' . $basename; путь не от корня сайта. При сохранении изображения нужен полный путь, а при выводе пользователю от корня PHP: '/uploads/' . $basename;
так у меня же путь пишется в mysql PHP: $statement->execute([$ticket_id, $filename, $targetFile]); и потом от туда же я его беру, там он хранится целиком от корня PHP: $sql = "SELECT shop.id_shop, shop.name, tickets.problem, tickets.contacts, tickets.data, images.image FROM shop JOIN tickets ON shop.id_shop = tickets.id_shop JOIN images ON tickets.id_ticket = images.id_ticket"; PHP: echo "<td><img src='" . $row["image"] . "' /></td>"; использование scandir($path) является обязательным условием или это дела давно минувших дней?
У вас пишется, скорее всего, абсолютный, а при выводе нужен от корня сайта. Это разный путь. Абсолютный путь выглядит "C:/OSPanel/domains/сайт/uploads/изображение" От корня сайта "/uploads/изображение"
проблема оказалась куда проще, index.php лежит в корне, а страница для вывода в print/print.php и поэтому он искал для вывода в print/uploads , которой соответственно не было, ибо uploads лежит в корне, проблему решил переносом print.php в корень.
знатоки, внимание вопрос, каким образом отсюда вытащить именно name для передачи в чат телеграма, если ставлю id_shop то приходит id, если ставлю name то пустое поле HTML: <form action="form.php" method="post" name="forma" enctype='multipart/form-data'> <fieldset> <select name="id_shop"> <?php while($name = mysqli_fetch_assoc($result)):?> <option value="<?=$name['id_shop']?>"><?=$name['name']?></option> <?php endwhile?> </select> </br> отправка в телегу PHP: $token = "х"; $chat_id = "х"; $name = ($_POST['id_shop']); $phone = ($_POST['contacts']); $text = ($_POST['problem']); $arr = array( 'Магазин:' => $name, 'Телефон:' => $phone, 'Проблема:' => $text ); foreach($arr as $key => $value) { $txt .= "<b>".$key."</b> ".$value."%0A"; $sendToTelegram = fopen("https://api.telegram.org/bot{$token}/sendMessage?chat_id={$chat_id}&parse_mode=html&text={$txt}","r"); }
напрямую вытащить как хотелось не вышло, пришлось использовать такую конструкцию PHP: $query = "SELECT name FROM shop WHERE id_shop = (SELECT id_shop FROM tickets ORDER BY id_ticket DESC LIMIT 1)"; $stmt = $pdo->prepare($query); $stmt->execute(); $shopname = $stmt->fetchColumn(); $token = "x"; $chat_id = "x"; $phone = ($_POST['contacts']); $text = ($_POST['problem']); $txt = "Магазин: ".$shopname." Телефон: ".$phone." Проблема: ".$text; $sendToTelegram = fopen("https://api.telegram.org/bot{$token}/sendMessage?chat_id={$chat_id}&parse_mode=html&text={$txt}","r");