menu


2017年4月28日金曜日

保存・再読み込み機能を付ける⑧ホルダー名一覧

フォルダー名一覧作成と選択処理をつくります。
これは、後で同じような作りでファイル名一覧を作りますが、そのベース処理となります。
簡単です。参考にして下さい。
では、ソースを載せて説明します。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>新規作者編集</title>
<script>
function setMode(mode){
document.getElementById("mode").value = mode;
}

function addtcount(){
document.getElementById("tcount").value = parseInt(document.getElementById("tcount").value)+1;
}
</script>
</head>
<body>
<?php
function list_dirs($dir){
$list = array();
$files = scandir($dir);
foreach($files as $file){
        if($file == '.' || $file == '..'){
            continue;
        } else if( is_dir($dir . $file) ) {
            $list[] = $file;
        }
    }
    return $list;
}

function WriteCsv($fname,$tbl){
$file = fopen($fname,"w");
if( $file != FALSE ){
$tbl[0][3]="\"".$tbl[0][3]."\"";
for( $i=1;$i < count($tbl) ; $i++ ){
$tbl[$i][4]="\"".$tbl[$i][4]."\"";
}
for( $i=0;$i < count($tbl) ; $i++ ){
for( $j=0 ; $j < count($tbl[$i]) ; $j++ ){
fwrite( $file,$tbl[$i][$j]) ;
if( $j < (count($tbl[$i])-1) ){
fwrite($file,",");
}
else {
fwrite($file,"\n");
}
}
}
fclose($file);
}
return $file ;
}

function GetParam(){
$tcount = $_POST["tcount"] ;
$tb = array();
$tb[0][0] = $_POST["name"] ;
$tb[0][1] = $_POST["yomi"] ;
$tb[0][2] = $_POST["path_dir"] ;
$tb[0][3] = $_POST["info"] ;
for( $i = 0 ; $i < $tcount ; $i++ ){
$tb[$i+1][0]=$_POST["title_".$i];
$tb[$i+1][1]=$_POST["dir_link_".$i];
$tb[$i+1][2]=$_POST["Publishing_company_".$i];
$tb[$i+1][3]=$_POST["Journal_title_".$i];
$tb[$i+1][4]=$_POST["Comment_".$i];
}
return $tb ;
}

function getkazu($str,$c){
$b=explode($c,$str);
return count($b)-1;
}

function getcsv($handle){
$str="" ;
do{
$str = $str.fgets($handle);
$cun = getkazu($str,"\"") ;
}while( ($cun%2)!=0 );
$str = str_replace("\"", '', $str);
return explode(",",$str) ;
}

