yallayalla Geschrieben 14. September 2005 Geschrieben 14. September 2005 Hallo! Ich habe ein kleines bis mittleres Problem zur Zeit. Folgendes Szenario: Mein Skript soll eine lokal beim User gespeicherte .csv Datei einlesen und weiterverarbeiten. Das weiterverarbeiten fopen() und so funktioniert, nur wie lese ich die Datei aus und in welcher Form wird der Pfadname am besten übergeben? $Dateizeiger = fopen($link, "r"); liefert Warning: fgetcsv(): supplied argument is not a valid stream resource in C:\Dokumente und Einstellungen\Administrator\Eigene Dateien\php.php on line 15 wobei in $link zur Zeit der Pfad zur Datei übergeben werden soll.... Es soll so aussehen: User wählt csv über ein Formular lokal auf seinem Rechner. csv wird übertragen/eingelesen und weiterverarbeitet Ich bin dankbar für jeden Tip. mfg yallayalla
Krain Geschrieben 14. September 2005 Geschrieben 14. September 2005 copy($KDATA,"./test.dat"); $file = fopen("./test.dat","rw"); while($line = fgets($file)) { # tu irgentwas } fclose($file); [/PHP] Kopiere erst die hochgeladene Datei auf deinen Server, öffne diese dann und lies sie Zeilenweise aus. Danach kannst du die hochgeladene Datei entweder mit unlink([dateiname]) löschen, oder du läßt sie einfach dort liegen. Der Code ist ungetestet, sollte aber das Prinzip der Vorgehensweise klar machen.
yallayalla Geschrieben 14. September 2005 Autor Geschrieben 14. September 2005 Hallo! Also so habe ich das bis jetzt mal gebastelt: ----Eingabemaske <form action="data.php" method="post" enctype="multipart/form-data"> <p> Select the .csv file from your local machine :<br> <input name="link" type="file" size="50" maxlength="100000" accept="text/*"> <input type="submit" name="verweis" value="GO" onClick="self.location.href='data.php'"> </p> </form> Weiter in data.php <?php $link = $HTTP_POST_VARS["link"]; copy($link,"./test.csv"); $Zeilen = 1; $Dateizeiger = fopen(test.csv, "r"); while(($Daten=fgetcsv($Dateizeiger, 1000, ","))!==FALSE) solte dann hinhauen, oder? mfg yallayalla
Monty82 Geschrieben 14. September 2005 Geschrieben 14. September 2005 $link = $HTTP_POST_VARS["link"]; copy($link,"./test.csv"); In der POST-Variable ist lediglich der Dateiname als String enthalten, der bringt Dir an dieser Stelle keinen Vorteil, da die eigentlich hochgeladene Datei physikalisch noch in einem temporären Verzeichnis auf dem Webserver liegt. Wo sie liegt, solltest Du über ein "print_r($_FILES)" herausfinden können. Dann kannst Du sie z.B. mit move_uploaded_file() zum Weiterverarbeiten verschieben, oder direkt von dort öffnen...
yallayalla Geschrieben 14. September 2005 Autor Geschrieben 14. September 2005 Hallo! Habe és soweit hinbekommen, nun ein anderes Prob. $Daten=fgetcsv($Dateizeiger, 1000, ","))!==FALSE) damit kann ich ja die csv zeilenweise auslesen.... Wie kann ich die erste Zeile NICHT auslesen, da ich die spaltenköpfe nicht brauche? Danke. mfg yallayalla
Monty82 Geschrieben 14. September 2005 Geschrieben 14. September 2005 z.B. so: if ($Dateizeiger) fgetcsv($Dateizeiger, 1000, ","); while ($Dateizeiger && ($Daten=fgetcsv($Dateizeiger, 1000, ","))!==FALSE) { ... } [/PHP] oder so: [PHP] $first = true; while ($Dateizeiger && ($Daten=fgetcsv($Dateizeiger, 1000, ","))!==FALSE) { if ($first) $first = false; else { ... } }
yallayalla Geschrieben 14. September 2005 Autor Geschrieben 14. September 2005 Hallo und danke soweit. Wie kann ich nun fortlaufende Variablen erzeugen: habe nen zaehler x=0, der mit jedem durchlauf erhöht wird und immer die id mit nummer x erzeugen soll id0 id1 id2 id3 etc? mfg yallayalla
Monty82 Geschrieben 14. September 2005 Geschrieben 14. September 2005 Ehrlich gesagt verstehe ich die Frage nicht...bitte nochmal präzisieren
yallayalla Geschrieben 14. September 2005 Autor Geschrieben 14. September 2005 Hallo! Also so: Ich möchte in einer schleife variablen erzeugen, die durchnummeriert sind. In der Schleife erhöht sich mit jedem Durchlauf der zaehler x um 1, Startwert 0. 1. Durchlauf: x=0 , erste Variable --> $id_0 2. Durchlauf: x=1 , zweite Variable --> $id_1 Also quasi soll mit jedem Durchlauf die Variable "id" erzeugt und durchgezählt werden, sodass ich nach 10 Durchläufen 10 Variablen habe: $id_0 $id_1 $id_2 $id_3 ... $id_9 mfg yallayalla
Monty82 Geschrieben 14. September 2005 Geschrieben 14. September 2005 Welchen Sinn hat das Ganze denn? Warum verwendest Du nicht einfach ein Array? $contArr = array(); for ($i = 0; $i<10; $i++) { $contArr[$i] = "Inhalt Nr. ".$i; } Zugreifen kannst Du dann nachher so: echo "Array-Content Index 5: ".$contArr[5]; oder so: foreach ($contArr as $key=>$val) { echo "Array-Content Index ".$key.": ".$val; }
yallayalla Geschrieben 14. September 2005 Autor Geschrieben 14. September 2005 Hallo! Funzt nicht! hmm... bei jedem Durchlauf soll an stelle i der Wert von $Daten[1] eingefügt werden... mfg yallayalla
Monty82 Geschrieben 14. September 2005 Geschrieben 14. September 2005 "$contArr[$i] = $Daten[1]" funktioniert nicht? Poste mal bitte etwas mehr Deines Codes...
yallayalla Geschrieben 14. September 2005 Autor Geschrieben 14. September 2005 <?php $Zeilen = 1; $Dateizeiger = fopen("classlist-MAT113D.csv", "r"); while(($Daten=fgetcsv($Dateizeiger, 1000, ","))!==FALSE) { $AnzahlDerFelder = count($Daten); $x=0; $contArr = array(); for($i=0; $i<1; $i++) { echo $Daten[1]; $contArr[$x] = $Daten[1]; $x=$x+1; echo "</td>"; echo "</tr>"; "<br>"; } echo"</p>"; } fclose($Dateizeiger); echo "Array-Content Index 5: ".$contArr[3]; Die Ausgabe liefert dann: Notice: Undefined offset: 3 in phpA4.tmp on line 47
Monty82 Geschrieben 14. September 2005 Geschrieben 14. September 2005 Du musst das Array und die Zählvariable ausserhalb der While-Schleife initialisieren ($x = 0), die FOR-Schleife wird hier nicht benötigt, da Du manuell hochzählst ($x = $x +1)... $Zeilen = 1; $x = 0; $contArr = array(); $Dateizeiger = fopen("classlist-MAT113D.csv", "r"); while(($Daten=fgetcsv($Dateizeiger, 1000, ","))!==FALSE) { $AnzahlDerFelder = count($Daten); echo $Daten[1]; $contArr[$x] = $Daten[1]; $x++; // kürzer und schöner $x=$x+1; } fclose($Dateizeiger); echo "Array-Content Index 3: ".$contArr[3];[/PHP]
yallayalla Geschrieben 14. September 2005 Autor Geschrieben 14. September 2005 Hallo! Aua, da haette ich ja mal selber drauf kommen koennen! Ich danke vielmals! mfg yallayalla
TheyCallMeGeek Geschrieben 14. September 2005 Geschrieben 14. September 2005 file() und explode() hätte ich benutzt... gibt einem das direkt als Array. Da aber shcon gelöst -> foobar.
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden