За последние 24 часа нас посетили 35379 программистов и 1745 роботов. Сейчас ищут 894 программиста ...

Не прикрепляется изображение

Тема в разделе "PHP для новичков", создана пользователем lamac0, 9 сен 2022.

  1. Aleksandr.B

    Aleksandr.B Активный пользователь

    С нами с:
    2 фев 2023
    Сообщения:
    159
    Симпатии:
    41
    Адрес:
    Барнаул
    Так будет загружать?
    Код (Text):
    1. <?php
    2.  
    3. foreach ($_FILES as $oneFile) {
    4.     if (is_uploaded_file($oneFile['tmp_name'])) {
    5.         $filename = $oneFile['name'];
    6.         $targetFile = $_SERVER['DOCUMENT_ROOT'] . '/uploads/' . $filename;
    7.         move_uploaded_file($oneFile['tmp_name'], $targetFile);
    8.     }
    9. }
     
  2. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    939
    Симпатии:
    145
    И логи PHP глянуть полезно.
     
  3. lamac0

    lamac0 Новичок

    С нами с:
    4 авг 2022
    Сообщения:
    42
    Симпатии:
    0
    так тоже в папке пусто
    подскажите, пожалуйста, где их искать?
     
  4. Aleksandr.B

    Aleksandr.B Активный пользователь

    С нами с:
    2 фев 2023
    Сообщения:
    159
    Симпатии:
    41
    Адрес:
    Барнаул
    Посмотрите что находится в $oneFile. var_dump($oneFile); exit;
    А также заходит в if или нет.
     
  5. Aleksandr.B

    Aleksandr.B Активный пользователь

    С нами с:
    2 фев 2023
    Сообщения:
    159
    Симпатии:
    41
    Адрес:
    Барнаул
    Данный код работает на OpenServer
     
  6. lamac0

    lamac0 Новичок

    С нами с:
    4 авг 2022
    Сообщения:
    42
    Симпатии:
    0
    проблема была в прокладке между рулем и сиденьем, вот такая конструкция заработала
    PHP:
    1. if (isset($_POST['submit'])) {
    2.     if (!empty($_FILES['files']['tmp_name'])) {
    3.         foreach ($_FILES['files']['tmp_name'] as $key => $tmp_name) {
    4.             if (is_uploaded_file($tmp_name)) {
    5.                 $filename = $_FILES['files']['name'][$key];
    6.                 $targetFile = $_SERVER['DOCUMENT_ROOT'] . '/uploads/' . $filename;
    7.                 if (move_uploaded_file($tmp_name, $targetFile)) {
    8.                     echo "Файл " . $filename . " загружен успешно<br>";
    9.                 } else {
    10.                     echo "Ошибка загрузки файла " . $filename . "<br>";
    11.                 }
    12.             }
    13.         }
    14.     } else {
    15.         echo "Не выбраны файлы для загрузки<br>";
    16.     }
    17. }
     
  7. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    939
    Симпатии:
    145
    Можно выполнить скриптом phpinfo(); и на странице поискать error_log. Если значение пустое, искать в сети что-то типа "openserver php error log default location".
     
  8. lamac0

    lamac0 Новичок

    С нами с:
    4 авг 2022
    Сообщения:
    42
    Симпатии:
    0
    по сути говоря все время искал ошибку в form.php, но ошибка была в index.php, а именно в кнопке отправки формы, было так:
    HTML:
    1. <input type='file' name='files[]' multiple /></br>
    2. <input id="submit" type="submit" value="Отправить данные"><br/>
    стало так:
    HTML:
    1. <input type='file' name='files[]' multiple /></br>
    2. <input id="submit" type="submit" name="submit" value="Отправить данные"><br/>
    --- Добавлено ---
    добавил проверку на некорректные расширения, если друг кому интересно:
    PHP:
    1. if (isset($_POST['submit'])) {
    2.   if (!empty($_FILES['files']['tmp_name'])) {
    3.     foreach ($_FILES['files']['tmp_name'] as $key => $tmp_name) {
    4.       if (is_uploaded_file($tmp_name)) {
    5.         $filename = basename($_FILES['files']['name'][$key]);
    6.         $targetFile = $_SERVER['DOCUMENT_ROOT'] . '/uploads/' . $filename;
    7.         if (preg_match('/.(php|phtml|js|sh|py|pl)$/', $filename)) {
    8.           echo "Загрузка файлов с подобным расширением запрещена<br>";
    9.           continue;
    10.         }
    11.         if (move_uploaded_file($tmp_name, $targetFile)) {
    12.           echo "Файл " . $filename . " загружен успешно<br>";
    13.         } else {
    14.           echo "Ошибка загрузки файла " . $filename . "<br>";
    15.         }
    16.       }
    17.     }
    18.   } else {
    19.     echo "Не выбраны файлы для загрузки<br>";
    20.   }
    21. }
     
  9. lamac0

    lamac0 Новичок

    С нами с:
    4 авг 2022
    Сообщения:
    42
    Симпатии:
    0
    Дамы и господа, нарисовался новый трабл, теперь картинка не выводится на экран зрителю, то есть мне, в mysql есть "images.image" куда пишется путь до файла, может кто подсказать где косячу?
    PHP:
    1. $basename = bin2hex(random_bytes(8)) . '.' . $extension;
    2.         $targetFile = $_SERVER['DOCUMENT_ROOT'] . '/uploads/' . $basename;
    3. $query = "INSERT INTO images (id_ticket, imgname, image) VALUES (?, ?, ?)";
    4.           $statement = $pdo->prepare($query);
    5.           $statement->execute([$ticket_id, $filename, $targetFile]);
    вывод выглядит таким образом
    PHP:
    1.   $sql = "SELECT shop.id_shop, shop.name, tickets.problem, tickets.contacts, tickets.data, images.image
    2.  FROM shop
    3.  JOIN tickets
    4.  ON shop.id_shop = tickets.id_shop
    5.  JOIN images
    6.  ON tickets.id_ticket = images.id_ticket";
    7.   $result = $pdo->query($sql);
    8.   echo "<table border='1'><tr><th>Магазин</th><th>Проблема</th><th>Дата заявки</th><th>Контакт</th><th>Изображение</th></tr>";
    9.   while($row = $result->fetch()){
    10.   echo "<tr style='border-color: black;'>";
    11.   echo "<td>" . $row["name"] . "</td>";
    12.   echo "<td>" . $row["problem"] . "</td>";
    13.   echo "<td>" . $row["data"] . "</td>";
    14.   echo "<td>" . $row["contacts"] . "</td>";
    15.   echo "<td><img src='" . $row["image"] . "' /></td>";
    16.   echo "</tr>";
    17.   }
    18.   echo "</table>";
    19.   }
    20.   catch (PDOException $e) {
    21.   echo "Ошибка: " . $e->getMessage();
    22.   }
     
    #34 lamac0, 9 фев 2023
    Последнее редактирование: 9 фев 2023
  10. Aleksandr.B

    Aleksandr.B Активный пользователь

    С нами с:
    2 фев 2023
    Сообщения:
    159
    Симпатии:
    41
    Адрес:
    Барнаул
    Скорее всего у вас в
    PHP:
    1. $_SERVER['DOCUMENT_ROOT'] . '/uploads/' . $basename;
    путь не от корня сайта.
    При сохранении изображения нужен полный путь, а при выводе пользователю от корня
    PHP:
    1. '/uploads/' . $basename;
     
  11. lamac0

    lamac0 Новичок

    С нами с:
    4 авг 2022
    Сообщения:
    42
    Симпатии:
    0
    так у меня же путь пишется в mysql
    PHP:
    1. $statement->execute([$ticket_id, $filename, $targetFile]);
    и потом от туда же я его беру, там он хранится целиком от корня
    PHP:
    1. $sql = "SELECT shop.id_shop, shop.name, tickets.problem, tickets.contacts, tickets.data, images.image
    2. FROM shop
    3. JOIN tickets
    4. ON shop.id_shop = tickets.id_shop
    5. JOIN images
    6. ON tickets.id_ticket = images.id_ticket";
    PHP:
    1. echo "<td><img src='" . $row["image"] . "' /></td>";
    использование scandir($path) является обязательным условием или это дела давно минувших дней?
     
    #36 lamac0, 10 фев 2023
    Последнее редактирование: 10 фев 2023
  12. Aleksandr.B

    Aleksandr.B Активный пользователь

    С нами с:
    2 фев 2023
    Сообщения:
    159
    Симпатии:
    41
    Адрес:
    Барнаул
    У вас пишется, скорее всего, абсолютный, а при выводе нужен от корня сайта. Это разный путь.
    Абсолютный путь выглядит "C:/OSPanel/domains/сайт/uploads/изображение"
    От корня сайта "/uploads/изображение"
     
  13. lamac0

    lamac0 Новичок

    С нами с:
    4 авг 2022
    Сообщения:
    42
    Симпатии:
    0
    проблема оказалась куда проще, index.php лежит в корне, а страница для вывода в print/print.php и поэтому он искал для вывода в print/uploads , которой соответственно не было, ибо uploads лежит в корне, проблему решил переносом print.php в корень.
     
  14. lamac0

    lamac0 Новичок

    С нами с:
    4 авг 2022
    Сообщения:
    42
    Симпатии:
    0
    знатоки, внимание вопрос, каким образом отсюда вытащить именно name для передачи в чат телеграма, если ставлю id_shop то приходит id, если ставлю name то пустое поле
    HTML:
    1. <form action="form.php" method="post" name="forma" enctype='multipart/form-data'>
    2.     <fieldset>
    3.     <select name="id_shop">
    4.   <?php while($name = mysqli_fetch_assoc($result)):?>
    5.   <option value="<?=$name['id_shop']?>"><?=$name['name']?></option>
    6.   <?php endwhile?>
    7. </select> </br>
    отправка в телегу
    PHP:
    1. $token = "х";
    2.   $chat_id = "х";
    3.   $name = ($_POST['id_shop']);
    4.   $phone = ($_POST['contacts']);
    5.   $text = ($_POST['problem']);
    6.   $arr = array(
    7.           'Магазин:' => $name,
    8.           'Телефон:' => $phone,
    9.           'Проблема:' => $text
    10.       );
    11.       foreach($arr as $key => $value) {
    12.           $txt .= "<b>".$key."</b> ".$value."%0A";
    13.  
    14.   $sendToTelegram = fopen("https://api.telegram.org/bot{$token}/sendMessage?chat_id={$chat_id}&parse_mode=html&text={$txt}","r");
    15. }
     
  15. lamac0

    lamac0 Новичок

    С нами с:
    4 авг 2022
    Сообщения:
    42
    Симпатии:
    0
    напрямую вытащить как хотелось не вышло, пришлось использовать такую конструкцию
    PHP:
    1. $query = "SELECT name FROM shop WHERE id_shop = (SELECT id_shop FROM tickets ORDER BY id_ticket DESC LIMIT 1)";
    2. $stmt = $pdo->prepare($query);
    3. $stmt->execute();
    4. $shopname = $stmt->fetchColumn();
    5. $token = "x";
    6. $chat_id = "x";
    7. $phone = ($_POST['contacts']);
    8. $text = ($_POST['problem']);
    9. $txt = "Магазин: ".$shopname."  Телефон: ".$phone."  Проблема: ".$text;
    10. $sendToTelegram = fopen("https://api.telegram.org/bot{$token}/sendMessage?chat_id={$chat_id}&parse_mode=html&text={$txt}","r");