function ReadCsv($fname){
$records = array() ;
$fname = str_replace(array("\r\n", "\r", "\n"), '', $fname);
if (($handle = fopen($fname, "r")) !== false) {
while (!feof($handle)){
$line = getcsv($handle) ;
if( count($line) == 1 && $line[0] == "" ){
}
else {
       $records[] = $line;
}
 } 
 fclose($handle); 

return $records ;
}

$tcount = 1 ;
$tb = array();
$result = list_dirs("../csv/");
$err = 0;
if( isset($_POST["mode"])){
if( $_POST["mode"] == "1" ){
print "<div>作者編集(保存)</div>";
$tcount = $_POST["tcount"] ;
$tb = GetParam();
if( $tb[0][2]!="" ){
if( WriteCsv("../autho/".$tb[0][2],$tb) == FALSE ){
$err = 2 ;
}
}
else {
$err = 1 ;
}
}
else if( $_POST["mode"]=="2"){
print "<div>作者編集(再読み込み)</div>";
$tb = GetParam();
if( $tb[0][2]!="" ){
$tb = ReadCsv("../autho/".$tb[0][2]);
if( count($tb) < 2 ){
$err = 4 ;
$tb = GetParam();
}
else {
$tcount = count($tb)-1 ;
}
}
else {
$err = 3 ;
$tb = GetParam();
}
}
else {
print "<div>作者編集(タイトル追加)</div>";
$tcount = $_POST["tcount"] ;
$tb = GetParam();
}
}
else {
print "<div>新規作者編集</div>";
$tb[0]=array("","","","");
$tb[1]=array("","","","","");
}
print "<br>";
print "<input type=\"button\" onclick=\"window.location.href='./index.php';\" value=\"メニューに帰る\" /><br>";
print "<form method=\"POST\" action=\"newautho.php\" name=\"main_form\">";
print "<div>";
print "<div style=\"border: solid 1px #202020;margin: 5px 5px 3px;\">";
print "<div style=\"border: solid 0px #202020;margin: 5px 5px 5px 5px;\">";
print "<input id=\"mode\" type=\"hidden\" name=\"mode\" />";
print "<input id=\"tcount\" type=\"hidden\" name=\"tcount\"value=".$tcount." />";
print "著者名:<input id=\"name\" type=\"text\" name=\"name\" size=\"50\" value=\"".$tb[0][0]."\" /><br>";
print "  読み:<input id=\"yomi\" type=\"text\" name=\"yomi\" size=\"50\" value=\"".$tb[0][1]."\" /><br>";
print "ファイル名:<br>";
print "<input id=\"path_dir\" type=\"text\" name=\"path_dir\" size=\"50\" value=\"".$tb[0][2]."\" />";
if( $err != 0 ){
if( $err==1 ){
print "<font color=\"#ff0000\">ファイル名が指定されてません!</font>";
}
else if( $err == 2 ){
print "<font color=\"#ff0000\">保存ファイルが作成できませんでした!</font>";
}
else if( $err == 3 ){
print "<font color=\"#ff0000\">読み込みファイル名が指定されてません!</font>";
}
else if( $err == 4 ){
print "<font color=\"#ff0000\">読み込みファイルが異常で読み込めません!</font>";
}
}
print "<br>";
print "追記事項:<br>";
print "<textarea id=\"info\" name=\"info\" rows=\"4\" cols=\"50\">".$tb[0][3]."</textarea><br>";
print "</div>";
print "<input id=\"renewal\" type=\"submit\" name=\"renewal\" onclick=\"setMode(1);\" value= \"保存\" />";
print "<input id=\"renewal\" type=\"submit\" name=\"renewal\" onclick=\"setMode(2);\" value= \"再読み込み\" />";
print "</div>";
print "</div>";
print "<div style=\"border: solid 1px #202020;margin: 5px 5px 3px;\">";
print "作品リスト<br>";
for( $i = 0 ; $i < $tcount ; $i++ ){
print "<div style=\"border: solid 1px #202020;margin: 5px 5px 5px 5px;\">";
print "<div style=\"border: solid 0px #202020;margin: 5px 5px 5px 5px;\">";
print "タイトル<input id=\"title_".$i."\" type=\"text\" name=\"title_".$i."\" size=\"50\" value=\"".$tb[$i+1][0]."\" /><br>";
print "リンク<select id='dir_link_".$i."' name='dir_link_".$i."' value=\"".$tb[$i+1][1]."\" >";
for($mi=0;$mi<count($result);$mi++ ){
$op="";
if( $result[$mi]==$tb[$i+1][1] ){
$op = "selected";
}
print "<option value=\"".$result[$mi]."\" ".$op.">".$result[$mi]."</option>";
}
print "</select><br>";
print "出版社<input id=\"Publishing_company_".$i."\" type=\"text\" name=\"Publishing_company_".$i."\" size=\"50\" value=\"".$tb[$i+1][2]."\" /><br>";
print "雑誌名<input id=\"Journal_title_".$i."\" type=\"text\" name=\"Journal_title_".$i."\" size=\"50\" value=\"".$tb[$i+1][3]."\" /><br>";
print "コメント<br>";
print "<textarea id=\"Comment_".$i."\" name=\"Comment_".$i."\" rows=\"4\" cols=\"50\">".$tb[$i+1][4]."</textarea><br>";
print "</div>";
print "</div>";
}
print "<input id=\"add\" type=\"submit\" name=\"add\" onclick=\"setMode(31);addtcount();\" value= \"追加\" />";
print "</div>";

print "</div>";
print "</form>";

?>
</body>
</html>
フォルダー名一覧取得処理
フォルダー名一覧を配列に入れてかえします
function list_dirs($dir){
$list = array();配列を初期化します
$files = scandir($dir);指定先のファイルやホルダー名を取得します
foreach($files as $file){取得したデータをループ処理します
        if($file == '.' || $file == '..'){取得データが. か.. だったら何もしない!
            continue;
        } else if( is_dir($dir . $file) ) {取得データがフォルダーなら保存
            $list[] = $file;
        }
    }
    return $list;結果を返す
}
scandir
指定フォルダー内の全てのファイルやファイルを返します。
is_dir
指定先がフォルダーかを返します

$result = list_dirs("../csv/");
一つ上のホルダーの中のcsvフォルダーの中のフォルダー一覧を取得します。

フォルダー名選択処理
print "リンク<select id='dir_link_".$i."' name='dir_link_".$i."' value=\"".$tb[$i+1][1]."\" >";
for($mi=0;$mi<count($result);$mi++ ){フォルダー一覧を選択リストに展開するループ
$op="";
if( $result[$mi]==$tb[$i+1][1] ){選択リストがすでに、選択された物か判定し、選択された物なら選択状態を設定する
$op = "selected";
}
    選択リスト出力
print "<option value=\"".$result[$mi]."\" ".$op.">".$result[$mi]."</option>";
}
print "</select><br>";選択リスト終了

以上が作者データ入力処理です。
いかがですか?
そんなに大きいプログラムでは無いと思っています。
次は、編集画面を載せたいのですが、補足を載せます!
じつは、コミックデータ入力を作りながら、不要なデータが出ました。
不要データ入力を削除したソースを載せてから次に進みます!
では、次回は、補足です。

0 件のコメント:

コメントを投稿