如何停止 PHP while 循环来重复和覆盖旧数据?
How can I stop PHP the while loop to repeat and cover old data?
我是PHP的新手,所以我希望while循环每次的结果都不一样,因为我从CSV文件中获取数据,所以不应该所有数据都相同。
This is my code
<div style="margin: 1%">
<?php
//include 'barcode128.php';
require 'vendor/autoload.php';
if (($csvfile = fopen($_FILES['file']['tmp_name'], "r")) !== FALSE) {
while (($csvdata = fgetcsv($csvfile, 1000, ",")) !== FALSE) {
$colcount = count($csvdata);
if($colcount!=5) {
$error = 'Column count incorrect';
} else {
/*$product = $csvdata[0];
$product_id = $csvdata[1];
$rate = $csvdata[2];
$description = $csvdata[3];
$image = $csvdata[4];
$imageData = base64_encode(file_get_contents($image));
echo '<div class="wrapper">';
echo '<div class="a"><img src="data:image;base64,'.$imageData.'" width="50"/>
<div><b>Item: '.$product.'</b></div>
<div><svg id="barcode"><script>JsBarcode("#barcode", "'.$product_id.'",{
format: "code128",width: 1,height: 35,fontOptions: "bold",marginRight:30});</script></svg></div><span><b>Price: '.$rate.' </b></span><div><span><b>Desc: </b>'.$description.'</span></div></p></span>
</div></div>';
*/
$imageData = base64_encode(file_get_contents($csvdata[4]));
echo '<div class="wrapper">';
echo '<div class="a"><img src="data:image;base64,'.$imageData.'" width="50"/>
<div><b>Item: '.$csvdata[0].'</b></div>
<div><svg id="barcode"><script>JsBarcode("#barcode", "'.$csvdata[1].'",{
format: "code128",width: 1,height: 35,fontOptions: "bold",marginRight:30,font:"arial"});</script></svg></div><span><b>Price: '.$csvdata[2].' </b></span><div><span><b>Desc: </b>'.$csvdata[3].'</span></div></p></span>
</div></div>';
}
}
fclose($csvfile);
}
?>
</div>
The result of the current code:
image-result
The CSV file:
image-csv
This is what I want the result:
enter image description here
那么,我怎样才能让结果每次都循环并中断它,然后从 CSV 文件循环下一个数据?谢谢
问题是您正在创建多个具有相同 ID 的 svg
元素。然后,您将在 JsBarcode()
调用中使用这个单一 ID。通过这样做,Javascript 将始终作用于具有此 id 的 first 元素。
为了解决这个问题,我们必须创建具有唯一 ID 的元素,然后在每个 Javascript 调用中使用这个唯一 ID。
因为您在注释掉的代码中有 $product_id = $csvdata[1];
,所以这个答案将假设 $csvdata[1]
每行都是唯一的。
在你的echo
里面,改变
<div><svg id="barcode"><script>JsBarcode("#barcode", "'.$csvdata[1].'",{
到
<div><svg id="barcode_'.$csvdata[1].'"><script>JsBarcode("#barcode_'.$csvdata[1].'", "'.$csvdata[1].'",{
我是PHP的新手,所以我希望while循环每次的结果都不一样,因为我从CSV文件中获取数据,所以不应该所有数据都相同。
This is my code
<div style="margin: 1%">
<?php
//include 'barcode128.php';
require 'vendor/autoload.php';
if (($csvfile = fopen($_FILES['file']['tmp_name'], "r")) !== FALSE) {
while (($csvdata = fgetcsv($csvfile, 1000, ",")) !== FALSE) {
$colcount = count($csvdata);
if($colcount!=5) {
$error = 'Column count incorrect';
} else {
/*$product = $csvdata[0];
$product_id = $csvdata[1];
$rate = $csvdata[2];
$description = $csvdata[3];
$image = $csvdata[4];
$imageData = base64_encode(file_get_contents($image));
echo '<div class="wrapper">';
echo '<div class="a"><img src="data:image;base64,'.$imageData.'" width="50"/>
<div><b>Item: '.$product.'</b></div>
<div><svg id="barcode"><script>JsBarcode("#barcode", "'.$product_id.'",{
format: "code128",width: 1,height: 35,fontOptions: "bold",marginRight:30});</script></svg></div><span><b>Price: '.$rate.' </b></span><div><span><b>Desc: </b>'.$description.'</span></div></p></span>
</div></div>';
*/
$imageData = base64_encode(file_get_contents($csvdata[4]));
echo '<div class="wrapper">';
echo '<div class="a"><img src="data:image;base64,'.$imageData.'" width="50"/>
<div><b>Item: '.$csvdata[0].'</b></div>
<div><svg id="barcode"><script>JsBarcode("#barcode", "'.$csvdata[1].'",{
format: "code128",width: 1,height: 35,fontOptions: "bold",marginRight:30,font:"arial"});</script></svg></div><span><b>Price: '.$csvdata[2].' </b></span><div><span><b>Desc: </b>'.$csvdata[3].'</span></div></p></span>
</div></div>';
}
}
fclose($csvfile);
}
?>
</div>
The result of the current code: image-result
The CSV file: image-csv
This is what I want the result: enter image description here
那么,我怎样才能让结果每次都循环并中断它,然后从 CSV 文件循环下一个数据?谢谢
问题是您正在创建多个具有相同 ID 的 svg
元素。然后,您将在 JsBarcode()
调用中使用这个单一 ID。通过这样做,Javascript 将始终作用于具有此 id 的 first 元素。
为了解决这个问题,我们必须创建具有唯一 ID 的元素,然后在每个 Javascript 调用中使用这个唯一 ID。
因为您在注释掉的代码中有 $product_id = $csvdata[1];
,所以这个答案将假设 $csvdata[1]
每行都是唯一的。
在你的echo
里面,改变
<div><svg id="barcode"><script>JsBarcode("#barcode", "'.$csvdata[1].'",{
到
<div><svg id="barcode_'.$csvdata[1].'"><script>JsBarcode("#barcode_'.$csvdata[1].'", "'.$csvdata[1].'",{