やりたいこと
HTMLフォームで選択された画像ファイルをMySQLにインサート/アップロードしたいのですが以下のコードでやるとインサートされません。
打開策を教えていただければ幸いです。
※おそらく関係ないと思いますが、Wordpressで開発しております。関係ないと思うのでWordpressタグを入れてません。
php
1<?php 2echo '<br>'; 3echo <<<HTML 4<form action="" method="post" accept-charset="UTF-8" enctype="multipart/form-data"> 5 <table> 6 <tr> 7 <td><label>DNA/ID</td> 8 <td><input type="text" name="dna_id" size="40" value=""></label></td> 9 </tr> 10 <tr> 11 <td><label>亜科</td> 12 <td><input type="text" name="subfamily_latin" size="40" value=""></label></td> 13 </tr> 14 <tr> 15 <td><label>亜科(英)</td> 16 <td><input type="text" name="subfamily" size="40" value=""></label></td> 17 </tr> 18 <tr> 19 <td><label>族</td> 20 <td><input type="text" name="family_latin" size="40" value=""></label></td> 21 </tr> 22 <tr> 23 <td><label>族(英)</td> 24 <td><input type="text" name="family" size="40" value=""></label></td> 25 </tr> 26 <tr> 27 <td><label>属</td> 28 <td><input type="text" name="genus" size="40" value=""></label></td> 29 </tr> 30 <tr> 31 <td><label>種</td> 32 <td><input type="text" name="species" size="40" value=""></label></td> 33 </tr> 34 <tr> 35 <td><label>和名</td> 36 <td><input type="text" name="Japanese_name" size="40" value=""></label></td> 37 </tr> 38 <tr> 39 <td><label>命名者</td> 40 <td><input type="text" name="nominee" size="40" value=""></label></td> 41 </tr> 42 <tr> 43 <td><label>分布</td> 44 <td><input type="text" name="distribution" size="40" value=""></label></td> 45 </tr> 46 <tr> 47 <td><label>サイズ(小)</td> 48 <td><input type="text" name="size_s" size="40" value=""></label></td> 49 <td><label>サイズ(大)</td> 50 <td><input type="text" name="size_l" size="40" value=""></label></td> 51 </tr> 52 <tr> 53 <td><label>情報</td> 54 <td><input type="text" name="information" size="40" value=""></label></td> 55 </tr> 56 <tr> 57 <td><label>写真</td> 58 <td><input type="file" name="picture"></label></td> 59 </tr> 60 <tr> 61 <td><label>写真情報</td> 62 <td><input type="text" name="picture_info" size="40" value=""></label></td> 63 </tr> 64 <tr> 65 <td><label>標本データ</td> 66 <td><input type="file" name="specimen_data"></label></td> 67 </tr> 68 </table> 69 <input type="submit" value="送信" class="button button-primary"> 70</form> 71HTML; 72 73$k_1 = $_POST['dna_id']; 74$k_2 = $_POST['subfamily_latin']; 75$k_3 = $_POST['subfamily']; 76$k_4 = $_POST['family_latin']; 77$k_5 = $_POST['family']; 78$k_6 = $_POST['genus']; 79$k_7 = $_POST['species']; 80$k_8 = $_POST['Japanese_name']; 81$k_9 = $_POST['nominee']; 82$k_10 = $_POST['distribution']; 83$k_11 = $_POST['size_s']; 84$k_12 = $_POST['size_l']; 85$k_13 = $_POST['information']; 86$k_14 = $_POST['picture']; 87$k_15 = $_POST['picture_info']; 88$k_16 = $_POST['specimen_data']; 89$t_1 = ""; 90 91echo '<br>'; 92var_dump($k_1); 93echo '<br>'; 94var_dump($k_2); 95echo '<br>'; 96var_dump($k_3); 97echo '<br>'; 98var_dump($k_4); 99echo '<br>'; 100var_dump($k_5); 101echo '<br>'; 102var_dump($k_6); 103echo '<br>'; 104var_dump($k_7); 105echo '<br>'; 106var_dump($k_8); 107echo '<br>'; 108var_dump($k_9); 109echo '<br>'; 110var_dump($k_10); 111echo '<br>'; 112var_dump($k_11); 113echo '<br>'; 114var_dump($k_12); 115echo '<br>'; 116var_dump($k_13); 117echo '<br>'; 118var_dump($k_14); 119echo '<br>'; 120var_dump($k_15); 121echo '<br>'; 122var_dump($k_16); 123echo '<br>'; 124 125if (is_null($k_1) && is_null($k_2) && is_null($k_3) && is_null($k_4) && is_null($k_5) && is_null($k_6) && is_null($k_7) && is_null($k_8) && is_null($k_9) && is_null($k_10) && is_null($k_11) && is_null($k_12) && is_null($k_13) && is_null($k_14) && is_null($k_15) && is_null($k_16)): 126 echo '情報を入力してください'; 127elseif ( $k_1 == $t_1 && $k_2 == $t_1 && $k_3 == $t_1 && $k_4 == $t_1 && $k_5 == $t_1 && $k_6 == $t_1 && $k_7 == $t_1 && $k_8 == $t_1 && $k_9 == $t_1 && $k_10 == $t_1 && $k_11 == $t_1 && $k_12 == $t_1 && $k_13 == $t_1 && $k_14 == $t_1 && $k_15 == $t_1 && $k_16 == $t_1 ): 128 echo '情報を入力しなければ送信できません'; 129elseif ($k_1 != $t_1 && $k_2 != $t_1 && $k_3 != $t_1 && $k_4 != $t_1 && $k_5 != $t_1 && $k_6 != $t_1 && $k_7 != $t_1 && $k_8 != $t_1 && $k_9 != $t_1 && $k_10 != $t_1 && $k_11 != $t_1 && $k_12 != $t_1 && $k_13 != $t_1 &&/* $k_14 != $t_1 &&*/ $k_15 != $t_1/* && $k_16 != $t_1*/): 130 //$t_2 = file_get_contents($_FILES['picture']); 131 $k_14 = file_get_contents($_FILES['picture']['tmp_name']); 132 $k_16 = file_get_contents($_FILES['specimen_data']['tmp_name']); 133 //var_dump($t_2); 134 //$k_14 = 't'; 135 //$k_16 = 't'; 136 /* 137 echo '<br>'; 138 var_dump($k_14); 139 echo '<br>'; 140 var_dump($k_16); 141 echo '<br>'; 142 */ 143 /* 144 $sql = "INSERT INTO kometuki 145 ( dba_id, subfamily_latin ) 146 VALUES 147 ( 1, '18' ) 148 "; 149 db_connection($sql); 150 */ 151 $host = my_database('host'); 152 $schema = my_database('schema'); 153 $id = my_database('id'); 154 $pass = my_database('pass'); 155 // 変数の初期化 156 $sql = null; 157 $res = null; 158 $dbh = null; 159 try { 160 // DBへ接続 161 $dbh = new PDO("mysql:host=$host; dbname=$schema; charset=utf8", "$id", "$pass"); 162 // SQL作成 163 $sql = "INSERT INTO kometuki 164 ( dba_id, subfamily_latin, subfamily, family_latin, family, genus, species, Japanese_name, nominee, distribution, size_s, size_l, information, picture, picture_info, specimen_data ) 165 VALUES 166 ( $k_1, $k_2, $k_3, $k_4, $k_5, $k_6, $k_7, $k_8, $k_9, $k_10, $k_11, $k_12, $k_13, $k_14, $k_15, $k_16 ) 167 "; 168 // SQL実行 169 $res = $dbh->query($sql); 170 echo '情報は追加されました'; 171 } catch(PDOException $e) { echo $e->getMessage(); die();} 172 // 接続を閉じる 173 $dbh = null; 174 175elseif ( $k_1 != $t_1 or $k_2 != $t_1 or $k_3 != $t_1 or $k_4 != $t_1 or $k_5 != $t_1 or $k_6 != $t_1 or $k_7 != $t_1 or $k_8 != $t_1 or $k_9 != $t_1 or $k_10 != $t_1 or $k_11 != $t_1 or $k_12 != $t_1 or $k_13 != $t_1 or $k_14 != $t_1 or $k_15 != $t_1 or $k_16 != $t_1 ): 176 echo '情報が一部のみしか入力されていません'; 177else: 178 echo '原因不明のエラーが発生しました。システム構築者へご連絡ください。'; 179endif;
MySQLの情報
やってみたこと/実験
上のコードではコメントアウトされていますが、
PHP
1 echo '<br>'; 2 var_dump($k_14); 3 echo '<br>'; 4 var_dump($k_16); 5 echo '<br>';
でk_14とk_16に入っている中身を表示しようとしてみたところ、文字化けしてる文字の羅列が大量に表示されたのでしっかり格納されているはずです。
また、画像ファイルが格納されているk_14とk_16を除外した上でインサートしてみるとちゃんとMySQLにインサートされるので、やはりk_14とk_16の問題なようです。
回答3件
あなたの回答
tips
プレビュー