現在、phpで簡単な画像アップローどのアプリを作っています。
フォームのinputをfile型にして、submitされたら画像がディレクトリに写り、同じページ内でディレクトリ内のファイルを一覧で表示させたいのですが、
追記
glob関数を使ってforeachでループをかけたのですが、”Undefined variable $result” と、
”Invalid argument supplied for foreach() ”というエラーが出ます。
$resultのヴァーダンプでは、imageフォルダに保存されているファイルが配列で帰ってきていました。
php
1<?php 2 3 4function h($s) { 5 return htmlspecialchars($s, ENT_QUOTES, 'UTF-8'); 6} 7 8$error = ''; 9 10if (isset($_POST['submit'])) { 11 // var_dump($_FILES['file']); 12 // exit(); 13 14 // if (isset($_POST['file'])) { 15 16 $nameFile = $_FILES['file']['name']; 17 $tmpFile = $_FILES['file']['tmp_name']; 18 19 20 if(is_uploaded_file($tmpFile)){ 21 22 move_uploaded_file($tmpFile, '../photo_upload/image/'. $nameFile); 23 24 $result = glob('../photo_upload/image/*'); 25 // var_dump($result); 26 // exit(); 27 28 } 29 30 31} 32 33 34 35?> 36 37<!DOCTYPE html> 38<html lang="en"> 39<head> 40 <meta charset="UTF-8"> 41 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 42 <meta http-equiv="X-UA-Compatible" content="ie=edge"> 43 <title>Image</title> 44 <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous"> 45</head> 46<body> 47 <div class="container mt-5"> 48 <div class="row"> 49 <div class="col-md-8"> 50 <ul class="list-unstyled"> 51 <?php foreach ($result as $image) : ?> 52 <li class="media-body mt-5"> 53 <a href="#"><img src="<?= h($image); ?>"></a> 54 <p>aaa</p> 55 <a href="#">Delete</a> 56 </li> 57 <?php endforeach; ?> 58 </ul> 59 </div> 60 <div class="col-md-4"> 61 <!-- <div class="float-right"> --> 62 <form method="post" enctype="multipart/form-data"> 63 <label>Select Photo</label> 64 <input type="file" name="file"> 65 <input type="submit" name="submit" class="mt-3" value="Save"> 66 <p class="text-danger"><?= h($error); ?></p> 67 </form> 68 <!-- </div> --> 69 </div> 70 </div> 71 </div> 72<script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script> 73<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script> 74<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script> 75</body> 76</html>
聞きたいことはなんですか?
「うまくいかず」じゃ伝わらないです。tmp_nameから保存先にファイルが保存できているのかどうか、保存先のパスが適切に出力できているのか。h()使ってるけど、なんで?
ひとまず、teratailのガイドライン読んできてください。そこから当てはめて不足していると感じる情報を追記してください
「glob関数を使ってforeachでループをかけたりした」
コードが提示されていませんので、なんとも。
ファイル一覧、と言いながら一覧表示に必要なループを使っている箇所が無い辺り、何も分かっていない気がします。
まずは1つでもサーバ上のファイルを表示してみる所から始めると良いかもしれません。
追記させていただきました!