質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

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

Q&A

解決済

2回答

1459閲覧

formで年月日別ディレクトリ作成を行いたい

natsu69

総合スコア15

PHP

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

0グッド

0クリップ

投稿2018/05/23 06:00

formを使用して年月日別ディレクトリ作成を行いたいのですがうまくできません。
初心者なもので、不出来ですが、知識ある方ご教授お願いい致します。

現在
index.html

<html> <head> <title>uploader.html</title> <meta charset="utf-8"> </head> <body> <form method="post" enctype="multipart/form-data" action="upload.php"> <input type="file" name="upfile"> <select name="category"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> </serect> <input type="date" name="date"> <input type="submit" value="作成する"> </form> </body> </html>

upload.php

<html> <head><title>uploader.php</title></head> <body> <?php $category = $_REQUEST["category"]; $date = $_POST["date"]; $directory_path = "./$category/年/月/日";←ここの部分をこういう構想にしたし。 if(file_exists($directory_path)){ echo "作成しようとしたディレクトリは既に存在します"; }else{ if(mkdir($directory_path, 0777)){ chmod($directory_path, 0777); echo "作成に成功しました"; }else{ echo "作成に失敗しました"; } } ?> </body> </html>

ご教授お願い致します。

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

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

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

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

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

guest

回答2

0

ベストアンサー

php

1<html> 2<head><title>uploader.php</title></head> 3<body> 4<?php 5$category = $_REQUEST["category"]; 6$date = $_POST["date"]; 7 8$directory_path = "./$category/". date("Y/n/j"); 9 10if(file_exists($directory_path)){ 11 echo "作成しようとしたディレクトリは既に存在します"; 12}else{ 13 14 if(mkdir($directory_path, 0777)){ 15 16 chmod($directory_path, 0777); 17 18 echo "作成に成功しました"; 19 }else{ 20 21 echo "作成に失敗しました"; 22 } 23} 24?> 25</body> 26</html>

PHPに標準で提供されているdate関数を用いることで、文字列をフォーマットして現在の時刻にすることが可能です。詳しくはこちらのURLを参照ください。
PHP: date - Manual

投稿2018/05/23 06:04

編集2018/05/23 06:07
tomocrafter

総合スコア33

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

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

natsu69

2018/05/23 06:13

すみません。 ソースをコピペしたのですが、うまくできません。 他に何か問題があるのでしょうか?
tomocrafter

2018/05/23 06:15

一度、date("Y/n/j")だけでテストしてみてはいかがですか? もしくは、date("Y/n/j/");でトライしてみてください!
退会済みユーザー

退会済みユーザー

2018/05/23 06:15

リクエストされた date で処理したいんじゃないのかしら・w・? あと 再帰作成オプションつけてない以外はおおむね同意だな・q・
y_waiwai

2018/05/23 06:19

スラッシュつけてるから?
natsu69

2018/05/23 06:23

tomocrafter様 度重なるご回答ありがとうございます。 date("Y/n/j")で行いましたが、ダメでした。
m.ts10806

2018/05/23 06:31 編集

「ダメ」と言うのが何がおきたか分かりませんので、そちらも追記された方が良いです。 どうなったかは質問者さんしか知りません。 あとはasahina1979さんのアドバイスの通り第3引数をtrueにするとか。 http://php.net/manual/ja/function.mkdir.php $_POST["date"]で作りたい場合は date("Y/n/j",strtotime($date)) とする。
m.ts10806

2018/05/23 06:32 編集

そういえばmkdir時点で0777で作ってるのでchmodあんまり意味ないですね。
tomocrafter

2018/05/23 06:34

if (!@mkdir($directory_path, 0777)) { $error = error_get_last(); echo $error['message']; } これで一度実行してみて、どのような原因によりファイルが生成されていないのか確認してください。 もしかしたらFTPクライアント上でリフレッシュしてないなどはありませんか?
natsu69

2018/05/23 06:48

皆様ご回答ありがとうございます。 回答参考にして、なんとかディレクトリ成功まで行うことができたのですが、年月日に入っている年月日と違う数字で作成されてしまいます。 現在はこのようなPHPになりました。 <?php $category = $_REQUEST["category"]; $date = date("Y/n/j",strtotime($date)); $directory_path = "./$category/$date"; if(file_exists($directory_path)){ echo "作成しようとしたディレクトリは既に存在します"; }else{ if(mkdir($directory_path, 0777, true)){ echo "作成に成功しました"; }else{ echo "作成に失敗しました"; } } ?>
m.ts10806

2018/05/23 07:02

$dateは何が入っているのでしょうか。 日付と認識できない情報の場合は正常な日付に変換できません。 ちなみにY/n/j だと月、日は0無しです。(2018/1/1)
退会済みユーザー

退会済みユーザー

2018/05/23 07:34 編集

-- 削除
guest

0

投稿2018/05/23 06:04

kei344

総合スコア69364

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問