1

テキストボックスタイプを通貨形式にしようとしました。私はそれを行いましたが、値をデータベースに挿入すると、値が変化します。10000と入力すると、10,000に変わります。(これまでのところ良いです。)しかし、その値をデータベースに挿入すると、値は10に変わります。私は本当に混乱しています。

これが私のスクリプトです。私はphp、mysqlを使用しましたが、フィールドタイプはfloat

    <?php include('header.php'); ?>
<?php
    if(isset($_POST['simpan']))
    {
        $nama           = htmlentities(addslashes($_POST['nama']));
        $sim_wajib      = $_POST['sim_wajib'];
        $sim_pokok      = $_POST['sim_pokok'];
        $sim_sukarela   = $_POST['sim_sukarela'];
        $sim_wpinjam    = $_POST['sim_wpinjam'];
        $shu            = $_POST['shu'];
        $total          = $sim_wpinjam + $shu;

        if($nama != '' && $sim_wajib != '' && $sim_pokok != '' && $sim_sukarela != '' && $sim_wpinjam != '' && $shu != '' )
        {
            $sql     = "INSERT INTO simpanan_tbl";
            $sql    .= "(nama, sim_wajib, sim_pokok, sim_sukarela, sim_wajibpinjam, shu, jumlah)";
            $sql    .= "VALUES('$nama','$sim_wajib','$sim_pokok','$sim_sukarela','$sim_wpinjam','$shu','$total')";
            $query   = mysql_query($sql) or die(mysql_error());
            echo '<script type="text/javascript">alert("Data telah masuk!");document.location="manage_simpanan.php";</script>';
        }
        else
        {
            echo '<script type="text/javascript">alert("Kolom tidak boleh ada yang kosong!");</script>';
        }
    }
?>
<div id="rounded_add">
    <script type="text/javascript">
        function numberFormat(nr)
        {
            //remove the existing
            var regex = /,/g;
            nr        = nr.replace(regex,'');

            //split it into 2 parts
            var x   = nr.split(',');
            var p1  = x[0];
            var p2  = x.length > 1 ? ',' + x[1] : '';
            //match group of 3 numbers (0-9) and add ',' between them
            regex   = /(\d+)(\d{3})/;
            while(regex.test(p1))
            {
                p1 = p1.replace(regex, '$1' + ',' + '$2');
            }
            //join the 2 parts and return the formatted number
            return p1 + p2;
        }
    </script>
    <form method="post" name="form1">
        <table id="add_simpan" class="add">
            <tr>
                <td>No Anggota</td>
            </tr>
            <tr>
                <td><input type="text" id="" name="" class="textbox"></td>
            </tr>
            <tr>
                <td>Nama</td>
            </tr>
            <tr>
                <td><input type="text" id="nama" name="nama" class="textbox_left"></td>
            </tr>
            <tr>
                <td>Simpanan Wajib</td>
            </tr>
            <tr>
                <td><input type="text" id="sim_wajib" name="sim_wajib" class="textbox"></td>
            </tr>
            <tr>
                <td>Simpanan Pokok</td>
            </tr>
            <tr>
                <td><input type="text" id="sim_pokok" name="sim_pokok" class="textbox"></td>
            </tr>
            <tr>
                <td>Simpanan Suka Rela</td>
            </tr>
            <tr>
                <td><input type="text" id="sim_sukarela" name="sim_sukarela" class="textbox"></td>
            </tr>
            <tr>
                <td>Simpanan Wajib Pinjam</td>
            </tr>
            <tr>
                <td><input type="text" id="sim_wpinjam" name="sim_wpinjam" class="textbox" onkeyup="this.value = numberFormat(this.value);"></td>
            </tr>
            <tr>
                <td>SHU</td>
            </tr>
            <tr>
                <td><input type="text" id="shu" name="shu" class="textbox" onkeyup="this.value = numberFormat(this.value);"></td>
            </tr>
            <tr>
                <td><input type="submit" value="Simpan" id="simpan" name="simpan" class="button blues"></td>
            </tr>
        </table>
    </form>
</div><!-- END OF ROUNDED_ADD -->
<?php include('footer.php'); ?>
4

3 に答える 3

0

テキストボックス内にアカウンティングスタイルの書式を設定する必要がある場合は、各テキストボックスの横に生の数値を含む非表示のフィールドを用意することをお勧めします。"nr = nr.replace(regex、'');"の直後にjs関数に数行を簡単に追加できます。削除された値を非表示フィールドにコピーするセクション。これを行うには、各テキストボックスに名前を付け、その名前をnumberFormat関数に渡して、正しい非表示の入力に保存する必要があります。次に、フォームが送信されたら、開いているテキストボックスではなく、非表示のフィールドから値を保存します。

または、[送信]ボタンで関数をトリガーして、すべてのテキストフィールドをスイープし、書式を削除してから、関数の一部としてフォームを送信します。

ちなみに、floatフィールドに10,000を10,000として挿入すると、10にトリミングされます。小数点としてコンマを使用していない限り(フランス語ではそうだと思いますか?)、誤ったデータを保存しています。

于 2012-06-15T07:49:26.363 に答える
0

ここでは、JavaScriptが原因ではないと思います。上に示したコードは、数字にコンマを挿入しているだけです。フィールドがfloatになるデータベースに挿入すると、値が自動的にfloatまたは整数に変換され、残りの値が削除されます。DBの挿入コードを投稿できれば、問題も簡単に解決できるかもしれません。

于 2012-06-15T06:31:30.607 に答える
0

ただのヒント。

通貨形式をデータベースに保存しないでください。必要に応じて数学処理を簡単に実行できるように、常に数値 (int、float) のみを保存してください。

通貨形式については、表示目的のみに使用してください。

于 2012-06-15T06:35:51.347 に答える