![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
PHP初心者です。画像をDBにアップロードする際jpgの場合のみアップできるようにして、
それ以外の場合エラーメッセージを表記させたいのですが、上手くいきません。
下記がソースになります。
if(!empty($_POST)) {
if($_POST['image'] == '') {
$error['image'] = 'blank';
}
//画像エラーの確認
$fileName = $_FILES['image']['name'];
if(!empty($fileName)) {
$ext = substr($fileName, -3);
if($ext !='jpg') {
$error['image'] = 'type';
}
}
if(empty($error)) {
//画像をアップロードする
$image = date('YmdHis') . $_FILES['image']['name'];
move_uploaded_file($_FILES['image']['tmp_name'], '../member_picture/' . $image);
$_SESSION['join'] = $_POST;
$_SESSION['join']['image'] = $image;
header('Location: content_upload.php');
}
}
//メッセージを記録する
if (!empty($_POST)) {
if ($_SESSION['join']['image'] !='') {
$sql = sprintf('INSERT INTO post SET member_id=%d,message="%s", title="%s", image="%s", created=NOW()',
mysql_real_escape_string($member['id']),
mysql_real_escape_string($_POST['message']),
mysql_real_escape_string($_POST['title']),
mysql_real_escape_string($_SESSION['join']['image'])
);
mysql_query($sql) or die(mysql_error());
header('Location: content_upload.php');
}
}
(以下body)
<form action="" method="post" enctype="multipart/form-data">
<dl>
<dt>ログイン名:<?php echo $member['name']; ?>投稿画面<br><br>タイトル</dt>
<dd>
<input type="text" name="title" size="35" maxlength="255"
value="<?php echo h($_POST['title']); ?>" />
</dd>
<dt>メッセージ</dt>
<dd>
<input type="text" name="message" size="35" maxlength="255"
value="<?php echo h($_POST['message']); ?>" />
</dd>
<dt>写真 <span class="required">必須</span></dt>
<dd>
画像<br>
<input type="file" name="image" />
<?php if($error['image'] == 'type'): ?>
<p class="error">* 画像は「.jpg」の画像を指定してください</p>
<?php endif; ?>
<?php if($error['image'] == 'blank'): ?>
<p class="error">* 恐れ入りますが、画像を改めて指定してください</p>
<?php endif; ?>
</dd>
</dl>
<div><p><input type="submit" value="投稿する" /></p></div>
</form>
「//メッセージを記録する」で画像がないと何もDBに入らないようにしたはずですがtitleとmessageは必ず入り、違う拡張子の画像を入れても「date('YmdHis')」部分だけは入ってしまいます。
エラーメッセージはどうしても出ません。初歩的なミスかもしれませんが宜しくお願いします
No.4ベストアンサー
- 回答日時:
こんばんは。
>つまり
>if($_POST['image'] == '') {
>$error['image'] = 'blank';
>}
>↑この部分がどこか間違っている(?)。
その通りです。
ここがおかしい(とさっきも言いましたが・・・)です。
$_POSTは、基本的にname=valueのペアで飛んで来る事を忘れないでください・・・。
No.3
- 回答日時:
こんにちは。
なんか基本的な部分が理解できてないような・・・?
>しかし二箇所あるheader('Location: content_upload.php');のうち、
>両方と片方ずつとexit();を何度か入れてみましたが、
>今度はjpg画像でも$error['image'] == 'blank'と同じ「* 恐れ入りますが、画像を改めて指定してください」
>が出るようになってしまいました。。
えーと・・・、
この現象とexit()は、何の関係もありません。
Locationでheader吐いた直後は、両方ともexit()してください。
(じゃないと、以降の処理も走ります)
if($_POST['image'] == '') {
$error['image'] = 'blank';
}
これは必ずTRUEになりますよね?
<input type="file" name="image" />
これはvalueがありません(指定できない)ので・・・。
理解できますか?
>試しに
>$error['image'] = 'type';
>}
>}
>この下にexit();を入れてみたのですが、ページ自体が白紙になってしまいました。
何でこんなところに入れるの?
意味ありますか?
すいません、理解不足で・・
if($_POST['image'] == '')がtrueになっているためエラーメッセージが出るのは理解しております。
<input type="file" name="image" />でvalueが指定できないのも。
でも
<?php if($error['image'] == 'type'): ?>
<p class="error">* 画像は「.jpg」の画像を指定してください</p>
↑これが正常に作動するということは、
//画像エラーの確認
$fileName = $_FILES['image']['name'];
if(!empty($fileName)) {
$ext = substr($fileName, -3);
if($ext !='jpg') {
$error['image'] = 'type';
}
}
↑これは間違っていないと。
つまり
if($_POST['image'] == '') {
$error['image'] = 'blank';
}
↑この部分がどこか間違っている(?)。
$_POSTではなく$_FILESなのかなとも少し思ったのですが、
今度はどの画像でもDBに上がるようになってしまいました・・・
何度も非常に申し訳ございません。何が足りないのでしょうか?
>>試しに
>>error['image'] = 'type';
>>
>>
>>この下にexit();を入れてみたのですが、ページ自体が白紙になってしまいました。
>何でこんなところに入れるの?
>意味ありますか?
こちらはすいません、if(empty($error))がfalseなので仰るとおり意味なかったです。
No.2
- 回答日時:
こんばんは。
ちょっと回答が短絡的で、分かりにくかったですね・・・。
スミマセン。
>画像がないと何もDBに入らないようにしたはずですがtitleとmessageは必ず入り、
これは、
if (!empty($_POST)) {
if ($_SESSION['join']['image'] !='') {
ですが、
$_POSTはemptyじゃないので、TRUE。
$_SESSION['join']['image'] !=''もTRUEになってしまいます・・・。
(これは分かりますよね?''じゃないですから・・・)
>、違う拡張子の画像を入れても「date('YmdHis')」部分だけは入ってしまいます。
これは、
if(empty($error)) {
ここがFALSEでスルーされますが、後は一緒なので・・・。
taka451213さん、ご回答有難うございます。exit();。なるほどです。
エラーメッセージがちゃんと表示されて画像以外もDBに入らなくなりました。
しかし二箇所あるheader('Location: content_upload.php');のうち、両方と片方ずつとexit();を何度か入れてみましたが、
今度はjpg画像でも$error['image'] == 'blank'と同じ「* 恐れ入りますが、画像を改めて指定してください」が出るようになってしまいました。。
おそらく$error['image'] == にblankが入ってしまっていると思うのですが、
大変申し訳ありませんがわかりません。
試しに
$error['image'] = 'type';
}
}
この下にexit();を入れてみたのですが、ページ自体が白紙になってしまいました。
大変お手数ですが再度お教え願えますでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- PHP PHP MySQLに画像を直接保存 2 2022/06/05 11:50
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- PHP imageフォルダに、画像をリサイズして保存する時のファイル名を変更したい 1 2023/05/30 11:39
- PHP 'member_picture/'に/がありますが 、「スラッシュ」は必要でしょうか? 1 2022/11/27 04:32
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
OpenGLで描いて画像ファイル出力
-
VBSの「MsgBox」について
-
Webカメラように頻繁に画像を更...
-
「imagejpeg」(GD)で作成した...
-
VBAでJPGサイズ変更
-
Pythonで画像の読み込みが上手...
-
ファイルアップロードのダイア...
-
画像処理について
-
設定した日時になったら更新
-
GDI+を使ったビット数とDPIの扱い
-
PHPの画像アップ時の拡張子制限...
-
ファイルアップ時のファイル名
-
PHPを使ってHTMLで画像表示させ...
-
最も速い画像合成処理を教えて...
-
Flash lite 1.1のloadMovieで画...
-
CFileDialogの最初のディレクト...
-
VB6にてメールを送信する方法
-
onedrive にexcelファイルをア...
-
phpのheader("Location:#pos")...
-
バイナリファイルをブラウザに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
透過PNGが透過されない!!
-
VBSの「MsgBox」について
-
拡張子php画像をjpg画像等に変...
-
C# Excelファイルへの画像挿入。
-
VBAでJPGサイズ変更
-
SQLiteに画像を格納したい
-
iphoneで虫眼鏡の作り方
-
PHP MySQLに画像を直接保存
-
Illustratorで文字と画像を流し...
-
openCVの超解像処理
-
PHPで吐き出した画像にリンクを...
-
ChatGPTに作らせたい Excel VBA
-
PHPによる画像の生成による色の...
-
pictureboxに表示した画像のフ...
-
GDI+を使ったビット数とDPIの扱い
-
ウィンドウサイズを取得して、p...
-
ビットマップ画像を読み込むプ...
-
BLOBデーターの画像の表示方法...
-
OpenGLで描いて画像ファイル出力
-
ImageTTFTextで保存すると文字...
おすすめ情報