Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

PHP - csv einlesen von lokalem Laufwerk

Empfohlene Antworten

Veröffentlicht

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


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.

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

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

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

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 {
...
}
}

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

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

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;

}

Hallo!

Funzt nicht!

hmm...

bei jedem Durchlauf soll an stelle i der Wert von $Daten[1] eingefügt werden...

mfg

yallayalla

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

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]

Hallo!

Aua, da haette ich ja mal selber drauf kommen koennen!

Ich danke vielmals!

mfg

yallayalla

file() und explode() hätte ich benutzt... gibt einem das direkt als Array. Da aber shcon gelöst -> foobar.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.