基礎から解る!PHP入門講座 プログラム入門に最適な言語、PHPを学ぼう

基礎から解る!PHP入門講座

プログラム入門に最適な言語、PHPを学ぼう      

 このサイトはPHPを独習する際に作成したスクリプトを基に、プログラム言語初心者のための入門講座として作成しました。PHPは初心者に親しみやすく、解りやすいプログラム言語です。これからプログラムを学ぶ人の参考になればと思います。


Word Excel 二択クイズ TOP画面

<?php
error_reporting(1);
define("KANRININ","****");  //管理人の名前
define("PASS","****");  //管理人用パスワード
/*--------------------------------------------------*/
$player = $_POST['player'];
if($player == null){
  $player =$_COOKIE['player'];
  if($player == "新規登録"){
    $player = "ログイン";
  }
}
setcookie("player",$player,time()+60*60);
/*--------------------------------------------------WORD・EXCELの切替を保存*/
$office = $_POST['office'];
if($office == null){
  $office=$_COOKIE['office_select'];
}
setcookie("office_select",$office,time()+60*60);
/*--------------------------------------------------クイズ終了後の科目情報の初期化*/
if($_GET['renew'] == "new"){
  $office = null;
}
/*--------------------------------------------------名前とパスワード*/
$pass=$_COOKIE['password_quiz_ask'];
$name=$_COOKIE['name'];
if($pass == null or $name == null){
  $name = $_POST['name'];
  $pass = $_POST['pass'];
  setcookie("password_quiz_ask", $pass, time()+60*60);
  setcookie("name", $name, time()+60*60);
}
/*--------------------------------------------------/トップテン 削除確認*/
$record = $_POST['record'];
$again = $_POST['again'];
/*--------------------------------------------------個人データの削除*/
$each_name = $_POST['each_name'];    /*each_nameは削除用の名前*/
if($each_name == null){
  $each_name = $_COOKIE['each_name'];
}
setcookie("each_name",$each_name, time()+60*60);
/*--------------------------------一覧/削除の時は一時的に$each_name(個人名)を初期化しておく*/
$each = $_POST['each'];
if($each == "一覧"){
  $each_name = "";
} else if($each == "削除"){
  $office = "";
}
/*--------------------------------------------------試験時間の初期化*/
$start==null;
setcookie("start_time");
/*-----------------------------------時間計測のためのクッキー、やり直しの場合にクッキーをクリア*/
$check_new = $_GET['check'];
  if($check_new == "new"){
    setcookie("start_time");
  }
/*--------------------------------------------------ログオフの設定 全てのクッキーと変数を初期化*/
$select = $_POST['select'];
  if($select == "LOGOFF") {
    setcookie("password_quiz_ask");      /*クッキー"password"をクリア*/
    setcookie("name");      /*クッキー"password"をクリア*/
    setcookie("office_select");
    setcookie("office");
    setcookie("player");
    setcookie("start_time");
    setcookie("each_name");
    $pass_ask = "";            /*パスワードデータをクリア*/
    $name = "";            /*パスワードデータをクリア*/
    $player = "";
    $office = "";
    $pass = "";
    $start_time = "";
    $each_name = "";
  }
/*-----------------------ファイルやフォルダの作成 初回の起動で必要なフォルダ・ファイルを作成する*/
if(!file_exists("./quiz")){  
    mkdir ("./quiz",0777);
    mkdir ("./quiz/name_EXCEL",0777);
    mkdir ("./quiz/name_WORD",0777);
    $handle =  fopen("./quiz/list", "w+");
      fclose($handle);
    $handle =  fopen("./quiz/toptenWORD", "w+");
      fclose($handle);
    $handle =  fopen("./quiz/toptenEXCEL", "w+");
      fclose($handle);
    $handle =  fopen("./quiz/WORD", "w+");
      fclose($handle);
    $handle =  fopen("./quiz/EXCEL", "w+");
      fclose($handle);
}
?>


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja"><head>
<meta http-equiv="Content-type" content="text/html; charset=EUC-JP">
<meta http-equiv="Content-Style-Type" content="text/css">
<link rel="stylesheet" href="./style.css">
<title>WORD&EXCEL2002 知識クイズ</title></head>
<body><div class="file2">
<table width="700" border="0"><tr><td>
<h3>WORD&EXCEL 2002 知識クイズ</h3></td>
<td valign="top"><a href="../../file04.html">解説にもどる</a>
  <a href="../../../list.html">リストにもどる</a></td></tr></table>
