HTML与PHP-<脚本>-部分代码突然结束-bug
HTML with PHP - <script>-section code suddenly ends - bug?
我在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次运行中,在<script>
-部分中,代码突然停止。HTML文件正确结束,所有标记都关闭。
这看起来如下(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
}
?>
通过全局变量访问的分隔符是;
。它在一个名为functions.php
的文件中定义,该文件通过require_once("functions.php);
包含在index.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、…(按其产品线(钢、铜、…(分组,然后按第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:''examplep''php''php.exe index.php|Out File test.html"中生成了一个html文件,该文件没有上述问题。所以有一个变通办法。我将进一步深入了解IntelliJ IDEA。
与此同时,我还删除了<p>...</p>
标签,但这些标签并没有解决问题。
你想要一条鱼还是学会钓鱼?
A.爱因斯坦
好吧,这也许是一个简单的答案,但却是真的您无法在合理的时间内维护/调试这样一个意大利面条式的代码。看看你在这个问题上放松的时间。即使有赏金,你也很少有机会解决它,因为有才华的人不会花时间在这样的代码上。
您的代码是干净的。没有批评者。但是您的方法不是。在10年的编码生涯中,我经常遇到这样的情况。工时损失,能源消耗。把它全部弄清楚,简单化,综合化,失败就会出现。你的代码会更强。
这是我真诚的回答。
for ($i = 0; $i < count($lineData)+1; $i++)
应该给你一个"未定义偏移"的通知,试着用代替它
for ($i = 0; $i < count($lineData); $i++)
另外,我认为你必须确定
$lineData[$index-1] = $line[0];
生成一个数组,该数组包含从0到count的所有索引($lineData(-1
尝试在脚本开始时设置error_reporting(E_ALL);
和ini_set('display_errors', 1);
。可能是php抛出了一个错误而没有显示出来。使用这些命令,您将激活错误报告并显示这些错误。
也许可以尝试制作这样的东西:
<?php
$body = 'your javasrcipr text';
for ($i = 0; $i<count($lineData); $i++) {
print_r($body);
}?>
并检查它对您的网站的影响
- 从桌面读取python文件时高亮显示代码
- jQuery UI自动完成突然停止工作
- 如何将函数包装在函数中以避免代码重复
- 通过单击表单中的按钮,在代码生成中使用javascript生成字母数字代码
- 货币代码为欧元-金额的格式不应包含小数
- Regex代码只允许一个空格
- 如何将屏幕分辨率乘以 80%,然后在代码中使用
- 从var向代码隐藏函数传递值
- 如何动态插入jquery代码
- 如何在php变量中嵌入JQuery代码
- 代码不会验证
- 如何从rails中的代码中删除新行( )
- Angularjs代码未在匿名函数中运行
- 如何做到这一点,使代码在不传递条件后执行函数
- 如何在读取XLS/XLSX本地文件时,使用IE的javascript代码启用未标记为安全的ActiveX控件
- 面向对象的Javascript代码在IE7中不起作用
- 将 jQuery 代码添加到 Index.aspx 页面
- 为什么忽略了eval()代码中的语法错误
- 突然间,我的BackboneJS收藏不见了;当代码被缩小时,无法在Chrome中工作
- HTML与PHP-<脚本>-部分代码突然结束-bug