0

フォーム内に価格と数量を表示する php ファイルがあります。

4

3 に答える 3

1

id結果の HTML に、同じ要素が複数含まれていてはなりません。1つの方法はこれです:

$counter = 0;
while($queryresult = mysql_fetch_assoc($query)){    
    echo '<form method ="post" action="price.php">';
    echo '<input type="text" name ="quant" id="quant'.$counter.'" onblur="functionprice('.$counter.')" />';
    echo '<input type="text" name ="price" id="price'.$counter.'" onblur="functionprice('.$counter.')" />';
    echo '<input type="text" name="unitprice" id="unitprice'.$counter.'" readonly="true" />';
    echo "</form>";
    $counter++;
}//while

そして、次のように、変更したい行番号を指定して、この更新された JavaScript 関数を呼び出します。functionprice(2);

<script type="text/javascript">
function functionprice(counter)
{
    var price = parseFloat(document.getElementById("quant"+counter).value);
    var quantity = parseFloat(document.getElementById("price"+counter).value);

    if (!(price == Number.NaN && quantity == Number.NaN))
        document.getElementById("unitprice"+counter).value = Number(price/quantity).toFixed(2);
}
</script>
于 2013-04-16T22:05:21.433 に答える
0

まず第一に、W3C に準拠していない複数の要素で同じ ID を持つことは悪いことです。おそらくこれが、他のフォーム要素が更新されない理由です。同様に番号を追加して、JavaScriptコードをより適切に制御できるようid"quantity_1"することもできます"quantity_2"

また、それを database の単一の行として扱いたい場合は、上記のコメントに従って使用します。つまり、 name = 'price[]' です。

于 2013-04-16T22:06:17.720 に答える
0

まず、<form>while ループの外に設定します。id="" をスキップし、代わりに class="" を使用します。要素の ID は一意でなければならないからです。

<?php
echo '<form method ="post" action="price.php">';

while($queryresult = mysql_fetch_assoc($query)){    
    $id = $queryresult['id']; //assumption is that id is an autoincremental integer
    echo '<input type="text" name ="quant[' . $id . ']" class="quant" onblur="functionprice(' . $id . ')" />'; //Make quant-array (dynamically)
    echo '<input type="text" name ="price[' . $id . ']" class="price" onblur="functionprice(' . $id . ')" />'; //Make price-array (dynamically)
    echo '<input type="text" name="unitprice[' . $id . ']" id="unitprice" readonly="true" />';
}//while

echo "</form>"

?>//close php tag
?>

次に、このようなことを行います(概念を理解していただければ幸いです)

<script type="text/javascript">
function functionprice(id)
{
    var price = parseFloat(document.getElementById ("quant[" + id + "]").value); //Get value of element in quant-array
    var quantity = parseFloat(document.getElementById ("price[" + id + "]").value); //Get value of element in price-array

    if (!(price == Number.NaN && quantity == Number.NaN))
        document.getElementById ("unitprice[" + id + "]").value = Number(price/quantity).toFixed(2);
}
</script>

このようなコード (上記) を作成すると、サーバー側で値を取得するときに (非常に簡単に) 構築された配列を使用できます。これの唯一の欠点は、私が見ているように、大きな結果セット(100.000行を超えるなど)がある場合、配列がサーバーのメモリを「食い尽くす」可能性があることです。

例: 次のように while ループの後に送信ボタンを配置した場合<form>: ';

while($queryresult = mysql_fetch_assoc($query)){    
    $id = $queryresult['id']; //assumption is that id is an autoincremental integer
    echo '<input type="text" name ="quant[' . $id . ']" class="quant" onblur="functionprice(' . $id . ')" />'; //Make quant-array (dynamically)
    echo '<input type="text" name ="price[' . $id . ']" class="price" onblur="functionprice(' . $id . ')" />'; //Make price-array (dynamically)
    echo '<input type="text" name="unitprice[' . $id . ']" id="unitprice" readonly="true" />';
}//while

echo "<input type=\"submit\" value=\"Skicka\" />";
echo "</form>"

?>//close php tag
?>

次に、price.php(送信後)で、次のようなことを行って値を取得します:(もちろん検証も行う必要があるため、必要な期待値/配列を取得できます)

<?php
$quantArr = $_POST['quant'];
$priceArr = $_POST['price'];

//echo out a certain row from db (where id = 27)
echo 'quantity: ' . $quantArr[27];
echo 'price: ' . $pricearr[27];
?>
于 2013-04-16T22:13:20.193 に答える