名前とパスワードを記入してログインしてください。
初めての方は名前とパスワードを登録してください。<br>
名前は英数4文字以上15文字以下、パスワードは英数4文字です。<br>
<form action="index.php" method="post">
<input type="radio" name="player" value="ログイン" checked>ログイン
<input type="radio" name="player" value="新規登録">新規登録
<input type="radio" name="player" value="管理者">管理者<br>
名前 <input type="text" name="name" size="15">
パスワード <input type="password" name="pass" size="10">
<input type="submit" value="LOGIN/登録"> 
<?php
if($name != null and $pass != null){
  echo "<input type='submit' name= 'select' value='LOGOFF'>";
}
?>

</form>
<?php
/*--------------------------------------------------一般用の表示関数*/
function LOGIN(){
    global $name;
    global $pass;
    global $player;
    echo "<table border='0'><tr><td>";
    echo "<form action='quiz_ask.php' method='post'>問 題  ";
    echo "<input type='submit' name= 'office' value='WORD'> ";
    echo "<input type='submit' name= 'office' value='EXCEL'></form></td></tr></table>";
    echo "1レベル5問出題されます。各レベルは4問以上正解でクリア。10問からランダムに5問が出題されます。<br>";
    echo "全て二択問題で、クリアできなければそこで終了、全10レベルをクリアすると合格です。<br><br>";
    echo "<table border='0'><tr><td>";
    echo "<form action='index.php' method='post'>成績表  ";
    echo "<input type='submit' name= 'office' value='WORD'> ";
    echo "<input type='submit' name= 'office' value='EXCEL'> ";
    echo "<input type='submit' name= 'record' value='TOP20'>";
    echo "</form></td></tr></table>";
}
/*--------------------------------------------------管理者用の表示関数*/
function MASTER(){
    global $name;
    global $pass;
    global $player;
    global $list_count;
    global $list_file;
/*--------------------------------------------------*/
  if($name == KANRININ and $pass == PASS){
    echo "<table border='0'><tr><td>";
    echo "<form action='quiz_ask.php' method='post'>問 題  ";
    echo "<input type='submit' name= 'office' value='WORD'> ";
    echo "<input type='submit' name= 'office' value='EXCEL'></form></td></tr></table>";
    echo "1レベル5問出題されます。各レベルは4問以上正解でクリア。10問からランダムに5問が出題されます。<br>";
    echo "全て二択問題で、クリアできなければそこで終了、全10レベルをクリアすると合格です。<br><br>";
    echo "<table border='0'><tr><td><form action='index.php' method='post'>";
    echo "<table border='0'><tr><td valign='bottom'>登録者数".$list_count."名</td>";
    echo "<td align='right'>成</td><td>績</td><td align='center'>上位</td>";
    echo "<td align='center'>データ</td><td>登録者</td></tr><tr><td>";
    echo "<select name='each_name'>";
    echo "<option></option>";
      $stnum = 0;
      while($list_count > $stnum){
        $text = split("&&",$list_file[$stnum]);
          echo "<option value='".$list_file[$stnum]."'>$text[0]</option>";
        $stnum++;
      }
    echo "</select></td>";
    echo "<td><input type='submit' name= 'office' value='WORD'></td>";
    echo "<td><input type='submit' name= 'office' value='EXCEL'></td>";
    echo "<td><input type='submit' name= 'record' value='TOP20'></td>";
    echo "<td><input type='submit' name= 'each' value='削除'></td>";
    echo "<td><input type='submit' name= 'each' value='一覧'></td></tr></table></form></td>";
    echo "<td><form action='quiz_write.php' method='post'>";
    echo "<table border='0'><tr><td align='right'>問題</td><td>作成</td></tr>";
    echo "<input type='hidden' name='name' value=$name>";
    echo "<input type='hidden' name='pass' value=$pass>";
    echo "<td><input type='submit' name= 'office' value='WORD'></td>";
    echo "<td><input type='submit' name= 'office' value='EXCEL'></td>";
    echo "</tr></table></form></td></tr></table>";
/*--------------------------------------------------*/
  } else   if($name == "kanri" and $pass == "1234"){
    echo "<table border='0'><tr><td>";
    echo "<form action='quiz_ask.php' method='post'>問 題  ";
    echo "<input type='submit' name= 'office' value='WORD'> ";
    echo "<input type='submit' name= 'office' value='EXCEL'></form></td></tr></table>";
    echo "1レベル5問出題されます。各レベルは4問以上正解でクリア。10問からランダムに5問が出題されます。<br>";
    echo "全て二択問題で、クリアできなければそこで終了、全10レベルをクリアすると合格です。<br><br>";
    echo "<table border='0'><tr><td><form action='index.php' method='post'>";
    echo "<table border='0'><tr><td valign='bottom'>登録者数".$list_count."名</td>";
    echo "<td align='right'>成</td><td>績</td><td align='center'>上位</td>";
    echo "<td align='center'>データ</td><td>登録者</td></tr><tr><td>";
    echo "<select name='each_name'>";
      $stnum = 0;
    echo "<option></option>";
      while($list_count > $stnum){
        $text = split("&&",$list_file[$stnum]);
          echo "<option value='".$list_file[$stnum]."'>$text[0]</option>";
        $stnum++;
      }
    echo "</select></td>";
    echo "<td><input type='submit' name= 'office' value='WORD'></td>";
    echo "<td><input type='submit' name= 'office' value='EXCEL'></td>";
    echo "<td><input type='submit' name= 'record' value='TOP20'></td>";
    echo "<td><input type='submit' name= 'each' value='削除'></td>";
    echo "<td><input type='submit' name= 'each' value='一覧'></td></tr></table></form></td>";
    echo "<td><form method='post'>";
    echo "<table border='0'><tr><td align='right'>問題</td><td>作成</td></tr>";
    echo "<td colspan='2'>デモ用なので作成画面には移動できません</td>";
    echo "</tr></table></form></td></tr></table>";
  }
}
/*--------------------------------------------------個人成績表の表示*/
function RESULT($name_in){
  global $office;
  if(file_exists("./quiz/name_$office/$name_in") and $name_in !=null){
    echo "名前:".$name_in." ".$office."成績表";
    $result = file("./quiz/name_$office/$name_in");
    $array_cnt = count($result);
    echo "<table border='1'>";
    echo "<tr><td>DATE&TIME</td><td>LEVEL</td><td>POINT</td><td>TIME</td><td>BAR</td></tr>";
    $cnt = 0;
      while($cnt < $array_cnt){
        echo "<tr>";
        $text = split("&&",$result[$cnt]);
        $rcnt = 0;
          while($rcnt < 4){
            echo "<td align='center'>";
            echo $text[$rcnt]." ";
            echo "</td>";
          $rcnt ++;
          }
        $cnt ++;
        $text[2] *= 2;    /*200ピクセルの幅に合うよう点数を二倍してグラフを作る*/
        echo "<td width='200'><img src='bar.gif' width = $text[2] height='10'></td>";
        echo "</tr>";
      }
    echo "</table>";
  }
}
/*--------------------------------------------------トップテン表示のための関数*/
function TOPTEN($office_topten){      /*読みこむたびに得点順に並べ上位20位のみを上書きする*/
  echo $office_topten;
  $topten = file("./quiz/topten$office_topten");
  rsort($topten,SORT_NUMERIC);          /*ポイント・タイム・名前・日付・レベル*/
  echo "<table border='1'>";
  echo "<tr><td>NO</td><td>PNT</td><td>TIME</td><td>NAME</td><td>DATE</td><td>LVL</td><td>BAR</td></tr>";
  $cnt = 0;
    while($cnt < 20){
      $text = split("¥.",$topten[$cnt]);    /*.(ドット)は¥でエスケープします*/
      $text[1] = 1000 - $text[1];        /*テスト時間は短い方が上位なので1000からの差で順位を決める*/
        if($text[2] == null){
          break;
        }
      echo "<tr>";
      $cnt++;          /*$cntが0からなので、順位表示のため1を足し、表示後1を引く*/
      echo "<td align='center'>$cnt</td>";
      $cnt--;
      $rcnt = 0;
        while($rcnt < 5){
          echo "<td align='center'>$text[$rcnt]</td>";
        $rcnt ++;
        }
      echo "<td width='100'><img src='bar.gif' width = $text[0] height='10'></td>";
      echo "</tr>";
      $text[1] = 1000 -$text[1];
      $cnt ++;
    }
  echo "</table>";

  $filepointer=fopen("./quiz/topten$office_topten", "w+");    /*ここから書きこみ*/
    flock($filepointer, LOCK_EX);
    $save_data = null ;
      for($acnt=0;$acnt<20;$acnt++){
          $save_data = $save_data.$topten[$acnt];
      }
      fputs($filepointer,$save_data);
    flock($filepointer, LOCK_UN);
  fclose($filepointer);
}
/*--------------------------------------------------*/
$updir = "quiz/list";
$name = htmlspecialchars($name, ENT_QUOTES);    /*タグを無効化 */
$length = strlen($name);
$length_p = strlen($pass);
/*-------------------------ログオフの場合の表示、全ての変数が初期化されるため他は表示されない*/
if($select == "LOGOFF"){
  echo "ログオフしました。お疲れ様。";
}
/*--------------------------------------------------新規登録の場合の表示*/
if($player == "新規登録"){
  if($name == "" or $pass == ""){
    echo "名前とパスワードを記入してください。";
  } else {
    $filepointer=fopen("./$updir", "a+");      /*同じ名前が存在するかの確認*/
      while(!feof($filepointer)){    
       $fileline = fgets($filepointer);
              $text = split("&&",$fileline);
                  if($name == $text[0]){
                    $select = "no";
                    break;
                  }
      }  
    If($select == "no"){
        echo "その名前はすでにあります。ログオフして別の名前で登録してください。";
    } else if(!ereg("([a-zA-Z0-9]{4,})",$name) or $length >= 15 ){
        echo "$name は適正な名前ではありません。$length<br>";
        echo "ログオフして、もう一度登録をお願いします。";
    } elseif(!ereg("([a-zA-Z0-9]{4})",$pass) or $length_p != 4 ){
        echo "$pass は適正なパスワードではありません。<br>";
        echo "ログオフして、もう一度登録をお願いします。";
    } else {
        echo "名前は $name 、パスワードは $pass ですね。";
        echo "このデータを登録しました。<br>";
        echo "このIDも使えますが、'kanri' '1234' でデモ用管理画面に入れます。";
        $regi_date = date("y/m/d");
        $data = $name."&&".$pass."&&".$regi_date;
            flock($filepointer, LOCK_EX);
                fputs($filepointer, $data."¥n");
            flock($filepointer, LOCK_UN);
        LOGIN();
    }
    fclose($filepointer);
  }
/*--------------------------------------------------ログインの場合*/
} elseif ($player == "ログイン"){
    $filepointer=fopen("./$updir", "r");
      while(!feof($filepointer)){    
       $fileline = fgets($filepointer);        /*登録された名前の確認*/
          $text = split("&&",$fileline);
            if($name == $text[0] and $pass == rtrim($text[1])){
              $match = "yes";
              break;
            }
      }      
    fclose($filepointer);
      if($match == "yes" and $name != null){
          echo "$player  名前 $name パスワード **** を確認しました。<br><br>";
          LOGIN();
      } else {
          echo "名前かパスワードが違うようです。もう一度ためしてください。";
      }
      if($record == "TOP20"){
        echo "<table><tr><td valign='top'>";
          TOPTEN("WORD");                    /*TOP20の表示 変数でなく直接 "WORD" の文字を入れる */
        echo "</td><td valign='top'>";
          TOPTEN("EXCEL");
        echo "</td></tr></table>";
      } else {
          RESULT($name);
      }
/*--------------------------------------------------管理者の場合*/
} else if($player == "管理者"){
  $list_file = file("./$updir");
  $list_count = count($list_file);
  $each_name_array = split("&&",$each_name);
/*--------------------------------------------------登録者の削除*/
    if($each == "削除"){
      $delcheck = "yes";
        if($name == KANRININ){
          if($again == "はい"){
            $key = array_search($each_name, $list_file);      /*リストから名前を探しキーを返す*/
            array_splice($list_file, $key,1);            /*キーをもとに配列から名前を削除する*/
              if(file_exists("./quiz/name_EXCEL/$each_name_array[0]")){
                unlink("./quiz/name_EXCEL/$each_name_array[0]");
              }
              if(file_exists("./quiz/name_WORD/$each_name_array[0]")){
                unlink("./quiz/name_WORD/$each_name_array[0]");
              }
            $filepointer=fopen("./quiz/list", "w+");      /*ここから書きこみ*/
              flock($filepointer, LOCK_EX);
                $lcnt = 0;
                while($lcnt < $list_count){
                  fputs($filepointer, $list_file[$lcnt]);
                $lcnt ++;
                }
              flock($filepointer, LOCK_UN);
            fclose($filepointer);
          $delcheck = "no";
          }
        } else {
          $demo="yes";
        }
/*--------------------------------------------------一覧表示*/
    } else if($each == "一覧"){
      $list_check = "yes";
      $list_file = file("./quiz/list");
    }
  $list_count = count($list_file);
  sort($list_file);
    MASTER();
/*--------------------------------------------------*/
  if($delcheck == "yes"){
    echo "<form action='index.php' method='post'>";
    echo "<table border='0'><tr><td>$each_name_array[0] を削除しますか?</td><td>";
    echo "<input type='hidden' name='each' value='削除'>";
    echo "<input type='submit' name= 'again' value='はい'> ";
    echo "<input type='submit' name= 'each' value='キャンセル'></td></tr></table></form>";
    if($demo=="yes"){
      echo "デモ用の管理者画面なので削除できません";
    }
/*--------------------------------------------------*/
  } else if($list_check == "yes"){
    echo "登録者一覧  受験回数";
    echo "<table border='1'><tr><td align='center' width='100'>登録日</td><td align='center' width='100'>ID</td>";
    echo "<td align='center' width='100'>パスワード</td><td align='center' width='70'>WORD</td>";
    echo "<td align='center' width='70'>EXCEL</td></tr>";
    $lst_cnt = 0;
      while($lst_cnt < $list_count){              /*登録者の受験回数を数える*/
        $list_data = split("&&",$list_file[$lst_cnt]);
          if(file_exists("./quiz/name_WORD/$list_data[0]")){
            $try_word = file("./quiz/name_WORD/$list_data[0]");
            $try_word_count = count($try_word);
          } else {
            $try_word_count = 0;
          }
          if(file_exists("./quiz/name_EXCEL/$list_data[0]")){
            $try_excel = file("./quiz/name_EXCEL/$list_data[0]");
            $try_excel_count = count($try_excel);
          } else {
            $try_excel_count = 0;
          }
        echo "<tr><td align='center'>$list_data[2]</td><td align='center'>$list_data[0]</td><td align='center'>";
          if($name!= KANRININ){
            echo "****";      /*デモ用管理画面ではパスワードを表示しない*/
          } else {
            echo "$list_data[1]";
          }
        echo "</td><td align='center'>$try_word_count</td><td align='center'>$try_excel_count</td></tr>";
        $lst_cnt++;
      }
    echo "</table>";
/*--------------------------------------------------*/
  } else if($record == "TOP20"){
    echo "<table><tr><td valign='top'>";
      TOPTEN("WORD");  
    echo "</td><td valign='top'>";
      TOPTEN("EXCEL");
    echo "</td></tr></table>";
/*--------------------------------------------------*/
  } else {
      if($name == "kanri"){
        echo "デモ用の管理画面のため他の成績を見ることはできません。<br>";
        RESULT($name);
      } else {
        RESULT($each_name_array[0]);        /*個人成績表の表示*/
      }
  }
}

