質問編集履歴
4
誤字修正
    
        title	
    CHANGED
    
    | 
            File without changes
         | 
    
        body	
    CHANGED
    
    | @@ -109,7 +109,7 @@ | |
| 109 109 | 
             
                            //ファイルがフォルダに存在しているかのチェック
         | 
| 110 110 | 
             
                            if(file_exists('./images/' . $image)){
         | 
| 111 111 | 
             
                                $message1 = '画像をアップロードしました';
         | 
| 112 | 
            -
                                $sql = 'UPDATE  | 
| 112 | 
            +
                                $sql = 'UPDATE テーブル名 SET photo = :image WHERE date = "'.$検索用変数1.'" AND name = "'.$検索用変数2.'"';
         | 
| 113 113 | 
             
                                try {
         | 
| 114 114 | 
             
                                    $stmt = $dbh->prepare($sql);
         | 
| 115 115 | 
             
                                    $stmt->bindValue(':image', $image, PDO::PARAM_STR);
         | 
3
拡張子の検査を追加し全体を見直し
    
        title	
    CHANGED
    
    | 
            File without changes
         | 
    
        body	
    CHANGED
    
    | @@ -58,21 +58,21 @@ | |
| 58 58 | 
             
            <?php endif;?>
         | 
| 59 59 | 
             
            ```
         | 
| 60 60 |  | 
| 61 | 
            -
            ※追記 2021/1/30
         | 
| 61 | 
            +
            ※追記 2021/1/30 19:20修正
         | 
| 62 62 | 
             
            m.ts10806様にご指摘頂いた部分を念頭に
         | 
| 63 63 | 
             
            色々な事が理解出来ていないと感じましたので勉強し直しまして、以下のように致しました。
         | 
| 64 64 |  | 
| 65 65 | 
             
            ①imageとnameの相違を修正して一致させる
         | 
| 66 66 | 
             
            ②do{}while (file_exists('./images/' . $image));とし既に同名ファイルが存在してしまっている間は出し直し
         | 
| 67 | 
            -
            ③mt_rand() | 
| 67 | 
            +
            ③mt_rand()をtime().mt_rand()に変更(③があれば②は余分かもしれません)
         | 
| 68 68 | 
             
            ④try-catchを接続時以外にも追加
         | 
| 69 69 | 
             
            ⑤トランザクションを追加
         | 
| 70 | 
            +
            ⑥「本質的に画像じゃないもの」に対する検査の為に明示的に拡張子を検査
         | 
| 71 | 
            +
            参考
         | 
| 72 | 
            +
            https://qiita.com/papillon/items/6904437e4c98e3783eb3
         | 
| 73 | 
            +
             | 
| 70 74 | 
             
            現在の所正常にファイルがアップされている為、実際にはおかしいコードになっているかもしれません。
         | 
| 71 75 | 
             
            何分初めての処理ばかりで、判断がついていない状況です。
         | 
| 72 | 
            -
             | 
| 73 | 
            -
            「本質的に画像じゃないもの」に対する検査に関しては
         | 
| 74 | 
            -
            https://qiita.com/papillon/items/6904437e4c98e3783eb3
         | 
| 75 | 
            -
            のような記事を発見したのですが、具体的にどうすればよいかに関してはまだたどり着けていません。
         | 
| 76 76 | 
             
            お時間がかかってしまってすみません。
         | 
| 77 77 |  | 
| 78 78 | 
             
            "解決方法”は自己解決の場合のみ と記載があるのでこちらにコードを乗せました。
         | 
| @@ -88,39 +88,43 @@ | |
| 88 88 | 
             
                } catch (PDOException $e) {
         | 
| 89 89 | 
             
                    // ロールバック
         | 
| 90 90 | 
             
                    $dbh->rollBack();
         | 
| 91 | 
            -
             | 
| 91 | 
            +
                    // エラーメッセージ出力
         | 
| 92 92 | 
             
                    echo $e->getMessage();
         | 
| 93 93 | 
             
                    die();
         | 
| 94 94 | 
             
                }
         | 
| 95 | 
            -
                if (isset($_POST['upload'])) {//送信ボタンが押された | 
| 95 | 
            +
                if (isset($_POST['upload']) && !empty($_FILES['image']['name'])) {//送信ボタンが押されていて、ファイルがアップされていたら
         | 
| 96 | 
            -
                    do{
         | 
| 96 | 
            +
                    do{//imagesディレクトリに同名になるファイルが存在してしまっている間は出し直しをする
         | 
| 97 97 | 
             
                        $image = uniqid(time().mt_rand(), true);//ファイル名をユニーク化
         | 
| 98 | 
            -
                    }while (file_exists('./images/' . $image)); | 
| 98 | 
            +
                    }while (file_exists('./images/' . $image));
         | 
| 99 | 
            -
                    $ | 
| 99 | 
            +
                    $filepath = pathinfo($_FILES['image']['name']);
         | 
| 100 | 
            +
                    $ext =  $filepath['extension'];//拡張子を取得
         | 
| 101 | 
            +
                    if($ext !=="jpg" && $ext !=="jpeg" && $ext !=="gif" && $ext !=="png") { //拡張子がこの4つ何れでも無ければ
         | 
| 102 | 
            +
                        $message2 = '画像ファイルではありません';
         | 
| 103 | 
            +
                    }else{//拡張子がこの4つのどれかに該当したら
         | 
| 104 | 
            +
                        $image .= '.' .$ext;//ファイル名と拡張子を合体
         | 
| 100 | 
            -
             | 
| 105 | 
            +
                        $file = "images/$image";
         | 
| 101 | 
            -
                    if (!empty($_FILES['image']['name'])) {//ファイルが選択されていれば$imageにファイル名を代入
         | 
| 102 106 | 
             
                        move_uploaded_file($_FILES['image']['tmp_name'], './images/' . $image);//imagesディレクトリにファイル保存
         | 
| 107 | 
            +
                        //念の為exif_imagetypeでもチェック
         | 
| 108 | 
            +
                        if (exif_imagetype($file)) {
         | 
| 103 | 
            -
             | 
| 109 | 
            +
                            //ファイルがフォルダに存在しているかのチェック
         | 
| 104 | 
            -
             | 
| 110 | 
            +
                            if(file_exists('./images/' . $image)){
         | 
| 105 | 
            -
                            if (exif_imagetype($file)) {//画像ファイルかのチェック
         | 
| 106 111 | 
             
                                $message1 = '画像をアップロードしました';
         | 
| 107 112 | 
             
                                $sql = 'UPDATE cc SET cc_photo = :image WHERE cc_date = "'.$cc['cc_date'].'" AND cc_name = "'.$cc['cc_name'].'"';
         | 
| 108 113 | 
             
                                try {
         | 
| 109 114 | 
             
                                    $stmt = $dbh->prepare($sql);
         | 
| 110 115 | 
             
                                    $stmt->bindValue(':image', $image, PDO::PARAM_STR);
         | 
| 111 116 | 
             
                                    $stmt->execute();
         | 
| 112 | 
            -
                                    // コミット
         | 
| 113 117 | 
             
                                    $dbh->commit();
         | 
| 114 118 | 
             
                                } catch(PDOException $e) {
         | 
| 115 | 
            -
             | 
| 119 | 
            +
                                    // ロールバック
         | 
| 116 | 
            -
             | 
| 120 | 
            +
                                    $dbh->rollBack();
         | 
| 117 | 
            -
             | 
| 121 | 
            +
                                    // エラーメッセージ出力
         | 
| 118 | 
            -
             | 
| 122 | 
            +
                                    echo $e->getMessage();
         | 
| 119 | 
            -
             | 
| 123 | 
            +
                                    die();
         | 
| 120 124 | 
             
                                }
         | 
| 121 | 
            -
                            } else {
         | 
| 122 | 
            -
                                $message2 = '画像ファイルではありません';
         | 
| 123 125 | 
             
                            }
         | 
| 126 | 
            +
                        } else {
         | 
| 127 | 
            +
                            $message2 = '画像ファイルではありません';
         | 
| 124 128 | 
             
                        }
         | 
| 125 129 | 
             
                    }
         | 
| 126 130 | 
             
                }
         | 
2
誤字修正
    
        title	
    CHANGED
    
    | 
            File without changes
         | 
    
        body	
    CHANGED
    
    | @@ -63,7 +63,7 @@ | |
| 63 63 | 
             
            色々な事が理解出来ていないと感じましたので勉強し直しまして、以下のように致しました。
         | 
| 64 64 |  | 
| 65 65 | 
             
            ①imageとnameの相違を修正して一致させる
         | 
| 66 | 
            -
            ②do{}while (file_exists('./images/' . $image));とし既に同名ファイルが存在してしまってい | 
| 66 | 
            +
            ②do{}while (file_exists('./images/' . $image));とし既に同名ファイルが存在してしまっている間は出し直し
         | 
| 67 67 | 
             
            ③mt_rand()→time().mt_rand()に変更(③があれば②は余分かもしれません)
         | 
| 68 68 | 
             
            ④try-catchを接続時以外にも追加
         | 
| 69 69 | 
             
            ⑤トランザクションを追加
         | 
1
その後に関して追記
    
        title	
    CHANGED
    
    | 
            File without changes
         | 
    
        body	
    CHANGED
    
    | @@ -56,4 +56,73 @@ | |
| 56 56 | 
             
                    <button><input type="submit" name="upload" value="送信"></button>
         | 
| 57 57 | 
             
                </form>
         | 
| 58 58 | 
             
            <?php endif;?>
         | 
| 59 | 
            +
            ```
         | 
| 60 | 
            +
             | 
| 61 | 
            +
            ※追記 2021/1/30
         | 
| 62 | 
            +
            m.ts10806様にご指摘頂いた部分を念頭に
         | 
| 63 | 
            +
            色々な事が理解出来ていないと感じましたので勉強し直しまして、以下のように致しました。
         | 
| 64 | 
            +
             | 
| 65 | 
            +
            ①imageとnameの相違を修正して一致させる
         | 
| 66 | 
            +
            ②do{}while (file_exists('./images/' . $image));とし既に同名ファイルが存在してしまっていないる間は出し直し
         | 
| 67 | 
            +
            ③mt_rand()→time().mt_rand()に変更(③があれば②は余分かもしれません)
         | 
| 68 | 
            +
            ④try-catchを接続時以外にも追加
         | 
| 69 | 
            +
            ⑤トランザクションを追加
         | 
| 70 | 
            +
            現在の所正常にファイルがアップされている為、実際にはおかしいコードになっているかもしれません。
         | 
| 71 | 
            +
            何分初めての処理ばかりで、判断がついていない状況です。
         | 
| 72 | 
            +
             | 
| 73 | 
            +
            「本質的に画像じゃないもの」に対する検査に関しては
         | 
| 74 | 
            +
            https://qiita.com/papillon/items/6904437e4c98e3783eb3
         | 
| 75 | 
            +
            のような記事を発見したのですが、具体的にどうすればよいかに関してはまだたどり着けていません。
         | 
| 76 | 
            +
            お時間がかかってしまってすみません。
         | 
| 77 | 
            +
             | 
| 78 | 
            +
            "解決方法”は自己解決の場合のみ と記載があるのでこちらにコードを乗せました。
         | 
| 79 | 
            +
            (※sqlは既にレコードをinsertした後に画像を追加する仕様なのでupdateにしています)
         | 
| 80 | 
            +
            ```ここに言語を入力
         | 
| 81 | 
            +
            <?php
         | 
| 82 | 
            +
                $dsn = "mysql:host=localhost; dbname=xxx; charset=utf8";
         | 
| 83 | 
            +
                $username = "xxx";
         | 
| 84 | 
            +
                $password = "xxx";
         | 
| 85 | 
            +
                try {
         | 
| 86 | 
            +
                    $dbh = new PDO($dsn, $username, $password);
         | 
| 87 | 
            +
                    $dbh->beginTransaction();
         | 
| 88 | 
            +
                } catch (PDOException $e) {
         | 
| 89 | 
            +
                    // ロールバック
         | 
| 90 | 
            +
                    $dbh->rollBack();
         | 
| 91 | 
            +
                        // エラーメッセージ出力
         | 
| 92 | 
            +
                    echo $e->getMessage();
         | 
| 93 | 
            +
                    die();
         | 
| 94 | 
            +
                }
         | 
| 95 | 
            +
                if (isset($_POST['upload'])) {//送信ボタンが押された場合
         | 
| 96 | 
            +
                    do{
         | 
| 97 | 
            +
                        $image = uniqid(time().mt_rand(), true);//ファイル名をユニーク化
         | 
| 98 | 
            +
                    }while (file_exists('./images/' . $image));//imagesディレクトリに同名になるファイルが存在してしまっている間は出し直し
         | 
| 99 | 
            +
                    $image .= '.' . substr(strrchr($_FILES['image']['name'], '.'), 1);//アップロードされたファイルの拡張子を取得
         | 
| 100 | 
            +
                    $file = "images/$image";
         | 
| 101 | 
            +
                    if (!empty($_FILES['image']['name'])) {//ファイルが選択されていれば$imageにファイル名を代入
         | 
| 102 | 
            +
                        move_uploaded_file($_FILES['image']['tmp_name'], './images/' . $image);//imagesディレクトリにファイル保存
         | 
| 103 | 
            +
                        //ファイルがフォルダに存在しているかのチェック
         | 
| 104 | 
            +
                        if(file_exists('./images/' . $image)){
         | 
| 105 | 
            +
                            if (exif_imagetype($file)) {//画像ファイルかのチェック
         | 
| 106 | 
            +
                                $message1 = '画像をアップロードしました';
         | 
| 107 | 
            +
                                $sql = 'UPDATE cc SET cc_photo = :image WHERE cc_date = "'.$cc['cc_date'].'" AND cc_name = "'.$cc['cc_name'].'"';
         | 
| 108 | 
            +
                                try {
         | 
| 109 | 
            +
                                    $stmt = $dbh->prepare($sql);
         | 
| 110 | 
            +
                                    $stmt->bindValue(':image', $image, PDO::PARAM_STR);
         | 
| 111 | 
            +
                                    $stmt->execute();
         | 
| 112 | 
            +
                                    // コミット
         | 
| 113 | 
            +
                                    $dbh->commit();
         | 
| 114 | 
            +
                                } catch(PDOException $e) {
         | 
| 115 | 
            +
                                        // ロールバック
         | 
| 116 | 
            +
                                        $dbh->rollBack();
         | 
| 117 | 
            +
                                        // エラーメッセージ出力
         | 
| 118 | 
            +
                                        echo $e->getMessage();
         | 
| 119 | 
            +
                                        die();
         | 
| 120 | 
            +
                                }
         | 
| 121 | 
            +
                            } else {
         | 
| 122 | 
            +
                                $message2 = '画像ファイルではありません';
         | 
| 123 | 
            +
                            }
         | 
| 124 | 
            +
                        }
         | 
| 125 | 
            +
                    }
         | 
| 126 | 
            +
                }
         | 
| 127 | 
            +
            ?>
         | 
| 59 128 | 
             
            ```
         | 
