乘以數以下是簡單的代碼:HTML5號碼輸入型步驟屬性100
Amount: <input type='number' step="0.01" min="1" max="500" name='pr_amount' id='pr_amount' /><br>
這種形式的用PHP作出MySQL數據庫中插入數據。 INPUT 1.50 OUTPUT在數據庫中150.00
如何解決這個問題?我是否需要在php編碼部分使用$ pr_amount/100類型的代碼,或者是否有其他方法。沒有step =「0.01」,它不會以點或美元的分值取小數部分。
PHP部分: payment.inc.php
if (isset($_POST['pr_amount'], $_POST['pr_processor'],$_POST['pr_comment'])) {
// Sanitize and validate the data passed in
$pr_amount = filter_input(INPUT_POST, 'pr_amount', FILTER_SANITIZE_NUMBER_FLOAT);
$pr_processor = filter_input(INPUT_POST, 'pr_processor', FILTER_SANITIZE_STRING);
$pr_comment = filter_input(INPUT_POST, 'pr_comment', FILTER_SANITIZE_STRING);
$user_id = htmlentities($_SESSION['user_id']);
// for checking minimum payout allowed
if ($pr_amount < 1) {
// If it's not, something really odd has happened
$error_msg_payout .= '<p class="error">Minimum Payout is $1.00, for INR withdraw Minimum payout is Rs.100</p>';
}
if(empty($pr_amount || $pr_comment)) {
$error_msg_payout .= '<p class="error">User must input all field</p>';
}
// checking if pr amount is above the available balance
$stmt_balance = $mysqli->prepare("SELECT current_balance FROM client WHERE user_id = ?");
$stmt_balance->bind_param('i', $user_id);
$stmt_balance->execute();
$stmt_balance->store_result();
if($stmt_balance < $pr_amount){
// If it's not, something really odd has happened
$error_msg_payout .= '<p class="error">Payment request amount is greater than the available balance.</p>';
}
$stmt_balance->close();
//-------For checking pr comment validity
if (strlen($pr_comment) > 150) {
// If it's not, something really odd has happened
$error_msg_payout .= '<p class="error">Payment instruction should be within 150 charecters</p>';
}
if (!ctype_alpha(str_replace(' ', '',$pr_comment))) {
$error_msg_payout .= '<p class="error">Payment Instruction Include disallowed charecters</p>';
}
if (empty($error_msg_payout)) {
// Insert the new account into the database
if ($insert_stmt_payout = $mysqli->prepare("INSERT INTO payment (user_id,pr_amount,pr_comment,pr_processor)
SELECT ?, ?, ?, pr_processor FROM paymentlist WHERE pr_processor = ?")) {
$insert_stmt_payout->bind_param('idss', $user_id,$pr_amount,$pr_comment,$pr_processor);
// Execute the prepared query.
if (! $insert_stmt_payout->execute()) {
header('Location: ../error.php?err=AddPayment failure: INSERT');
exit();
}
}
//---deducting balance after succesful request
$stmt_deduct = $mysqli->prepare("UPDATE client SET current_balance = (current_balance-?) WHERE user_id = ?");
$stmt_deduct->bind_param('di', $pr_amount,$user_id);
$stmt_deduct->execute();
if (! $stmt_deduct->execute()) {
header('Location: ../error.php?err=AddPayment failure: INSERT AMOUNT');
exit();
}
$stmt_deduct->close();
header('Location: ./payment.php');
exit();
}
}
HTML部分: payment.php
<form method="post" name="payment_request" action="<?php echo esc_url($_SERVER['PHP_SELF']); ?>">
Add Request:
<?php
$stmt = $mysqli->prepare('SELECT pr_processor FROM paymentlist ');
$stmt->execute(); // Execute the prepared query.
$stmt->bind_result($pr_processor);
$stmt->store_result();
echo "<select name='pr_processor'>";
while($stmt->fetch()) {
echo "<option value='" . $pr_processor . "'>" . $pr_processor . "</option>";
}
$stmt->close();
echo "</select>";
?> <br>
Amount: <input type='number' min="1" max="500" name='pr_amount' id='pr_amount' step='0.01' value='0.00' placeholder='0.00' /><br>
Payment Instruction: <input type='text' name='pr_comment' id='pr_comment' /><br>
<input type="submit" value="Add Payout Request" name="addpayment" />
</form>
注:如果我不去使用步驟,那麼它只需要整數,輸入的輸出完全可以。但我要求用小數點輸入貨幣價值。
我用完整的代碼更新了php部分,是的,我在處理$ pr_amount之前將其添加到數據庫中。請看一下。謝謝 – mimi
您需要將FILTER_FLAG_ALLOW_FRACTION標誌添加到filter_input函數調用中。所以你的過濾器應該是:'$ pr_amount = filter_input(INPUT_POST,'pr_amount',FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);'。看到這個鏈接:https://www.w3schools.com/php/filter_sanitize_number_float.asp –
,只是完美的工作,你教我好東西! – mimi