PHPでボタンをクリックしたときに、データベースにファイル名を格納し、指定のフォルダにアップロードできるようにしたいと考えています。
前回の質問で、データベースにファイル名を登録することができたので、次のステップとしてファイルのアップロードを行いたいと思っていたのですが、クリック時にエラーが起こらず、メッセージも表示されない事態となってしまったので質問させていただきます。
insert.php
1<?php 2 3$dsn = 'mysql:host=*****;dbname=Test;charset=utf8;unix_socket=/mysql.sock'; 4$user = 'user'; 5$password = 'pass'; 6 7$pathBe = '/top/Server/before'; 8$pathAf = '/top/Server/after'; 9 10try{ 11 if (!empty($_FILES['beforeFile']['tmp_name']) && is_uploaded_file($_FILES['beforeFile']['tmp_name']) && !empty($_FILES['afterFile']['tmp_name']) && is_uploaded_file($_FILES['afterFile']['tmp_name'])) { 12 $dbh = new PDO($dsn, $user, $password); 13 14 $before = isset($_POST['beforeFile']) ? $_POST['beforeFile'] : ''; 15 $after = isset($_POST['afterFile']) ? $_POST['afterFile'] : ''; 16 17 if( move_uploaded_file( $_FILES['beforeFile']['tmp_name'], $pathBe.'upload_pic.jpg') && move_uploaded_file( $_FILES['afterFile']['tmp_name'], $pathAf.'upload_pic.jpg')) { 18 echo 'アップロードされたファイルを保存しました。'; 19 20 } else { 21 echo 'アップロードされたファイルの保存に失敗しました。'; 22 } 23 24 25 $stmt = $dbh->prepare('insert into Test(beforeFile, afterFile) value (?, ?)'); 26 27 $stmt->bindValue(1, $before); 28 $stmt->bindValue(2, $after); 29 $stmt->execute(); 30 31 $dbh = null; 32 //メッセージのセット 33 $msg = '登録完了'; 34 } 35} 36catch(PDOException $e){ 37 header('Content-Type: text/plain; charset=UTF-8', true, 500); 38 exit($e->getMessage()); 39} 40?> 41 42<head> 43 <title>登録画面</title> 44 <meta http-equiv="content-type" charset="UTF-8"> 45</head> 46 47<html> 48 49 <form action="insert.php" method="post" enctype="multipart/form-data"> 50 <p>before</p> 51 <input type="file" name="beforeFile" accept="image/jpg, image/png" required> 52 <p>after</p> 53 <input type="file" name="afterFile" accept="image/jpg" readonly> 54 55 <p><input type="submit" value="登録"></p> 56 </form> 57 58 <?php if ($msg): ?> 59 <p><?=$msg?></p> 60 <?php
上記コードの場合、データベースに登録できていた処理も通っていないようだったので探っていたところ、htmlのformに「enctype="multipart/form-data"」と記述すると保存も何もされないという状況になることがわかりました。
しかし、いろんなサイトを拝見した結果、ファイルをアップロードするにはこの記述が必要のようなので何がダメなのか確認できませんでした。
前回の質問から、html内の記述はformしか変えておりません。
どこが原因かわかる方がいましたら教えていただきたいです。
追記
データベースへの登録とアップロードを一度にやろうとして混乱していたため、アップロード部分に絞って記述してみました。
PHP
1<?php 2 3$dsn = 'mysql:host=*****;dbname=Test;charset=utf8;unix_socket=/mysql.sock'; 4$user = 'user'; 5$password = 'pass'; 6 7$pathBe = '/top/Server/before'; 8$pathAf = '/top/Server/after'; 9 10try{ 11 if (!empty($_FILES['beforeFile']['tmp_name']) && is_uploaded_file($_FILES['beforeFile']['tmp_name']) && !empty($_FILES['afterFile']['tmp_name']) && is_uploaded_file($_FILES['afterFile']['tmp_name'])) { 12 $dbh = new PDO($dsn, $user, $password); 13 14 if (move_uploaded_file($_FILES["beforeFile"]["tmp_name"], $pathBe. $_FILES["beforeFile"]["name"]) && move_uploaded_file($_FILES["afterFile"]["tmp_name"], $pathAf. $_FILES["afterFile"]["name"])) { 15 chmod($markerpath . $_FILES["beforeFile"]["name"], 0644); 16 chmod($contentspath . $_FILES["afterFile"]["name"], 0644); 17 echo $_FILES["beforeFile"]["name"] . "をアップロードしました。"; 18 echo $_FILES["afterFile"]["name"] . "をアップロードしました。"; 19 //追記// 20 echo $_FILES["beforeFile"]["error"]; 21 echo $_FILES["afterFile"]["error"]; 22} else { 23 24 echo "ファイルをアップロードできません。"; 25 //追記// 26 echo $_FILES["beforeFile"]["error"]; 27 echo $_FILES["afterFile"]["error"]; 28 } 29 } else { 30 echo "ファイルが選択されていません。"; 31 //追記// 32 echo $_FILES["beforeFile"]["error"]; 33 echo $_FILES["afterFile"]["error"]; 34 } 35} 36catch(PDOException $e){ 37 header('Content-Type: text/plain; charset=UTF-8', true, 500); 38 exit($e->getMessage()); 39} 40?> 41 42<head> 43 <title>登録画面</title> 44 <meta http-equiv="content-type" charset="UTF-8"> 45</head> 46 47<html> 48 49 <form action="insert.php" method="post" enctype="multipart/form-data"> 50 <p>before</p> 51 <input type="file" name="beforeFile" accept="image/jpg, image/png" required> 52 <p>after</p> 53 <input type="file" name="afterFile" accept="image/jpg" readonly> 54 55 <p><input type="submit" value="登録"></p> 56 </form> 57 58 <?php if ($msg): ?> 59 <p><?=$msg?></p> 60 <?php
上記のコードがアップロード部分のみとなります。
片方のみにした場合アップロードできることを確認しました。単純に2つ分に増やしたコードだったのですが、原因を教えていただきたいです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/12/08 06:55
2021/12/08 08:03
2021/12/08 09:11
2021/12/08 09:14
2021/12/08 09:18
2021/12/08 09:26
2021/12/08 09:33
2021/12/08 09:38
2021/12/09 05:05
2021/12/09 05:55
2021/12/09 06:02 編集