?>


</body></html>

Word Excel 二択クイズ 出題画面

<?php
error_reporting(1);
/*--------------------------------------------------クッキーの設定*/
$office = $_POST['office'];
if($office == null){
$office=$_COOKIE['office_select'];
}
setcookie("office_select", $office, time()+60*60);
$pass_ask = $_POST['pass'];

$name = $_POST['name'];
if($pass_ask == null or $name == null){
$pass_ask=$_COOKIE['password_quiz_ask'];
$name=$_COOKIE['name'];
}
setcookie("password_quiz_ask", $pass_ask, time()+60*60);
setcookie("name", $name, time()+60*60);
/*--------------------時間計測のためのクッキー、やり直しの場合にクッキーをクリア*/
$check_new = $_GET[check];
if($check_new == "new"){
setcookie("start_time");
}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja"><head>
<meta http-equiv="Content-type" content="text/html; charset=EUC-JP">
<meta http-equiv="Content-Style-Type" content="text/css">
<link rel="stylesheet" href="./style.css">
<title>EXCEL問題集</title></head>
<body><div class="file2">
<?php
/*--------------------------------------------------パスワード・名前入力画面*/
if($pass_ask == null or $office == ""){
echo "ログインは<a href='index.php'>こちら</a>からです。";
} else {
  $time_check = time();
/*--------------------------------------------------チェックファイルからの受け取り*/
  $level_get = $_POST['level'];
  $right_cnt_before = $_POST['point'];
  $updir = "quiz/$office";
  $enter = $_POST['enter'];
  $level = 1;
  $level += $level_get;
/*--------------------------------------------------タイトル*/
  echo "<span class='shadow'>¥n";
  echo "$office 2002 QUIZ   LEVEL $level</span>¥n";
/*--------------------------------------------------ここから問題の読みこみと5問の取りだし*/
  if(file_exists("./$updir")){ /*一度すべての行を順に読みこむ*/
   $filepointer=fopen("./$updir", "r");
   while(!feof($filepointer)){ /*読みこんだ各行を配列に格納*/
   $fileline = fgets($filepointer);
   $quest[] = $fileline;
   }
   fclose($filepointer);
  }
  array_pop($quest); /*最後の改行が空白の配列になるので削除*/
  sort($quest,SORT_NUMERIC); /*要素でソートする(要素の初めは問題番号になっている)*/
  $start = $level*10-10; /*レベル番号から開始番号を調べる*/
  $quest = array_slice($quest, $start, 10); /*開始番号から10問を取り出す*/
  srand((float)microtime() * 1000000); /*乱数を初期化*/
  shuffle($quest); /*取り出した10問をシャッフル*/
/*--------------------------------------------------取り出した5問を表示する*/
  echo "<form action='quiz_check.php' method='post'>¥n";
  $qs_num = count($quest);
  $qs_cnt = 1;
  while($qs_cnt < 6){
   $text = split("&&",$quest[$qs_cnt]);
   $quest_now[] = $text[0];
   echo "<div class='nikki'>¥n";
   echo "<b>$qs_cnt</b>  $text[2] <br>¥n";
   echo "   <input type='radio' name='ans".$text[0]."' value='YES'>正しい¥n";
   echo "   <input type='radio' name='ans".$text[0]."' value='NO'>間違い</div>¥n";
  $qs_cnt++;
  }
/*--------------------------------------------------チェックファイルにデータを送る*/
  $cont = 0; /*出題した問題番号、配列のままでは送れないので文字列にする*/
  while($cont < 5){
   $ary_send = $quest_now[$cont];
   $send = $send."&".$ary_send;
  $cont++;
  }
  echo "<input type='hidden' name='right_cnt_before' value='".$right_cnt_before."'>¥n";
  echo "<input type='hidden' name='level_now' value='".$level."'>¥n";
  echo "<input type='hidden' name='quest_now' value='".$send."'>¥n";
  echo "<input type='hidden' name='time_check' value='".$time_check."'>¥n";
  echo "<input type='hidden' name='right_check' value='check'>¥n";
  echo "<br><br>  <input type='submit' name='enter' value='CHECK'></form>¥n";
/*--------------------------------------------------トップ画面で名前を入力しなかった場合*/
}

