uepselon: Unerklärlicher Fehler mit Arrays und Variablen Variablen

Hi,

also ich bin schon am Rande der Verzweiflung, ich hab da einen Fehler den ich mir selbst logisch nicht erklären kann.

Und zwar hab ich eine *.csv Datei (Aus Excel heraus gespeichert, eigentlich behandelbar wie eine normale txt Datei)
die folgende Daten enthält:

prodno;text;price;lager
123;artikel1;100;3
124;artikel2;200;5
125;artikel3;300;8

Mit einer eigene Funktion will ich nun über die Prodno globale Variablen für Text, Preis, und Lager setzen, sprich wenn ein User
die Funktion csv_productShow(123) aufruft, soll nun in der Variable
$prodno = 123, $text = artikel1, $price = 100 und $lager = 3 sein.

Das Funktioniert eigentlich ganz gut, nur in $lager steht nichts drin. Mache ich nun eine Spalte im csv file mehr, sprich hinter lager z.B. dummy, steht plötzlich der Wert drin.
Da hab ich mir gedacht, ich hab bestimmt bei der for Schleife was falsch gemacht, dem war aber nicht so.
Ich hab schon alles mögliche ausprobiert aber das geht nicht.

Hier ist die besagte Funktion:

function csv_ProductShow($pno)
         {
         clearstatcache();
         $fp = fopen($GLOBALS["csvfile"],"r");
         $str = fread($fp,filesize($GLOBALS["csvfile"]));
         fclose($fp);
         $lines = explode("\n",$str);
         for($i=0;$i<count($lines);$i++)
            {
            $buf = explode(";",$lines[$i]);

if ($i == 0) //Wenn erste Zeile Variablen namen setzen
               {
               for($i2=0;$i2<count($buf);$i2++)
                  {
                  global $$buf[$i2];
                  $varname[$i2] = $buf[$i2];
                  }
               }

for($i2=0;$i2<count($buf);$i2++)// Variablenname den Wert zuweisen
               {
               if ($buf[0] == $pno) //Natürlich nur bei der gewünschten Produktnummer
                   {
                   $$varname[$i2] = $buf[$i2];
                   }
               }
            }
          }

Lustig ist auch, das jeweils im $buf Array, der Name lager und nacher auch sein Wert vorkommen, aber halt nicht als globale Variable gesetzt werden. Bei allen anderen Variablenname und Werten gehts aber?!?

Gruß

ueps

  1. Hallo,

    Und zwar hab ich eine *.csv Datei (Aus Excel heraus gespeichert, eigentlich behandelbar wie eine normale txt Datei)
    die folgende Daten enthält:

    prodno;text;price;lager
    123;artikel1;100;3
    124;artikel2;200;5
    125;artikel3;300;8

    ...

    Das Funktioniert eigentlich ganz gut, nur in $lager steht nichts drin. Mache ich nun eine Spalte im csv file mehr, sprich hinter lager z.B. dummy, steht plötzlich der Wert drin.

    Versuchs doch  mal mit einem abschliessenden ";". Evtl hilfts.
      prodno;text;price;lager;
      123;artikel1;100;3;
      124;artikel2;200;5;
      125;artikel3;300;8;

    Gruss, Mel

  2. Huhu Y

    evtl. steht da am Ende jeder Zeile Deiner csv.datei

    \r\n und nicht nur \n

    also z.B.

    prodno;text;price;lager\r\n

    wenn du jetzt nach \n und dann nach ; explodest
    erhältst Du ein Array mit 'prodno','text','price'
    und 'lager\r'
    dann klappt es natürlich nicht so wie von Dir beabsichtigt.

    Strippe evtl. die \r zuvor raus.

    Viele Grüße

    lulu (* sorry for mein schreckliches denglisch *)

    1. Hi,

      evtl. steht da am Ende jeder Zeile Deiner csv.datei

      \r\n und nicht nur \n

      jepp, genau daran hats gelegen.

      Danke,

      ueps

  3. Hi,

    versuchs mal mit fgetcsv, da ersparst Du Dir einiges.

    http://www.php.net/manual/en/function.fgetcsv.php

    ich hoffe das hilft Dir so weiter.
    oesi

    1. Hi,

      Danke das werd ich auch mal ausprobieren.

      Gruß

      ueps