Как я могу остановить PHP цикл while для повторения и покрытия старых данных? - PullRequest
0 голосов
/ 24 октября 2019

Я новичок в 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


Это то, что я хочу, чтобы результат: введите описание изображения здесь

Итак, как я могу сделать так, чтобы результат мог зацикливаться каждый раз и прерывать его, а затем зацикливать следующие данные из файла CSV? Спасибо

1 Ответ

2 голосов
/ 24 октября 2019

Проблема в том, что вы создаете несколько svg элементов с одинаковым идентификатором. Затем вы используете этот единственный идентификатор в своем вызове JsBarcode(). Делая это, Javascript всегда будет действовать на элемент first с этим идентификатором.

Чтобы исправить это, мы должны создать элементы с уникальными идентификаторами, а затем использовать этот уникальный идентификатор в каждом Javascriptcall.

Поскольку в вашем закомментированном коде $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].'",{

...