Нужно доработать до 30 лет ипотечный калькулятор

Тема в разделе "Как сделать...", создана пользователем шифанер, 27 мар 2012.

  1. шифанер

    шифанер Создатель

    Регистр.:
    14 сен 2008
    Сообщения:
    15
    Симпатии:
    15
    вот сам скрипт


    <?php
    /*******************************************************************************
    Ипотечный калькулятор
    anzilant.ru
    *******************************************************************************/

    error_reporting(0);

    $allow_month_count = array(6, 9, 12, 24);
    $allow_month = array(
    1=> 'Январь',
    2=> 'Февраль',
    3=> 'Март',
    4=> 'Апрель',
    5=> 'Май',
    6=> 'Июнь',
    7=> 'Июль',
    8=> 'Август',
    9=> 'Сентябрь',
    10=> 'Октябрь',
    11=> 'Ноябрь',
    12=> 'Декабрь'
    );

    $allow_calc = false;
    $sum_kredita = '';
    $procent = 12;
    $month_count = '';
    $num_first_month = (int)date('n');;

    if (isset($_REQUEST['sum_kredita']) and isset($_REQUEST['procent']) and
    isset($_REQUEST['month_count']) and isset($_REQUEST['month_first']) ) {
    $sum_kredita = (int)$_REQUEST['sum_kredita'];
    if ($sum_kredita < 100000 or $sum_kredita > 100000000) {
    $sum_kredita = 100000;
    }
    $procent = (float)$_REQUEST['procent'];
    if ($procent <= 0 or $procent > 100) {
    $procent = 12;
    }
    $month_count = (int)$_REQUEST['month_count'];
    $num_first_month = (int)$_REQUEST['month_first'];
    $allow_calc = true;
    } else {
    $allow_calc = false;
    }

    $srok_opt = '';
    foreach ($allow_month_count as $m) {
    if ($month_count == $m) {
    $srok_opt .= "<option value=\"$m\" selected>$m месяцев</option>";
    } else {
    $srok_opt .= "<option value=\"$m\">$m месяцев</option>";
    }
    }

    $m_opt = '';
    foreach ($allow_month as $k => $m) {
    if ($num_first_month == $k) {
    $m_opt .= "<option value=\"$k\" selected>$m</option>";
    } else {
    $m_opt .= "<option value=\"$k\">$m</option>";
    }
    }


    $output = '';

    $output .= '<form name="credit" action="" method="post">
    Сумма кредита, руб:<br>
    <input name="sum_kredita" type="text" value="'. $sum_kredita .'"> (100 000 - ... рублей)<br>
    Процентная ставка, %:<br>
    <input name="procent" type="text" value="'. $procent .'"> (разделитель дробной части - точка ".", например 11.7)<br>
    Срок кредита:<br>
    <select size="1" name="month_count">
    '. $srok_opt .'
    </select><br>
    Месяц получения кредита:<br>
    <select size="1" name="month_first">
    '. $m_opt .'
    </select><br><br>
    <input type="submit" value="Рассчитать">
    </form>';


    if ($allow_calc) {
    $month = array('01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12');
    //$month = array('янв', 'фев', 'мар', 'апр', 'май', 'июн', 'июл', 'авг', 'сен', 'окт', 'ноя', 'дек');

    //текущий год
    $year = (int)date('Y', time());
    //выплата в месяц без процентов
    $pogash_osn_dolga = round($sum_kredita / $month_count);
    //выплата за последний месяц
    $last_month = $sum_kredita - $pogash_osn_dolga * ($month_count - 1);

    //выплаты в месяц
    $per_month = array();
    $sum_kred_temp = $sum_kredita;
    for ($i = 0; $i < $month_count - 1; $i++) {
    $per_month[] = $pogash_osn_dolga;
    //остаток по месяцам
    $osn_dolg[] = $sum_kredita - $pogash_osn_dolga * $i;
    }

    //выплаты в месяц
    $per_month[] = $last_month;
    //остаток по месяцам
    $osn_dolg[] = $last_month;

    //print_r($per_month);
    //print_r($osn_dolg);


    $first = array_slice($month, 0, $num_first_month - 1);
    $last = array_slice($month, $num_first_month - 1);

    $first_out = array_slice($month, 0, $num_first_month);
    $last_out = array_slice($month, $num_first_month);

    $month_order = array_merge($last, $first);
    $month_order_out = array_merge($last_out, $first_out);
    //порядок по 24 месяцам
    $month_order = array_merge($month_order, $month_order);
    $month_order_out = array_merge($month_order_out, $month_order_out);

    $year_out = $year;

    //порядок выплаты кредита по месяцам и годам
    $month_kred = array();
    $month_kred_out = array();
    for ($i = 0; $i <= $month_count - 1; $i++) {
    $month_kred[] = array($month_order[$i], $year);
    $month_kred_out[] = array($month_order_out[$i], $year_out);
    //увеличим год, если декабрь
    if ($month_order[$i] == 12) {
    $year++;
    }
    if ($month_order_out[$i] == 12) {
    $year_out++;
    }
    }

    //print_r($month_kred);
    //print_r($month_kred_out);
    //die;

    //проверка года на високосность
    function is_leap($year = NULL) {
    return checkdate(2, 29, ($year == NULL)? date('Y') : $year);
    }

    //проценты по месяцам
    $proc_pogash = array();
    $vsego = array();
    for ($i = 0; $i < $month_count; $i++) {
    (is_leap($month_kred[$i][1])) ? $days_in_year = 366 : $days_in_year = 365;
    //количество дней в месяце
    $num = cal_days_in_month(CAL_GREGORIAN, $month_kred[$i][0], $month_kred[$i][1]);
    $day_month[] = array($num, implode($month_kred_out[$i], '.'));
    $proc_pogash_i = Round(($osn_dolg[$i] * ($procent / 100)) / $days_in_year * $num);
    $proc_pogash[] = $proc_pogash_i;
    $vsego[] = $per_month[$i] + $proc_pogash_i;
    }


    /*
    print_r($proc_pogash);
    echo array_sum($proc_pogash);
    print_r($vsego);
    echo array_sum($vsego);

    print_r($day_month);
    */
    $output .= '<br><br>';
    $output .= sprintf('Сумма кредита: %s рублей; Процентная ставка: %01.2f; Срок: %s мес. ', number_format($sum_kredita, 0, '.', ' '), $procent, $month_count) ;
    $output .= '<br><br>';

    $out = '<table class="credit">';
    $out .= '<tr><th>Месяц</th><th>Кол-во дней</th><th>Остаток основного долга, руб</th><th>Погашение долга, руб</th><th>Процент, руб</th><th>Всего, руб</th></tr>';
    for ($i = 0; $i < $month_count; $i++) {
    $out .= sprintf('<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>',
    $day_month[$i][1], $day_month[$i][0], $osn_dolg[$i], $per_month[$i], $proc_pogash[$i], $vsego[$i]);
    }
    $out .= sprintf('<tr><td colspan="3"><b>Итого:</b></td><td><b>%s</b></td><td><b>%s</b></td><td><b>%s</b></td></tr>',
    number_format(array_sum($per_month), 0, '.', ' '), number_format(array_sum($proc_pogash), 0, '.', ' '), number_format(array_sum($vsego), 0, '.', ' '));
    $out .= '</table>';
    $output .= $out;
    }

    $tpl = '
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>ипотечный калькулятор </title>
    <body style="background-color:#E9E0D0">
    <meta http-equiv="Content-Type" content="text/html; charset=Windows-1251">
    <style type="text/css">
    a:active,a:visited,a:link {
    color: #fbfacf;
    text-decoration:none;
    }
    a:hover {
    color: #fbfacf;
    text-decoration: underline;
    }
    .title {
    color: #333333;
    font-size: 26px;
    font-family: georgia;
    font-weight: normal;
    padding-left: 6px;
    }
    .text {
    font-family:Tahoma;
    font-weight:normal;
    font-size:12px;
    color:#faf8df;
    }
    hr {
    width: 100%;
    height: 1px;
    border: 0;
    background: #FFF7C7;
    color: #FFF7C7
    }
    table.credit {
    width:100%;
    border:1px solid #c0c0c0;
    background-color:#ffffff;
    }
    table.credit tr {
    background-color:#f8f8f8;
    }
    table.credit tr:hover {
    background-color:#ffffff;
    }
    table.credit td{
    padding:1px;
    text-align:right;
    }
    table.credit th{
    border:0px;
    color:#333333;
    background-color:#E9E0D0;
    padding:2px;
    text-align:center;
    font-size:12px;
    }

    </style>
    </head>
    <body>
    <table width="750" align="center" border="0" cellspacing="0" cellpadding="0">
    <tr>
    <td width="100%" height="30" align="center" valign="middle" style="border-left: 1px solid #E9E0D0; border-right: 1px solid #E9E0D0; border-top: 1px solid #E9E0D0;" bgcolor="#E9E0D0">
    <span class="title">Ипотечный калькулятор</span>
    </td>
    </tr>
    </table>
    <table width="750" align="center" border="0" cellspacing="1" cellpadding="0" bgcolor="#E9E0D0" class="text">
    <tr>
    <td>
    <table width="100%" border="0" cellspacing="0" cellpadding="0" bgcolor="#BAA16F"><tr>
    <td width="100%" style="padding-top:25px; padding-right:20px; padding-left:20px;" valign="top"><div class="text">

    ' . $output . '

    <br><br><br><br>

    <hr>
    <a href="Перейти по ссылке">Вернуться на главную страницу</a>
    </div><br><br><br></td></tr></table>
    <table width="100%" cellspacing="0" cellpadding="3" border="0" bgcolor="#BAA16F" class="text" style="border-top:1px solid #FFF7C7">
    <tr>

    <td width="50%" nowrap>anzilant - агенство недвижимости</td>
    </tr>
    </table>
    </td>
    </tr>
    </table>
    </body>
    </html>
    ';


    echo $tpl;



    ?>
     
  2. Juri

    Juri

    Заблокирован
    Регистр.:
    5 окт 2007
    Сообщения:
    1.065
    Симпатии:
    197
    продолжите теми вариантами которые вам нужны и будет счастье.


    например
    $allow_month_count = array(6, 9, 12, 24, 48, 64, 72);
     
  3. шифанер

    шифанер Создатель

    Регистр.:
    14 сен 2008
    Сообщения:
    15
    Симпатии:
    15
    (6, 9, 12, 24, 36, 48, 60, 72, 84, до 300)
     
  4. Localut

    Localut Деда Мороз

    Регистр.:
    13 фев 2009
    Сообщения:
    224
    Симпатии:
    81
    Вообще если до 30 лет, то последняя цифра 360 (мес.).
    Juri показал вам строчку в которую нужно добавить. Единственное смотрите какая градация выбора вам нужна, если не каждый год то не надо все и прописывать.