![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
現在、DBに画像を登録するプログラムを作成しているのですが、登録できません。ファイルの大きさが問題なのかと思い、小さい画像(1.5M)でためしてみましたが、やはりできませんでした。
DBのフィールド名なども正しいことを確認しています。
原因、対策がわかる方がいらっしゃいましたら教えてください。
よろしくお願いします。
----------------------
<?php
if($_POST["submit"]=="upload")
{
// データベースに接続する処理。
略
mysql_select_db( $dbname );
mysql_set_charset("utf8");// 文字コードを指定します。
// ファイル情報を取得
$file = $_FILES["userfile"]["name"];// 元のファイル名
$type = $_FILES["userfile"]["type"];// MIME型
$tmpname = $_FILES["userfile"]["tmp_name"];// テンポラリファイル名
$size = $_FILES["userfile']['size"];//サイズ
// 画像サイズを取得
list($width, $height) = getimagesize($tmpname);
// 画像データを取得
$contents = file_get_contents($tmpname);
// エンコード
$contents = base64_encode($contents);
// SQL用にエスケープ
$contents = mysql_real_escape_string($contents,$conn);
// 格納
$strsql = "INSERT INTO DBpractice ("."size, imgtype, width, height, imgdata ".") values ( "."$size, '{$type}', $width, $height, '{$contents}'".");";
$res = mysql_query($strsql,$conn);
print mysql_error($conn);
echo "更新を完了しました。";
mysql_close($conn);
}
?>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<title>test</title>
<link href="common/css/base.css" rel="stylesheet" type="text/css" />
</head>
<body>
<form name="rfform" action="<?=$_SERVER['PHP_SELF'] ?>" enctype="multipart/form-data" method="post">
<input type="hidden" name="act" value="upload">
<input type="file" name="userfile">
<input type="submit" name="submit" value="アップロード">
</form>
</body>
</html>
---------------------------
No.8ベストアンサー
- 回答日時:
><?=変数?>をつかうためには、php.iniの設定が必要であるということは知りませんでした。
どのような設定が必要なのでしょうか。php.iniのshort_open_tagがonになっていることですが、action要素に$_SERVER['PHP_SELF'] の値が挿入されているようなので問題ないようですね。
>修正後、試しましたがやはり結果は同じです。
echo で$fileなどが表示されるようになっていませんか?
正直なところ、他にも全角スペースがないかを含め、ソースを最初から全部見直したほうがいいと思います。
その際は、php.iniの設定で、phpのエラーを画面で表示するようにしたほうがいいですね。
レンタルサーバーだと、 .htaccessが使えないと駄目ですけど。
一度、ローカルに環境を整えてそこで試してからサーバーに上げるようにしたほうがいいように思います。
あれからスペースを確認したり、色々と思考錯誤した結果なんとか登録することができました。昨日反映されていなかったデータが今日になってDBに反映されていたりと、正直どこが決定的なミスだったのか自分でもよくわからないのですが、解決できてよかったです。
有益なアドバイスを沢山いただきありがとうございました。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_14.png?e8efa67)
No.9
- 回答日時:
> INSERT INTO DBpractice (size, imgtype, width, height, imgdata ) values ( , '', 41, 50, '/9j/4AAQSkZJRgABAQAAAQABAAD
ということは、sizeとimgtypeにまともな値が入っていないことからクエリーエラーがおきているのでしょう。
sizeについて:
> $size = $_FILES["userfile']['size"];//サイズ
囲み記号において"と'が混在しているので統一しましょう。
$size = $_FILES["userfile"]["size"];//サイズ
imgtypeについて:
> $type = $_FILES["userfile"]["type"];// MIME型
これに値が入らないのが不思議ですね。わかりません。
ただ、とりあえず私だったら以下のようにするかな。
1. アップロード前のファイルが本当に画像ファイルか
2. アップロード前のファイル名において画像らしい拡張子がついているか
3. プログラム処理において、例えば想定するMIMEがimage/gifとimage/jpegなら、
$typeがそれらと等しいか確認してどれとも一致しなければ、エラーなどを表示し、
クエリ(insert ...)には進まないようにする
ご回答ありがとうございます。無事、解決いたしました。
いただいたアドバイスは次回以降の参考にさせていただきます。
ありがとうございました。
No.7
- 回答日時:
上記HTML部分をコピーして、$fileなどを表示させてみましたが問題ありませんでした。
初歩的なところではありますが、上記ソースでは$fileなどの変数と=の間が全角スペースになっていますが
実際は半角スペースですよね?
また、formタグのaction要素の部分を<?=変数?>としていますが、php.iniの設定はしてあるんですよね?
画面で、ソースの表示をした際のaction要素はどうなっているでしょうか?
この回答への補足
ご指摘箇所の半角スペースは気付いていませんでした。
修正後、試しましたがやはり結果は同じです。
<?=変数?>の部分は、ソース上では、以下のようになっています。この状態は正しいのでしょうか。
action="/XXXXX/upload.php
※XXXXはupload.phpが入っているフォルダ名
<?=変数?>をつかうためには、php.iniの設定が必要であるということは知りませんでした。どのような設定が必要なのでしょうか。
もし参考サイトなどがあれば教えてください。(現在、自分でも調査中ですが、よさそうなサイトを見つけることがまだできていません。)
ちなみに環境は、サクラインターネットを使用しています。
※プログラミング初心者のため、基本的事項がよくわかっておらずご迷惑をおかけし、申し訳ありません。よろしくお願いいたします。
No.6
- 回答日時:
$_FILES["userfile"]["error"] の値はどうなっていますか?
1 ならばアップロードできるファイルサイズオーバーしています。
サイズが1MB以下のファイルで試してみてください。
アップロードできるファイルサイズを増やしたければphp.iniを修正してください。
この回答への補足
帰ってきた値は0でした。0 ということはファイルのアップロードは成功している ということを調べたのですが、やはりDBのテーブルには該当するデータは見当たりません。
何かもっと根本的なところで間違いをしているのでしょうか?
No.5
- 回答日時:
$size = $_FILES["userfile']['size"];
とありますが
$size = $_FILES["userfile"]["size"];
ではないでしょうか。
SQL文も$sizeの部分がおかしいようですし。
ちなみに、
'/9j/4AAQSkZJRgABAQAAAQABAAD//gA+Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcgSlBFRyB2NjIpLCBkZWZhdWx0IHF1YWxpdHkK/9sAQwAIBgYHBgUIBwcH・・・・・・・・・
というのは、ファイルの内容なので問題ないかと思います。
この回答への補足
情報が前後してしまい、申し訳ありません。
さきほど、ご指摘部分も修正後 echo $strsql;を実行したところ上記のエラーとなりました。
サイズの部分がおかしいということは、やはりファイルの容量の問題なのでしょうか??
何か他に原因がわかりますでしょうか??
No.4
- 回答日時:
SQL文の構文が間違ってるというエラーのようですね。
$strsql を echo で表示するとどうなりますか?
この回答への補足
ありがとうございます。
echo をしたところ、以下のようなエラーが出ました。
width, height以外がうまく取得できていないように思えるのですが、取得部分が何かおかしいのでしょうか??
INSERT INTO DBpractice (size, imgtype, width, height, imgdata ) values ( , '', 41, 50, '/9j/4AAQSkZJRgABAQAAAQABAAD//gA+Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcgSlBFRyB2NjIpLCBkZWZhdWx0IHF1YWxpdHkK/9sAQwAIBgYHBgUIBwcH・・・・・・・・・
No.3
- 回答日時:
こんにちは。
if ( $_POST['submit'] == 'upload' ) {
}
この条件がtrueにならないと思いますがいかがでしょうか。
<input type="submit" name="submit" value="アップロード">
という指定であれば$_POST['submit']の中身は"アップロード"になるはずです。
if ( $_POST['submit'] == 'アップロード' ) {
}
にするか
if ( $_POST['act'] == 'upload' ) {
}
にしないとifの中は実行されないと思います。
なので、エラーメッセージも、画像の情報も表示されないんだと思います。
この回答への補足
ご回答 ありがとうございます。
おっしゃられる通り、valueとの整合性がおかしいですね。。
if ( $_POST['act'] == 'upload' ) {
}
に修正しましたところ、今度は以下のエラーがでました。
最後の方に'41''50'とあるのは、サイズのことをさしているのではないかと推測していますが、解決できずに困っています。解決策がおわかりであればご教授ください。 よろしくお願いいたします。
/var/tmp/phpkWq15A/9j/4AAQSkZJRgABAQAAAQABAAD//gA+Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcgSlBFRyB2NjIpLCBkZWZhdWx0IHF1YWxpdHkK/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0aHx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAMgApAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A8X05d91AvrKBX03arizhHpGv8q+aNGBbU7JfWdf5ive9e8VWnh2yjVl865ZAViBxgepPYVPUpbEfjaTy/Dd6en7lh+fFfPjNyx9q7bW/iBqOuafLaS2kKQzNs3pnIAIOOvtXFzwPASH6HgGqEyKQ/uPq1VqssoKAHoKZsWgRp6Ef+JzY56CZSfzFd14ftJvG+uXLynEbMXlc8lVPAUfQcVyHh+ylj8Q2Cyxnb5g57V6R8MNPcaRc30Usar553KUycKPXt1rKpLljdGtGPNKzNvVfhxo0ekxpCjRNGdysGySfUjvXlGrWKu9xEAN8WQQOzCvoSS1N7Krfa2i+X5olwA/HfPWvCviFatpfimaSDKpcqGwP7w4NZ0ZO9jbEU0lzJHEk4pMikk4kIYYJ5wabj2NdJyHWHUbeby/IZQ0a8sQR2rb8AeI006aXSpW2pdf6ts8CTpg/Xiti0+F2bC71KOeaG22u0Nve2xSY7c4zyMZ/lXm9xC6mS5UbFEgA29s5PH5Vk43umaqTjaSPpJXYWokkV4o1XLF8cn/CvHfiJOb3WUWKMsY0yFA7npn04qno/i7X7mQJPfvNBEuAJADg9j9frU0snmM0rNvcnLbuc0UqLUrsurXUlZHF3kF1Ko8+LDoPvHGSP61Q8lvQ/lXa3G0g8ZB9azvs0f8AdX8hXQ4nNc+lYXabTJhKxkG0jDnNfNuvxpFfTpGioodgAowOpoorlpm09iTRwBZEjuxq7k5PNFFdcdjFkM33B+NV6KKoR//ZYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' '', 41, 50, '/9j/4AAQSkZJRgABAQAAAQABAAD//gA+Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2' at line 1
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_14.png?e8efa67)
No.2
- 回答日時:
> 現在、DBに画像を登録するプログラムを作成しているのですが、登録できません。
どうやって登録できないことがわかりましたか。
私の過去の失敗では、実は登録出来ていたけど取り出し方が間違っていたというのがありました。
> $file = $_FILES["userfile"]["name"];// 元のファイル名
> $type = $_FILES["userfile"]["type"];// MIME型
> $tmpname = $_FILES["userfile"]["tmp_name"];// テンポラリファイル名
> $size = $_FILES["userfile']['size"];//サイズ
> list($width, $height) = getimagesize($tmpname);
> $contents = file_get_contents($tmpname);
> $res = mysql_query($strsql,$conn);
これらの値が真または適切(そう)な値であるか、echoで確認してみましょう。
> print mysql_error($conn);
これでどんなメッセージが表示されましたか。それを公開しましょう。
もしエラーメッセージが無いのなら、繰り返しになりますが、登録は出来ているのかもしれません。
この回答への補足
登録できていないということは、実際のテーブルに何の値も入っていないことから確認しているのですが、何か間違っているでしょうか。
print mysql_error($conn);
では何のメッセージも表示されず、また以下を格納の前に行ってみましたが何の表示もされませんでした。(書き方や場所などが間違っているのでしょうか、、、)
echo $file;
echo $type;
echo $tmpname;
echo $size;
echo $contents;
ちなみに、ブラウザ画面上の動きとしては、アップロードボタンを押すと、「ファイルが選択されていません」という状態に戻ってしまう状況です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- PHP PHP MySQLに画像を直接保存 2 2022/06/05 11:50
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- PHP imageフォルダに、画像をリサイズして保存する時のファイル名を変更したい 1 2023/05/30 11:39
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アップロードファイル名の文字化け
-
VBA で、スペースを含むファイ...
-
PHP5でsimple_xml_load_fileす...
-
ファイル名を変更してアップロ...
-
PHPからHTMLへの変数の受け...
-
Flaskでサーバー立ち上げに関して
-
PHPで入力フォームでデータを確...
-
phpで変数を使ってcopyできない
-
name属性が全角の場合・・・
-
<input type="hidden" >で配列...
-
ラジオボタンをsessionで使いたい
-
PHP ボタンが押されたら処理を...
-
プルダウンとCSVの連動
-
laravelを利用してコントロール...
-
PHPで郵便番号を検索し、住所を...
-
フォーム送信後の更新ボタンで...
-
配列をhiddenで
-
検索時の選択内容を保持する方法
-
HTMLで前の画面に戻る時、入力...
-
PHPでPCのローカル時刻は取得出...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA で、スペースを含むファイ...
-
ファイル名を変更してアップロ...
-
アップロードファイル名の文字化け
-
PHPからHTMLへの変数の受け...
-
プログラミングC++のmapについて
-
phpで変数を使ってcopyできない
-
Flaskでサーバー立ち上げに関して
-
SQLインジェンクション対策法を...
-
POSTの項目に追加
-
パラメータを2個つけたい
-
サブフォルダ内の全てのテキス...
-
フォームで送られてきたメール...
-
PHP FTPサーバへの画像アップロ...
-
連想配列を複数条件で比較して...
-
name属性が全角の場合・・・
-
if function PHP
-
マクロ(VBA)について
-
PDOのprepareでLIKEの部分一致...
-
画像をDBに登録できない
-
テキストボックスの値を取得したい
おすすめ情報