【问题标题】:how to multiply two column names using codeigniter validation rule如何使用 codeigniter 验证规则将两个列名相乘
【发布时间】:2015-06-22 05:54:25
【问题描述】:

我有三列。使用codeigniter验证规则,两列的乘积进入第三列名称income_amount。第一列是crop_quantity,第二列是per_rate

控制器

$this->form_validation->set_rules('crop_quantity', 'Crop Quantity', 'required|numeric');
$this->form_validation->set_rules('per_rate', 'Per Rate', 'required|numeric|callback_get_product');
$this->form_validation->set_rules('income_amount', 'Income Amount', 'required|numeric');
$this->form_validation->set_rules('select_client', 'Client Name', 'required');

function get_product($crop_quantity,$per_rate)
{
    $q = $crop_quantity;
    $p = $per_rate;
    if(q!='' && p!='')
    {
        $total = $p * $q;
        $income_amount=$total;
    }
}

查看

<div class="control-group">
    <label class="control-label">Crop Quantity</label>
    <div class="controls">
        <input type="text" class="span6 m-wrap" value="<?echo $name->crop_quantity?>" name="crop_quantity" >
        <?php echo form_error('crop_quantity'); ?>
    </div>
</div>

【问题讨论】:

  • 您想在表单中显示income_amount 而不提交? (即,一旦用户输入crop_quality 和per_rate?

标签: php codeigniter validation


【解决方案1】:

将以下代码添加到您的 Controller Post 中:

$this->form_validation->set_rules('crop_quantity', 'Crop Quantity', 'required|numeric');
$this->form_validation->set_rules('per_rate', 'Per Rate', 'required|numeric|callback_get_product');
$this->form_validation->set_rules('income_amount', 'Income Amount', 'required|numeric|callback_validate_amount');
$this->form_validation->set_rules('select_client', 'Client Name', 'required');

在同一个控制器中添加一个名为“validate_amount”的新函数(提示:callback_validate_amount)

function validate_amount() {
    $q = $this->input->post('crop_quantity');
    $p = $this->input->post('per_rate');
    $income_amount = $this->input->post('income_amount');

    $total = $p * $q;
    if ($income_amount == $total) {
        return TRUE;
    } else {
        $this->form_validation->set_message('validate_amount', 'The %s field must contain the product of  crop_quantity and per_rate');
        return FALSE;
    }
}

【讨论】:

    【解决方案2】:

    您确实需要对控制器执行任何操作。添加此更改您的视图到

    <script>
    function calculate() {
        var myBox1 = document.getElementById('crop_quantity').value;    
        var myBox2 = document.getElementById('per_rate').value;
        var result = document.getElementById('income_amount');  
        var myResult = myBox1 * myBox2;
        result.value = myResult;
    
    
    }
    window.onload = calculate();
    </script>
    
    
      <div class="control-group">
                            <label class="control-label">Crop Quantity</label>
                            <div class="controls">
           <input type="text" id="crop_quantity" oninput="calculate()" class="span6 m-wrap" value="<?echo $name->crop_quantity?>" name="crop_quantity" >
                            <?php echo form_error('crop_quantity'); ?>        
    
                            </div>
                            </div>
    
                           <div class="control-group">
                            <label class="control-label">Per Rate</label>
                            <div class="controls">
      <input type="text" id="per_rate" class="span6 m-wrap" value="<?echo $name->per_rate ?>" name="per_rate" oninput="calculate()">
                            <?php echo form_error('per_rate'); ?>        
    
                            </div>
                            </div>
    
                            <div class="control-group">
                            <label class="control-label">Income Amount</label>
                            <div class="controls">
      <input type="text" id="income_amount" class="span6 m-wrap" value="<?echo $name->income_amount?>" name="income_amount" >
                            <?php echo form_error('income_amount'); ?>        
    
                            </div>
                            </div>
    

    注意:我在每个输入字段中添加了属性id。您还可以在输出框中添加禁用字段。
    注意 2:我在输入字段中也使用了oninput="calculate()"
    示例

    function calculate() {
    		var myBox1 = document.getElementById('crop_quantity').value;	
    		var myBox2 = document.getElementById('per_rate').value;
    		var result = document.getElementById('income_amount');	
    		var myResult = myBox1 * myBox2;
    		result.value = myResult;
          
    		
    	}
    
    window.onload = calculate();
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset=utf-8 />
    <title>JS Bin</title>
    </head>
    <body>
      
    <table width="80%" border="0">
      <tr>
        <th>crop_quantity</th>
        <th>per_rate</th>
        <th>income_amount</th>
      </tr>
      <tr>
        <td><input id="crop_quantity" name="crop_quantity" type="text" oninput="calculate()" value="13" /></td>
        <td><input id="per_rate" name="per_rate" value="10" type="text" oninput="calculate()" /></td>
        <td><input id="income_amount" name="income_amount" disabled/></td>
      </tr>
      <tr>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
      </tr>
    </table>
      
    </body>
    </html>

    编辑更新javascript

    【讨论】:

    • 我已经用开箱即用的示例代码更新了我的帖子。你不需要调用它。只需将其放在您的视图中(很可能在视图的开头)
    • 只需将它放在您的视图中(很可能在视图的开头) html,当然还有脚本标签。 (我忘记了)添加它。
    • 不,把它放在你看来,脚本部分。 (我更新了)
    • 为什么要验证它?您在第一条评论中说您只想要它而不提交?
    • @Arthi 也从你的控制器中移除 get_product()
    【解决方案3】:

    uzumaki ichigo 解决方案看起来很有效,只是想补充一点

    1.请查看&lt;?(shorthand tags) are enabled or not else use &lt;?php instead of ?&gt;

    2.还有一点,&lt;? and echo之间应该有空格

    【讨论】:

      猜你喜欢
      • 2013-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-19
      • 2011-03-19
      • 2013-12-01
      • 2020-06-07
      • 2011-10-28
      相关资源
      最近更新 更多