PHP만으로 간단한 오미쿠지를 만들어 보았습니다.

15623 단어 PHP7PHP
※2020/9/6 추가
ㅎㅎ씨로부터, 각 코드를 보다 간소하게 해, 정규의 화면 천이인지의 체크를 추가하는 코멘트 받았습니다 때문에, 부디 이쪽 도 참조해 주세요!

※2020/10/17 추가
GitHub의 소스 코드는 여기

개요



매우 간단한 기능입니다.

우선, 초기 화면에 「오미쿠지를 당기기」버튼이 있고,

버튼을 누르면 7개의 추첨 중 하나가 무작위로 당겨 결과가 표시됩니다.

결과 세부정보를 클릭하면 추첨에 따른 주석이 표시됩니다.


구현



동작 확인 환경: PHP7.1.29

초기 화면



먼저 초기 화면을 구현합니다.

start.php
<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="UTF-8">
        <title>おみくじ</title>
    </head>
    <body>
        <h1>おみくじ</h1>
        <h2>おみくじを引いて今日の運勢を占ってみよう!</h2>
        <form action="fortune.php" method="POST">
            <input type="submit" name="btn" value="おみくじを引く">
        </form>
    </body>
</html>

하나의 양식이있는 단순한 페이지입니다.
클릭하면 "fortune.php"로 날아갑니다.

결과 화면



결과 화면에 액세스하면 무작위로 복권이 당겨 결과가 표시됩니다.

fortune.php
<?php
$lots = [1, 2, 3, 4, 5, 6, 7];
if (isset($_POST['btn'])) {
    $lot = array_rand($lots);
    switch ($lot) {
        case 0:
            $res = '大吉';
            $num = 1;
            break;
        case 1:
            $res = '中吉';
            $num = 2;
            break;
        case 2:
            $res = '小吉';
            $num = 3;
            break;
        case 3:
            $res = '吉';
            $num = 4;
            break;
        case 4:
            $res = '半吉';
            $num = 5;
            break;
        case 5:
            $res = '末吉';
            $num = 6;
            break;
        case 6:
            $res = '凶';
            $num = 7;
    }
} else {
    header('Location:button.php');
    exit();
}
?>
<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="UTF-8">
        <title>おみくじ</title>
    </head>
    <body>
        <h1>結果</h1>
        <h2><?= $res; ?></h2>
        <p>
            <a href="detail.php?num=<?= $num; ?>">結果の詳細</a>
        </p>
        <p>
            <a href="button.php">
                <button type="button">もう一度おみくじを引く</button>
            </a>
        </p>
    </body>
</html>

else문내의 처리에 의해, 「오미쿠지를 당기기」버튼을 누르지 않고(값을 POST하지 않고) 온 액세스를, 초기 화면으로 연주하고 있습니다.

복권을 당기는 프로세스는 1에서 7까지의 값을 포함하는 배열을 만들고 배열에서 array_rand를 통해 임의로 키를 검색하고 그 값으로 결과를 분기합니다.

참고로 'array_rand'는 값을 검색하는 대신 키를 검색합니다.

array_rand — 배열로부터 1개 이상의 키를 랜덤하게 취득한다
인용 소스 : PHP 매뉴얼 array_rand

이 때문에, 계속되는 switch문의 case문에서는 0부터 값이 시작되고 있습니다.

또한 결과에 의해 변수 $num에 수치를 대입해, 그것을 URL 파라미터에 더한 링크를 생성하는 것으로, 상세 페이지 내용을 분기시킵니다.

상세 화면



URL 파라미터로부터 값을 취득해, 그것에 의해 표시시키는 코멘트를 변화시키고 있습니다.

detail.php
<?php
if (isset($_GET['num']) && $_GET['num'] < 8 && $_GET['num'] > 0) {
    $num = $_GET['num'];
    switch ($num) {
        case 1:
            $res = '絶好調の運勢!';
            break;
        case 2:
            $res = '今日という日に期待大!';
            break;
        case 3:
            $res = 'ちょっといいことあるかも!';
            break;
        case 4:
            $res = 'ラッキー!';
            break;
        case 5:
            $res = '末吉よりはいいかも';
            break;
        case 6:
            $res = '一応吉だよ';
            break;
        case 7:
            $res = 'ダメだったらやり直せばええんやで';
    }
} else {
    header('Location:button.php');
    exit();
}
?>
<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="UTF-8">
        <title>おみくじ</title>
    </head>
    <body>
        <h1>結果の詳細</h1>
        <h2><?= $res; ?></h2>
        <p>
            <a href="button.php">
                <button type="button">もう一度おみくじを引く</button>
            </a>
        </p>
    </body>
</html>

이 페이지에서는
「『num』을 키로 한 GET 파라미터가 있다」
가다
「그 GET 파라미터가 1~7의 범위내」
의 경우에만 처리가 달리도록 하고 있습니다.

...실은 조금 구멍이 있고, GET 파라미터에 「2.2」등 범위내의 정수 이외의 수치를 넣으면 액세스 할 수 버립니다 ...

이것을 막는데 좋은 어드바이스라든지 코멘트 받을 수 있으면 기뻐합니다!

※2020/9/6 추가
코멘트 에서 이것을 막는 방법을 교수해 주시고 있습니다!

또, 스스로도 생각해 보았습니다만,
조건식을 아래와 같이 변경함으로써 범위 내의 정수 이외를 연주하게 되었습니다.

detail.php
<?php
if (isset($_GET['num']) && in_array($_GET['num'], range(1, 7)) {

// 中略

}

아래도 참고까지.

PHP 매뉴얼 「 PHP: in_array
PHP 매뉴얼 「 PHP: range

후기



이번은 배운 지식의 아웃풋의 일환으로서 0부터 처리를 써 보았습니다.
뭔가 미비 등이 있으면, 코멘트 받을 수 있으면 다행입니다.

좋은 웹페이지 즐겨찾기