Zum Inhalt springen

PHP - csv einlesen von lokalem Laufwerk


Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen


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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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;

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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]

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...