?>

</body></html>

Word Excel 二択クイズ チェック画面

<?php
error_reporting(1);
/*----------------------------------------------パスワードと名前のクッキーの設定*/
$office=$_COOKIE['office_select'];
  if($pass_ask==null){
    $pass=$_COOKIE['password_quiz_ask'];
    $name=$_COOKIE['name'];
  }
/*----------------------------------------------時間計測のためのクッキー*/
$time_check = $_POST['time_check'];
$now = time();
$start=$_COOKIE['start_time'];
  if($start==null){
    setcookie("start_time", $time_check, time()+60*60);
    $start = $time_check;
  }
$take_time = $now - $start;
$minute = (int)($take_time/60);
$second = $take_time % 60 ;
/*----------------------------------------------個人データとトップ20データの書きこみ*/
function WRITE(){
    global $office;
    global $name;
    global $level;
    global $point;
    global $take_time;
    global $level;
  $time_ptn = date("Y/m/d H:i:s");
  $filepointer=fopen("./quiz/name_$office/$name", "a+");    /*ここから書きこみ*/
    flock($filepointer, LOCK_EX);
      fputs($filepointer,$time_ptn."&&".$level."&&".$point."&&".$take_time."¥n");
    flock($filepointer, LOCK_UN);
  fclose($filepointer);
  $time_ptn = date("y/m/d");
  $take_time = 1000 - $take_time ;
/*-----------------ここから書きこみ 試験時間も考慮してソートするため.(ドット)で繋げます*/
  $filepointer=fopen("./quiz/topten$office", "a+");  
    flock($filepointer, LOCK_EX);
      fputs($filepointer,$point.".".$take_time.".".$name.".".$time_ptn.".".$level."¥n");
    flock($filepointer, LOCK_UN);
  fclose($filepointer);
}
/*----------------------------------------------*/
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja"><head>
<meta http-equiv="Content-type" content="text/html; charset=EUC-JP">
<meta http-equiv="Content-Style-Type" content="text/css">
<link rel="stylesheet" href="./style.css">
<title>WORD/EXCEL問題集</title></head>
<body><div class="file2">
<?php
/*----------------------------------------------パスワード・名前入力画面*/
if($pass == null or $office == ""){
  echo "<a href='index.php'>こちら</a>からログインしてください。";
} else {
/*----------------------------------------------データの受け取り*/
  $quest_now = $_POST['quest_now'];      /*実施された問題番号*/
  $level_now = $_POST['level_now'];
  $right_cnt_before = $_POST['right_cnt_before'];
  $updir = "quiz/$office";
  $quest_num = split("&",$quest_now);    /*問題番号を再び配列へ*/
  $ans[1] = $_POST["ans$quest_num[1]"];    /*解答の受け取り、上の問題番号が form の name になっている*/
  $ans[2] = $_POST["ans$quest_num[2]"];
  $ans[3] = $_POST["ans$quest_num[3]"];
  $ans[4] = $_POST["ans$quest_num[4]"];
  $ans[5] = $_POST["ans$quest_num[5]"];
/*----------------------------------------------*/
  echo "<span class='shadow'>¥n";
  echo "$office 2002 QUIZ   LEVEL $level_now </span><br><br>¥n";
/*----------------------------------------------問題と解答の読みこみ*/
  if(file_exists("./$updir")){
    $filepointer=fopen("./$updir", "r");
      while(!feof($filepointer)){          /*一度すべての問題を順に読みこむ*/
       $fileline = fgets($filepointer);
        $text = split("&&",$fileline);      /*読み込んだデータから問題番号を取り出す$text[0]が番号*/
          for($a = 1;$a < 6;$a++){      /*問題番号を実施した問題の番号と照合*/
            if($text[0] == $quest_num[$a]){    /*同じ番号が見つかったら配列に入れる*/
              $quest_ans[] = $a."&&".$fileline;
            }
          }
      }
    fclose($filepointer);
  }

/*----------------------------------------------ここから表示部分*/
  sort($quest_ans,SORT_NUMERIC);
  $right_cnt = 0;
  $qs_cnt = 0;
  while($qs_cnt < 5){
    $text = split("&&",$quest_ans[$qs_cnt]);
    $quest_ans[] = $text[0];
    $qs_cnt ++;
      if($text[2] == $ans[$qs_cnt]){
        $check = "○";
        $right_cnt ++ ;
      } else {
        $check = "×";
      }
      if($text[2] == "YES"){
        $answer = "正しい";
      } else {
        $answer = "間違い";
      }
    echo "<div class='nikki2'><b>$text[0]</b>¥n  <font color='red'><b>$check</b></font>  $answer";
    echo "<br>¥n問題 $text[3]<br><font color='blue'>解説 $text[4] </font></div>¥n";
  }
/*----------------------------------------------採点結果による表示*/
if($right_cnt < 4){              /*4問以上の正解がなかった場合*/
  $right_cnt += $right_cnt_before;
  $point = $right_cnt/50*100;
  $level = $level_now -1;
    switch ($level){              /*switch を使った条件分岐*/
      case $level = 0 ;
        $mess = "しっかりして!";
        break;
      case $level = 1 ;
        $mess = "出直してきて!";
        break;
      case $level = 2 ;
        $mess = "修行がたりませんよ!";
        break;
      case $level = 3 ;
        $mess = "こんなことでは・・・";
        break;
      case $level = 4 ;
        $mess = "あきらめないで!";
        break;
      case $level = 5 ;
        $mess = "半分です。まだまだ!";
        break;
      case $level = 6 ;
        $mess = "がんばれ〜";
        break;
      case $level = 7 ;
        $mess = "がんばった。もう一度!";
        break;
      case $level = 8 ;
        $mess = "後少しで全クリアッ!";
        break;
      case $level = 9 ;
        $mess = "おしいっ!もうちょっと";
        break;
    }
/*----------------------------------------------点数データの書きこみ*/
    WRITE();
/*----------------------------------------------レベル10まで行かなかった場合の表示*/
  echo "<div style='font-size:16px;font-weight:bold;margin:15px'>終了!クリアレベル $level ¥n";
  echo "  $point 点です。".$name."さん、".$mess."</div>¥n";
  echo " ". $minute."分".$second."秒 <a href='quiz_ask.php?check=new'>もう一度やる</a>¥n";
  echo "<a href='index.php?check=new'>TOPに戻る</a>";
/*----------------------------------------------レベル10が終了した場合*/
} else {                  
  if($level_now == 10){            
    $right_cnt += $right_cnt_before;
    $point = $right_cnt/50*100;
    echo "<div style='font-size:16px;margin:15px;font-weight:bold;line-height:20px'>¥n";  
    echo "最終レベルをクリアしました。合格です!$right_cnt 問正解、$point 点です。<br>¥n";
    echo $minute."分".$second."秒 <a href='quiz_ask.php'>もう一度</a>¥n";
    echo "<a href='index.php'>TOPに戻る</a></div>";
    $level="10";
    WRITE();
/*----------------------------------------------レベルクリア、レベル9までの処理*/
  } else {                    
    echo " $right_cnt 問正解です。";
    $right_cnt += $right_cnt_before;
    echo "<form action='quiz_ask.php' method='post'>¥n";
    echo "<input type='hidden' name='level' value='".$level_now."'>¥n";
    echo "<input type='hidden' name='point' value='".$right_cnt."'>¥n";
    echo " <input type='submit' name ='enter' value='次のレベル'>¥n";
  }
}
/*----------------------------------------------採点結果表示*/
}
?>

