вставить данные из пока l oop в базу данных php - PullRequest
1 голос
/ 27 января 2020

Я пытаюсь разместить данные в своей базе данных, пока l oop. Это помогает мне получить месячные периоды в определенном диапазоне. Я хочу выбрать даты и ввести даты в свою базу данных вместе с дополнительными данными. Я застрял, пожалуйста go легко на меня.

 // Calculate interest
$intrest_loan = $loan_amount * $intrest / 100;
$monthly_payment = $loan_amount / $tenor;

// echo $intrest_loan;
// echo $monthly_payment;

$date = $start;

while ($date <= $end)
{
    $date = date('Y-m-d', strtotime($date . ' +1 month'));
    // echo $date . "\n";
    $sql = "insert into collection (period, amount_collected) values ($date, $monthly_payment)";
    $resultn = mysqli_query($connection, $sql);
    if($resultn) {

    }else{
        echo "<p>Failed to load collections</p>";
    }
}

Отредактированный код.

1 Ответ

0 голосов
/ 27 января 2020

Если вы используете mysqli, то я надеюсь, что это может помочь. В соответствии с комментариями, сделанными в отношении 2 отключенных циклов, вы можете / должны объединить в один l oop, где значение даты вычисляется и используется в качестве входных данных для оператора sql. Поскольку вы разместили фрагмент кода, а не полный текст, невозможно сказать, уязвим ли ваш sql для инъекции sql или нет, но при наличии денег было бы разумно не рисковать и пытаться смягчить последствия злонамеренных действий. атаки - таким образом, используйте prepared statement.

. Класс DateTime имеет множество методов, помогающих манипулировать датой, и в этом случае добавление месяца можно сделать очень аккуратно, как показано ниже.

По сути, вы создаете оператор sql с заполнителями (?) и связываете эти заполнители с переменными во время выполнения. Как только инструкция подготовлена, она может быть выполнена столько раз, сколько требуется, с небольшими дополнительными затратами.

/* some example / dummy dates ~ source unknown */
$str_date_start='2020-01-01';
$str_date_end='2021-01-01';


/* create a prepared statement */
$sql='insert into `collection` ( `period`, `amount_collected` ) values (?,?)';
$stmt=$conn->prepare( $sql );
$stmt->bind_param( 'ss', $date, $monthly_payment );     

/* original repayment calculations - corrected spelling of interest*/
$interest_loan = $loan_amount * $interest / 100;
$monthly_payment = $loan_amount / $tenor;


/* create new date objects */
$start=new DateTime( $str_date_start );
$end=new DateTime( $str_date_end );
$interval=new DateInterval('P1M');

/* make sure we start AT the start */
$start->sub( $interval );

while( $start < $end ){
    $start->add( $interval );
    $date=$start->format('Y-m-d 00:00:00');
    $stmt->execute();
}
$stmt->close();
$conn->close();
...