🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
PHP

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

Q&A

解決済

2回答

614閲覧

phpによる画像のアップロード

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

0グッド

0クリップ

投稿2021/03/14 06:42

編集2021/03/14 07:03

前提・実現したいこと

phpでユーザーが画像を選択し、アップロードするシステムをつくています。
データベースに画像のパスは格納されているものの画像そのものがファイルへアップロードできていません。
ご教授お願いします。

発生している問題・エラーメッセージ

特になし

該当のソースコード

php

1<?php 2// 変数の初期化 3$page_flag = 0; 4 5if( !empty($_POST['btn_confirm']) and !empty($_POST['name']) && !empty( $_POST['main'])) { 6 7 $page_flag = 1; 8 9} elseif( !empty($_POST['btn_submit']) ) { 10 11 $page_flag = 2; 12} 13 // 変数の初期化 14$db = null; 15$sql = null; 16$res = null; 17$variable=null; 18$row = null; 19$num=null; 20$check=null; 21?> 22 23 <h1>投稿フォーム</h1> 24 25 <?php if( $page_flag === 1 ): ?> 26<?php 27 28$image=htmlspecialchars($_FILES['image']['name'],ENT_QUOTES); 29 30$name=htmlspecialchars($_POST['name'],ENT_QUOTES); 31 32$main=htmlspecialchars($_POST['main'],ENT_QUOTES); 33 34$check=array($image, $name,$main);?> 35<div class="attention"> 36<?php 37foreach($check as $data) 38{ 39echo '</p>'.$data.'</p>'.'</br>'; 40 41}?> 42<p>この内容でお願いします。よろしいですか?</p></div> 43<form action="entry.php" method="post"> 44 <button type="submit" name="remove" class="pre">修正</button> 45 <button type="submit" name="add" value="true" class="next">登録</button> 46 <input type="hidden" name="image" value="<?php echo $image; ?>"> 47 48 <input type="hidden" name="name" value="<?php echo $name; ?>"> 49 50 <input type="hidden" name="main" value="<?php echo $main; ?>"> 51</form> 52 <?php else: ?> 53 <div class="form-wrapper"><form action="" method="post" enctype="multipart/form-data"> 54 55 <div class="form-item"> 56 <label for="image"></label> 57 <img id="preview"> 58 <input type="file" name="image" accept="image/png, image/jpeg,image/jpg"></input> 59 </div> 60 61 <div class="form-item"> 62 63 <label for="name"></label> 64 65 <input type="text" name="name" required="required" placeholder="ニックネーム(必須)"></input> 66 67 </div> 68<div class="form-item"> 69 70 <label for="main"></label> 71 72 <input type="text" name="main" required="required" placeholder="お願いを入力(必須)"></input> 73 74 </div> 75 <div class="button-panel"> <input type="submit" class="button" name="btn_confirm" value="投稿する"></input> </div> 76 77 </form> 78 79<?php endif; ?> 80<script> 81 82</script> 83</body> 84</html>

php

1 2<?php 3 4$db = null; 5$sql = null; 6$res = null; 7$variable=null; 8$row = null; 9$num=null; 10$check=null; 11 12var_dump($_FILES['image']);//ここの時点でnullでした 13if(isset($_POST['add']) and !empty($_POST['name']) && !empty( $_POST['main'])) 14{ 15// ファイルへのパス 16 $path = './img/'; 17 18 // ファイルがアップロードされているかと、POST通信でアップロードされたかを確認 19 if( !empty($_FILES['image']['tmp_name']) && is_uploaded_file($_FILES['image']['tmp_name']) ) { 20 21 // ファイルを指定したパスへ保存する 22 if( move_uploaded_file( $_FILES['image']['tmp_name'], $path.'upload_pic.jpg') ) { 23 echo 'アップロードされたファイルを保存しました。'; 24 } else { 25 echo 'アップロードされたファイルの保存に失敗しました。'; 26 }} 27 28$db = new SQLite3("wish.db"); 29$image=$_POST['image']; 30$name=$_POST['name']; 31$main=$_POST['main']; 32 33$sql = "INSERT INTO allwish (image,name,main) VALUES (:image, :name,:main)"; 34 35以下、dbへの格納処理 36

試したこと

var_dumpによる確認(別ページにデータの移行ができていませんでした。

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

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

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

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

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

guest

回答2

0

同じドメイン内での作業なら受け取ったデータをさらに再送信はセッションを使うのが妥当です
※文字化けしてたので再投稿

投稿2021/03/15 00:20

編集2021/03/15 01:46
yambejp

総合スコア116694

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

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

退会済みユーザー

退会済みユーザー

2021/03/15 01:17

そうなんですね。 セッションも試してみようと思います ありがとうございました。
guest

0

ベストアンサー

action=""

これは送信先が「自身」であることを指します。
submitボタンは自身が所属するフォームのみを送信します。
複数フォームを同時送信はできません。

どのフォームを送信しました?

投稿2021/03/14 06:47

編集2021/03/14 06:49
m.ts10806

総合スコア80875

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

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

退会済みユーザー

退会済みユーザー

2021/03/14 06:56

ありがとうございます。 どのフォームとはどういうことでしょうか? 1,ユーザーにデータの入力をしてもらう 2、同ページで確認 ここ(2)のフォームを押したときvar_dump($_FILES['image']);にデータが飛ぶはずなのですが…
退会済みユーザー

退会済みユーザー

2021/03/14 07:00

テストでは すでにforeach($check as $data)でデータ。文字列の表示ができていたので (画像データのパス含め) なので、 <form action="entry.php" method="post"> <button type="submit" name="remove" class="pre">修正</button> <button type="submit" name="add" value="true" class="next">登録</button> <input type="hidden" name="image" value="<?php echo $image; ?>"> <input type="hidden" name="name" value="<?php echo $name; ?>"> <input type="hidden" name="main" value="<?php echo $main; ?>"> </form> ここでentry.phpへ送信しました。
m.ts10806

2021/03/14 07:37

当該フォームに画像(input type=file)は含まれてませんね。
m.ts10806

2021/03/14 07:37

提示のHTMLにはフォームが2つあります。
退会済みユーザー

退会済みユーザー

2021/03/14 09:19 編集

送ったフォームは上記に張り付けているものです。(送信先がentry.phpのもの >>当該フォームに画像(input type=file)は含まれてませんね。 <input type="hidden" name="image" value="<?php echo $image; ?>"> 確認データをadd(登録ボタン)を押されたらデータを送りたかったのですが、 <input type="hidden" name="image" value="<?php echo $image; ?>"> で、かつ input type=fileはどうしたらいいのでしょうか?
退会済みユーザー

退会済みユーザー

2021/03/14 09:04

他にもっといい法方があれば教えてください
m.ts10806

2021/03/14 09:35

画像自体を編集したいなら再度ファイルを選択するように作ってください。 あと回答に書いたように、「submitボタンは自身が所属するフォームのみを送信します。」にあわせ、送信したい情報を全て含めたフォームにSUBMITボタンを含めてください。
退会済みユーザー

退会済みユーザー

2021/03/15 01:17

無事出来ました。 ありがとうございました。
m.ts10806

2021/03/15 01:36

PHPマニュアルで基本概念おさえるところからやったほうがいいと思います。 https://www.php.net/manual/ja/tutorial.forms.php 思い込みや勘違いのあるままだと動くものは作れませんから。プログラムは書いたとおりに動く。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問