</body></html>

Word Excel 二択クイズ 問題作成画面

<?php
error_reporting(1);
define("PASS","****");
/*----------------------------------------------パスワード”の設定*/
$pass=$_COOKIE['password_quiz_ask'];
$name=$_COOKIE['name'];
$office = $_POST['office'];
if($office == null){
$office = $_COOKIE['office'];
}
setcookie("office",$office,time()+60*60);
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja"><head>
<meta http-equiv="Content-type" content="text/html; charset=EUC-JP">
<meta http-equiv="Content-Style-Type" content="text/css">
<link rel="stylesheet" href="./style.css">
<style type="text/css">
<!--
.nikki { font-size:12px;line-height:15px;text-align:left;width:660px;padding:7px;margin:0px;
border-style:solid;border-width:1px;background-color:#ffffff;border-color:#abcdef;}
//-->
</style>

<title>WORD/EXCEL問題集</title></head>
<body><div class="file2">
<?php
if($pass != PASS){
echo "<a href='index.php'>TOP</a>";
} else if($pass == PASS){
/*----------------------------------------------LOGOFFの設定*/
  echo "<table width='660' border='0'><tr style='margin:0px;font-size:15px'>";
  echo "<td>クイズ入力 :".date("Y/m/d")."</td>";
  echo "<td><a href='index.php?renew=new'>TOP</a></td></tr></table>";
/*----------------------------------------------*/
  echo "<form action='quiz_write.php' method='post'>";
  echo "<table border='0' width='660'><tr>";
  echo "<td>番号 <select name='number'>";
  echo "<option>"." " ."</option>";
  $cnt = 1;
  while ($cnt < 101){
   echo "<option value='$cnt'>".$cnt."</option>";
  $cnt++;
  }
  echo "</select> 正解 <select name='answer'>";
  echo "<option value='YES'>YES</option>";
  echo "<option value='NO'>NO</option>";
  echo "</select></td></tr>";
  echo "<tr><td><textarea name='quiz' cols='90' rows='2'></textarea></td></tr>";
  echo "<tr><td><textarea name='expln' cols='90' rows='2'></textarea></td></tr>";
  echo "<tr><td><input type='submit' name='enter' value='書込/表示'> ";
  echo "<input type='submit' name='enter' value='消す!'></td></tr></table></form>";
  $number = $_POST['number'];
  $answer = $_POST['answer'];
  $quiz = $_POST['quiz'];
  $expln = $_POST['expln'];
  $updir = "quiz/".$office;
  $data = $number."&&".$answer."&&".$quiz."&&".$expln."¥n";
  $enter = $_POST['enter'];
/*----------------------------------------------ここから削除*/
  if ($enter == "消す!"){
   $filepointer=fopen("./$updir", "r"); /*いったん読み出し*/
   while(!feof($filepointer)){
   $fileline = fgets($filepointer);
   $ary_num = split("&&",$fileline); /*配列に入れ*/
   $quest_del[$ary_num[0]] = $fileline;
   }
   fclose($filepointer);
   $qs_num = count($quest_del);
   $qs_cnt = 1;
   while($qs_cnt < 101){ /*入力番号と同じ配列キーを削除*/
   if($number == $qs_cnt){;
   $quest_del[$qs_cnt] = "";
   break;
   }
   $qs_cnt++;
   }
  sort($quest_del);
   $filepointer=fopen("./$updir", "w+"); /*もう一度書きこみ*/
   flock($filepointer, LOCK_EX);
   $qs_cnt = 0;
   while($qs_cnt <= $qs_num){
   fputs($filepointer, $quest_del[$qs_cnt]);
   $qs_cnt++;
   }
   flock($filepointer, LOCK_UN);
   fclose($filepointer);
/*----------------------------------------------ここから書き込み部分*/
  } else if($enter == "書込/表示" and $data != null){
   $filepointer=fopen("./$updir", "a+");
   while(!feof($filepointer)){
   $fileline = fgets($filepointer);
   $text = split("&&",$fileline);
   if($number == $text[0]){
   $select = "no";
   break;
   }
   }
   If($select != "no"){
   flock($filepointer, LOCK_EX);
   fputs($filepointer, $data);
   flock($filepointer, LOCK_UN);
   fclose($filepointer);
   } else {
   echo "その番号はすでにあります";
   }
  }
/*----------------------------------------------ここから表示部分*/
  if(file_exists("./$updir")){
   $filepointer=fopen("./$updir", "r");
   while(!feof($filepointer)){
   $fileline = fgets($filepointer);
   $quest[] = $fileline;
   }
   fclose($filepointer);
  }
  sort($quest,SORT_NUMERIC);
  $qs_num = count($quest);
  $qs_cnt = $qs_num-1;
  while($qs_cnt > 0){
   $text = split("&&",$quest[$qs_cnt]);
   echo "<div class='nikki'>";
   echo "<b>$text[0]</b> $text[1] $text[2]<br> <font color=blue>$text[3] </font></div><br>";
  $qs_cnt--;
  }
}
?>

</div></body></html>
2023/9
SUN MON TUE WED THU FRI SAT
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30


 フォクすけ©2006 Mozilla Japan



制作:基礎から解るPHP入門講座 代表:FREEZE

Copyright © 2005/2/28 flzPHP.All Rights Riserved