電子書籍の厳選無料作品が豊富!

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')」部分だけは入ってしまいます。
エラーメッセージはどうしても出ません。初歩的なミスかもしれませんが宜しくお願いします

A 回答 (4件)

こんばんは。



>つまり
>if($_POST['image'] == '') {
>$error['image'] = 'blank';
>}
>↑この部分がどこか間違っている(?)。
その通りです。
ここがおかしい(とさっきも言いましたが・・・)です。

$_POSTは、基本的にname=valueのペアで飛んで来る事を忘れないでください・・・。
    • good
    • 0

こんにちは。



なんか基本的な部分が理解できてないような・・・?

>しかし二箇所ある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();を入れてみたのですが、ページ自体が白紙になってしまいました。

何でこんなところに入れるの?
意味ありますか?
    • good
    • 0
この回答へのお礼

すいません、理解不足で・・

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なので仰るとおり意味なかったです。

お礼日時:2011/03/10 22:52

こんばんは。



ちょっと回答が短絡的で、分かりにくかったですね・・・。
スミマセン。

>画像がないと何もDBに入らないようにしたはずですがtitleとmessageは必ず入り、

これは、
if (!empty($_POST)) {
if ($_SESSION['join']['image'] !='') {
ですが、
$_POSTはemptyじゃないので、TRUE。
$_SESSION['join']['image'] !=''もTRUEになってしまいます・・・。
(これは分かりますよね?''じゃないですから・・・)

>、違う拡張子の画像を入れても「date('YmdHis')」部分だけは入ってしまいます。

これは、
if(empty($error)) {
ここがFALSEでスルーされますが、後は一緒なので・・・。
    • good
    • 0
この回答へのお礼

taka451213さん、ご回答有難うございます。exit();。なるほどです。
エラーメッセージがちゃんと表示されて画像以外もDBに入らなくなりました。

しかし二箇所あるheader('Location: content_upload.php');のうち、両方と片方ずつとexit();を何度か入れてみましたが、
今度はjpg画像でも$error['image'] == 'blank'と同じ「* 恐れ入りますが、画像を改めて指定してください」が出るようになってしまいました。。

おそらく$error['image'] == にblankが入ってしまっていると思うのですが、
大変申し訳ありませんがわかりません。

試しに
$error['image'] = 'type';
}

}

この下にexit();を入れてみたのですが、ページ自体が白紙になってしまいました。

大変お手数ですが再度お教え願えますでしょうか。

お礼日時:2011/03/09 22:15

こんばんは。



>header('Location: content_upload.php');
この後に、
exit();
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!