質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

5844閲覧

POSTされない理由が分からないです

newyee

総合スコア213

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/02/27 08:13

編集2019/02/27 08:58

下記のコードにて、分からない部分がある為、教えて頂きたいです。
PHPのバージョンは、「7.3.1」です。
サーバーは、「xampp」を使用しています。

php

1<?php 2 3$msg = null; 4error_reporting(E_ALL); 5ini_set("display_errors",1); 6 7if(isset($_FILES['image']) && is_uploaded_file($_FILES['image']['tmp_name'])){ 8 $old_name = $_FILES['image']['tmp_name']; 9 $new_name = date("YmdHis"); 10 $new_name .= mt_rand(); 11 switch (exif_imagetype($_FILES['image']['tmp_name'])){ 12 case IMAGE_TYPE_JPEG: 13 $new_name .= 'jpg'; 14 break; 15 case IMAGE_TYPE_PNG: 16 $new_name .= 'gif'; 17 case IMAGE_TYPE_PNG: 18 $new_name .= '.png'; 19 break; 20 default: 21 header('Location:upload.php'); 22 exit(); 23 } 24 25 if(move_uploaded_file($old_name,'album/' . $new_name)){ 26 $msg = 'アップロードしました。'; 27 }else{ 28 $msg = 'アップロードできませんでした'; 29 } 30 var_dump($msg); 31}else{ 32 echo 'エラーです'; 33} 34?> 35<html> 36 <head> 37 <meta charset="utf-8"> 38 <title>交流サイト:画像アップロード</title> 39 </head> 40 <body> 41 <h1>交流サイト:画像アップロード</h1> 42 43 <p><a href="album.php">アルバム</a></p> 44 45 <p><a href="index.php">トップページに戻る</p> 46 47 <?php if($msg){echo '<p>' . $msg . '</p>';} ?> 48 49 <form action="upload.php" method="post" enctype="multipart/form-data"> 50 51 <input type="file" name="image"> 52 53 <input type="submit" value= "アップロード"> 54 55 </form> 56 </body> 57</html> 58

上記コードにおきまして、アップロードを行う画像を選択し、送信ボタンを押したのですが、画像が正常にアップロードできません。そもそも「if(isset($_FILES['image']) && is_uploaded_file($_FILES['image']['tmp_name'])){」ここの部分で「false」になってしまうのですが、POSTされていないということなのでしょうか?原因が分からない為、教えて頂けましたら幸いです。よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/02/27 08:17

念のため、ですが、 毎度になると思うのですが、PHPのバージョンやサーバー環境情報はご提示ください。 全ての人があなたの過去質問を全て見返すわけではありません。
papinianus

2019/02/27 08:24 編集

このコードをupload.phpにして、ファイルを送信すると「if(isset($_FILES['image']) && is_uploaded_file($_FILES['image']['tmp_name'])){」でtrueになります。 (ブロックの中に入って、exif_imagetypeがないというエラーが発生しました) ちなみに、ファイル名は何ですか?
newyee

2019/02/27 08:32

mtsさん>ご指摘ありがとうございます。 以後、きちんと確認するようにしたいと思います... 後ほど追記しておきます
newyee

2019/02/27 08:35

papinanusさん>ありがとうございます。 コードを記載したファイル名のことでしょうか?ファイル名は「upload.php」になります。
papinianus

2019/02/27 08:40

いえ。送信したファイル名です。windowsかなーと思ったりしたので。忘れてください。多分定数が存在しないエラーか、defaultに入って、reloadされてるかでしょう。switchを一旦やめるか、switchのdefaultのときはそこに来たことを示すようなメッセージを与えないと、自分もそうですがユーザもなぜリセットされたか分かんないんで、何回やっても(たとえばpdfが)アップロードできない、ってクレーム入れてくるでしょうね。
newyee

2019/02/27 08:40

すみません。取り急ぎ、追加情報なのですが、mtsさんに頂いたご回答を参考にさせて貰いコードを修正しましたら、アップロードできましたとの表示が画面に出力されました。
newyee

2019/02/27 08:45

papinianussaさん>ご助言頂きありがとうございます。 mtsさんにご回答下さった通り、IMAGETYPE_XXXをIMAGE_TYPE_XXXと入力してしまっているなどの、入力ミスが原因でした... 以後、気を付けたいと思います。
m.ts10806

2019/02/27 08:46

書き忘れましたが許可しないimagetypeのときにリダイレクトは悪手です。 バリデーション引っかけてエラーメッセージ出してください。
newyee

2019/02/27 09:03

mtsさん> エラーメッセージの件なのですが、switch文のDEFAULTにて、リダイレクトを削除し、エラーメッセージを追記する、といった修正で大丈夫でしょうか...?
m.ts10806

2019/02/27 09:05

大きな修正ではないのでまずはやってみてください。あとは利用者に何を伝えたいか、なのでメッセージ内容については仕様です。決めてください。
newyee

2019/02/27 09:08

ありがとうございます。 取り敢えず、修正してみたいと思います!
guest

回答2

0

ベストアンサー

ドキュメント確認してください。

IMAGE_TYPE_XXXではなくIMAGETYPE_XXX

この手の名前が決まっているものは見ながら手打ちではなくコピペするのが基本です。


細かい指摘:

  • gifとしたいはずがIMAGETYPE_PNGを書いている
  • そこにbreak;がない
  • albumフォルダ、なかったら作るの処理はあったほうがいい
  • トップページに戻る のaタグ閉じられてない

IDE(Eclipseなど)使いましょう。
正しい定数なのかとか存在する関数なのかとかaタグの閉じ忘れとか
実行前に気づけることが沢山あります。

あと、下記は読んでください。

投稿2019/02/27 08:22

編集2019/02/27 08:26
m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

newyee

2019/02/27 08:52

ご回答頂きありがとうございます。 ご回答いただきました通り、入力ミスが原因でした... 貼って頂きましたリンク、ありがとうございます。参考にさせて頂きます。 実は自分が使っています、テキストエディッタは、vscodeなのですが、PHPファイルとして、保存した場合、htmlを入力する際の入力補助が、されなくなってしまうんですよね... htmlファイルとして、保存した場合だと付くんですけどね...コードを書いていて不便だとは感じているので、どうにかならないか、調べてみたいと思います。
m.ts10806

2019/02/27 09:02

vscodeは使ったことないですが、phpの標準関数までサポートしてるのでしょうか。 htmlよりphpのミスの方がアプリとしては致命的なのでそこは天秤にかけるまでもなく、だと思います。 さいあく、どちらもきちんとマニュアルがあるのでそこからコピペしてくればいいだけの話です。 私もどちらもそれなりに実務で扱ってきていますが、いまだにマニュアルからコピペすることが多いですよ。
guest

0

先に、
IMAGE_TYPE_PNGがダブリ、しかもbreak;ないのはミス。
アップロードされたファイルの種類によって処理を分岐している箇所が雑なので、
もう一度見直しを。

回答を完成させる前に mts10806 さんの回答で全部言われたから
そっち参照。
exif_imagetype
IMAGETYPE_GIF
IMAGETYPE_JPEG
IMAGETYPE_PNG
などという定数を使うようです。

投稿2019/02/27 08:19

編集2019/02/27 08:28
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

newyee

2019/02/27 08:53

ご回答ありがとうございます。 ご指摘の通りでした...ご回答下さいました点を修正しましたら、正常にアップロードすることができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問