2017-06-19 84 views
1

乘以数以下是简单的代码: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> 

注:如果我不去使用步骤,那么它只需要整数,输入的输出完全可以。但我要求用小数点输入货币价值。

回答

2

我跑你的HTML代码上https://www.w3schools.com/html/tryit.asp?filename=tryhtml_input_number而事实证明,提交数据后,正确的数值。

在将数据添加到数据库之前,您正在处理$ pr_amount吗?请发布您的PHP文件的完整内容。

+0

我用完整的代码更新了php部分,是的,我在处理$ pr_amount之前将其添加到数据库中。请看一下。谢谢 – mimi

+1

您需要将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 –

+0

,只是完美的工作,你教我好东西! – mimi

1

试试这个

<input type='number' min="1" max="500" name='pr_amount' id='pr_amount' step='0.01' value='0.00' placeholder='0.00' /> 
+0

我应用了你的代码,但没有运气仍然1.50 out in database is 150.00 – mimi

+0

你能显示完整的代码吗? Html和PHP。 –

+0

嗨添加了问题上的代码。 – mimi