前提・実現したいこと
こんにちは。コロナウィルスの影響で学校が休みになってしまったので、PHPを学ぶことにした大学生です。
現在PHPを用いて表題の機能を持ったウェブアプリケーションを作ろうと思っているのですが、データベース(MySQL)に接続するところで、以下のエラーが表示されます。アップロードと画像の縮小とデータベースへの接続を全部ひとつのファイルでやろうとしているのがいけないのかなと思い、$_POST('images')を使ってデータベースに接続するためのファイルを分けて作ったりもしたのですが、今度は'images'がundefinedだというエラーが発生し、お手上げに状態になってしまいました。
説明が拙いところもあると思いますが、もし解決策をご存知の方がいらっしゃいましたらご教授お願いいたします。
よろしくお願いいたします。
p.s.
縮小画像を作った後、オリジナル画像を消去するためにunlink($imageFilePath)を挿入したいのですが、
Parse error: syntax error, unexpected 'unlink' (T_STRING) in /Applications/XAMPP/xamppfiles/htdocs/xxx/upload.php
と表示されてしまいます。これについてもよろしかったらアドバイスいただきたいです。
発生している問題・エラーメッセージ
Parse error: syntax error, unexpected '$dsn' (T_VARIABLE) in /Applications/XAMPP/xamppfiles/htdocs/xxx/upload.php on line 87
該当のソースコード
PHP
1<?php 2 3$text = $_POST['text']; 4 5$msg = null; // アップロード状況を表すメッセージ 6 7define('MIDDLE_WIDTH', 300); 8 9//データの拡張子をチェック 10{ 11 $imagesize = getimagesize($_FILES['image']['tmp_name']); 12 13 switch($imagesize['mime']){ 14 case 'image/jpeg': 15 $ext = '.jpg'; 16 break; 17 case 'image/png': 18 $ext = '.png'; 19 break; 20 default: 21 echo $_FILES['image']['name']."は画像ファイル(JPEG/PNG) ではありません。<br>"; 22 $ext = 0; 23 } 24} 25 #ファイル形式が異なる場合処理を止める 26{ 27 if ($ext === 0) { 28 exit; 29 } 30} 31 32 // アップロード処理 33 if (isset($_FILES['image']) && is_uploaded_file($_FILES['image']['tmp_name'])){ 34 $imageFileName = sha1(time().mt_rand()) . $ext; 35 if (move_uploaded_file($_FILES['image']['tmp_name'], 'album/' . $imageFileName)){ 36 $msg = 'アップロードしました。'; 37 } else { 38 $msg = 'アップロードできませんでした。'; 39 } 40 } 41 42$width = $imagesize[0]; 43$height = $imagesize[1]; 44$imageFilePath = 'album/'. $imageFileName; 45 46//画像をリサイズ 47//MIDDLE画像を作成、保存 48 49if ($width > MIDDLE_WIDTH) { 50 // 元ファイルを画像タイプによって作る 51 switch($imagesize['mime']){ 52 case 'image/gif': 53 $srcImage = imagecreatefromgif($imageFilePath); 54 break; 55 case 'image/jpeg': 56 $srcImage = imagecreatefromjpeg($imageFilePath); 57 break; 58 case 'image/png': 59 $srcImage = imagecreatefrompng($imageFilePath); 60 break; 61 } 62 63 // 新しいサイズを作る 64 $middleHeight = round($height * MIDDLE_WIDTH / $width); 65 66 // 縮小画像を生成 67 $middleImage = imagecreatetruecolor(MIDDLE_WIDTH, $middleHeight); 68 imagecopyresampled($middleImage, $srcImage, 0, 0, 0, 0, 300, $middleHeight, $width, $height); 69 70 // 縮小画像を保存する 71 switch($imagesize['mime']){ 72 case 'image/gif': 73 imagegif($middleImage, 'album/'.'m'.$imageFileName); //fullサイズリネイム 74 break; 75 case 'image/jpeg': 76 imagejpeg($middleImage, 'album/'.'m'.$imageFileName); 77 break; 78 case 'image/png': 79 imagepng($middleImage, 'album/'.'m'.$imageFileName); 80 break; 81 } 82} //if MIDDLE 83 84$MiddleimageFilePath = 'album/'.'m'.$imageFileName 85 86// データベースに接続 87$dsn = 'mysql:host=localhost;dbname=xxx;charset=utf8'; 88$user = 'xxx'; 89$password = 'xxx'; // userに設定したパスワード 90 91try { 92 $db = new PDO($dsn, $user, $password); 93 $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 94 // プリペアドステートメントを作成 95 $stmt = $db->prepare(" 96 INSERT INTO bbs (text, image) 97 VALUES (:text, :image)" 98 ); 99 // パラメータを割り当て 100 $stmt->bindParam(':text', $text, PDO::PARAM_STR); 101 $stmt->bindParam(':image', $MiddleimageFilePath, PDO::PARAM_STR); 102 // クエリの実行 103 $stmt->execute(); 104 // bbs.phpに戻る 105 header('Location: upload.php'); 106 exit(); 107} catch(PDOException $e) { 108 die ('エラー:' . $e->getMessage()); 109} 110 111?> 112 113<html> 114<head> 115 <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> 116 <title>画像アップロード</title> 117</head> 118 119<body> 120 <h1>画像アップロード</h1> 121 <form action="upload.php" method="post" enctype="multipart/form-data"> 122 <input type="text" name="text"> 123 <input type="file" name="image"> 124 <input type="submit" value="アップロード"> 125 </form> 126 <?php 127 if ($msg){ 128 echo '<p>' . $msg . '</p>'; 129 } 130 ?> 131</body> 132</html>
試したこと
データベース関連の87~109行目の位置が間違っているのかなと思い、一番最初の行に移動することも試したのですが、そうしたら"このページを表示できません"というメッセージが表示されました。エラーコードはINET_RESOURCE_NOT_FOUNDです。
補足情報(FW/ツールのバージョンなど)
PHP/7.4.4です。
以下のサイトと本を参考にコードを組みました。
http://sumidai.net/2017/07/09/add-form-02/
https://qiita.com/ryo-futebol/items/11dea44c6b68203228ff
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/04 21:43
2020/05/08 07:17 編集