HTML与PHP - <脚本>段代码突然结束 - 错误?
我在php-html混合代码中遇到了一个非常奇怪的行为。我使用的是 XAMPP 3.2.1 (PHP 5.2.0) 和 IntelliJ IDEA 14.1。
这就是我的代码的样子(为了可读性而清理,如果你需要更多,请告诉我):
<?php
for($i=0; $i<count($stringArray); $i++) {
$pieces = explode($GLOBALS['delimiter'], $lineData[$i]);
?>
<div>
...
<input id="<?php echo $pieces[$someValidNumber]; ?>_identifier" ...>
...
<script>
// some javascript with <?php echo $variable; ?>
</script>
...
</div>
<?php } ?>
当该循环运行 n 次时会发生什么,对于 n-1,一切看起来都很好,但是在第 n 次运行中,在 -section 中,代码突然停止。HTML 文件以所有标记结束而正确结束。<script>
如下所示 (n=4):
$('input[id$="MegaSteel_tons"]').val(output2);
$('#MegaSteel_cart').prop(
或 (n=2):
$('input[id$="BarZwo_meters"]').val(output2);
$('#BarZwo_cart').prop('type', 'button').change
请注意,随着 n 的增加,停止不会以确定性方式在以后发生。这意味着当我尝试n = 3时,以下是结果:
$('input[id$="Bar_meters"]').val(output2);
$('#Bar_cart').prop('type', 'button').change();
var price
我正处于知识的尽头。这是什么原因造成的?
根据要求更多代码:
$lineData = array();
$f = fopen('products.csv', 'r');
while (($line = fgetcsv($f)) !== false) {
if (strpos($line[0], $productLine) !== false) {
// the above produces single value arrays, thus we access them with [0]
$pieces = explode($GLOBALS['delimiter'], $line[0]);
$index = (int)$pieces[2];
// todo: input must check that index is not already taken
$lineData[$index-1] = $line[0];
}
}
fclose($f);
ksort($lineData);
for ($i = 0; $i < count($lineData); $i++) {
$pieces = explode($GLOBALS['delimiter'], $lineData[$i]);
$prod_name = $pieces[0];
$prod_lineNumber = $pieces[2];
$prod_quantity = $pieces[3];
$prod_tons = $pieces[4];
$prod_meters = $pieces[5];
$prod_pricePerTon = $pieces[6];
?>
<p>
<!-- User-Input-->
<b> <?php echo $pieces[0]; ?></b> - <?php echo $prod_lineNumber; ?><br/>
Units: <input id="<?php echo $prod_name; ?>_quantity" type="text">
Tons: <input id="<?php echo $prod_name; ?>_tons" type="text">
Meters: <input id="<?php echo $prod_name; ?>_meters" type="text">
Price per ton: <?php echo $prod_pricePerTon; ?>
Calculated price: <span id="<?php echo $prod_name; ?>_price">0</span>
<input id="<?php echo $prod_name; ?>_cart"
type="hidden" value="Add to shopping cart!"
onclick="addToCart('<?php echo $prod_name; ?>')">
<!-- Auto-Update-->
<script>
// first field - quantity
$('input[id$="<?php echo $prod_name; ?>_quantity"]').on('keyup', function () {
var value = parseFloat($(this).val());
var output1 = value * <?php echo $prod_tons . " / " . $prod_quantity; ?>;
var output2 = value * <?php echo $prod_meters . " / " . $prod_quantity; ?>;
$('input[id$="<?php echo $prod_name; ?>_tons"]').val(output1);
$('input[id$="<?php echo $prod_name; ?>_meters"]').val(output2);
$('#<?php echo $prod_name; ?>_cart').prop('type', 'button').change();
var price = output1 * <?php echo $prod_pricePerTon; ?>;
$('#<?php echo $prod_name; ?>_price').text(price);
});
// second field - tons
$('input[id$="<?php echo $pieces[0]; ?>_tons"]').on('keyup', function () {
var value = parseFloat($(this).val());
var output1 = value * <?php echo $prod_quantity . " / " . $prod_tons; ?>;
var output2 = value * <?php echo $prod_meters . " / " . $prod_tons; ?>;
$('input[id$="<?php echo $prod_name; ?>_quantity"]').val(output1);
$('input[id$="<?php echo $prod_name; ?>_meters"]').val(output2);
$('#<?php echo $prod_name; ?>_cart').prop('type', 'button').change();
var price = value * <?php echo $prod_pricePerTon; ?>;
$('#<?php echo $prod_name; ?>_price').text(price);
});
// third field - meters
$('input[id$="<?php echo $pieces[0]; ?>_meters"]').on('keyup', function () {
var value = parseFloat($(this).val());
var output1 = value * <?php echo $prod_quantity . " / " . $prod_meters; ?>;
var output2 = value * <?php echo $prod_tons . " / " . $prod_meters; ?>;
$('input[id$="<?php echo $prod_name; ?>_quantity"]').val(output1);
$('input[id$="<?php echo $prod_name; ?>_tons"]').val(output2);
$('#<?php echo $prod_name; ?>_cart').prop('type', 'button').change();
var price = output2 * <?php echo $prod_pricePerTon; ?>;
$('#<?php echo $prod_name; ?>_price').text(price);
});
</script>
</p>
<?php
}
?>
通过全局变量访问的分隔符是 。它定义在一个名为 的文件中,该文件包含在索引.php(上面的代码)中。;
functions.php
require_once("functions.php);
下面显示了正在解析的文本文件(请注意,这不是最佳解决方案,而是迈向完整数据库的第一步)。
Foo;Steel;1;20;30;40;4500.3
Bar;Copper;2;20;30;40;4500.3
BarFoo;Steel;3;20;30;40;4500.3
FooBar;Steel;2;20;30;40;4500.3
FooBear;Steel;4;20;30;40;4500.3
请注意,产品(Foo、Bar、...)按其产品线(Steel、Copper、...)分组,然后按列 3 中的数字排序(;分隔行中的第三个值)。
访问钢铁集团将显示以下内容:echo $lineData[$i]
Foo;Steel;1;20;30;40;4500.3
FooBar;Steel;2;20;30;40;4500.3
BarFoo;Steel;3;20;30;40;4500.3
这与预期完全相同,与正在分析的文件中完全相同。
更新:更改为另一个 php 版本(5.4、5.6)不能解决问题。
更新:在Powershell中“C:\xampp\php\php.exe索引.php |Out-File test.html“生成了一个 html 文件,该文件没有上述问题。所以有一个解决方法。我将进一步消化IntelliJ IDEA。
与此同时,我还删除了没有解决问题的标签。<p>...</p>