【问题标题】:How can I stop PHP the while loop to repeat and cover old data?如何停止 PHP 的 while 循环以重复和覆盖旧数据?
【发布时间】:2020-02-21 02:03:09
【问题描述】:

我是 PHP 新手,所以我希望 while 循环每次的结果都不同,因为我从 CSV 文件中获取数据,所以它不应该是所有数据都相同。

这是我的代码

<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>

当前代码的结果: image-result


CSV 文件: image-csv


这就是我想要的结果: enter image description here

那么,我怎样才能使结果可以每次循环并中断它,然后循环 CSV 文件中的下一个数据?谢谢

【问题讨论】:

  • 您好,您可以在显示条码的位置添加代码吗?这似乎是问题所在,而不是您当前的代码。
  • @Ice76 我从这个网站得到的代码:lindell.me/JsBarcode 谢谢。
  • 您是否在循环内完成了var_dump($csvdata); 以确认这些值实际上是您期望的值?
  • @PatrickQ 我把var_dump($csvdata); 放在fclose($csvfile); 之前,显示数组没问题,但在fclose($csvfile); 之后显示bool(false)。正常吗?
  • 您对fclose() 的调用在循环之外。您想检查循环 inside 的值,以便每次通过循环查看它们的值。将其放在您的 $imageData = base64_encode.... 或类似名称之前。

标签: php jquery csv while-loop barcode


【解决方案1】:

问题是您正在创建多个具有相同 ID 的 svg 元素。然后,您将在 JsBarcode() 呼叫中使用这个单一 ID。通过这样做,Javascript 将始终作用于具有此 id 的 first 元素。

为了解决这个问题,我们必须创建具有唯一 ID 的元素,然后在每个 Javascript 调用中使用这个唯一 ID。

由于您的注释代码中有$product_id = $csvdata[1];,因此此答案将假定$csvdata[1] 每行都是唯一的。

在你的echo里面,改变

&lt;div&gt;&lt;svg id="barcode"&gt;&lt;script&gt;JsBarcode("#barcode", "'.$csvdata[1].'",{

&lt;div&gt;&lt;svg id="barcode_'.$csvdata[1].'"&gt;&lt;script&gt;JsBarcode("#barcode_'.$csvdata[1].'", "'.$csvdata[1].'",{

【讨论】:

    猜你喜欢
    • 2022-08-16
    • 2017-11-12
    • 2013-09-27
    • 2010-09-26
    • 2013-09-11
    • 2023-01-10
    • 1970-01-01
    • 1970-01-01
    • 2013-05-05
    相关资源
    最近更新 更多