Datei einlesen mit php und mysql anbindung
slaYer
- php
Hallo ich versuche seit längerer Zeit den Inhalt einer Datei mit PHP in eine Datenbak einzufügen...das will er aber nich so richtig machen!
<td>Schülerdaten:</td>
<td><input name="datei" type="file" value="" /></td>
</tr>
<tr>
<td></td>
<td><br /><input name="datbe" type="submit" value="Bestätigen" /></td>
</tr>
<tr>
<td colspan="2"><br /><br /><center><h3>Schüler manuell hinzufügen</h3></center></td>
</tr>
<?php
if((!isset($_POST["datbe"])))
{
}
else
{
$handle = fopen("$datei", 'rb');
while(($Daten = fgetcsv($handle, "", ";") != FALSE))
{
$AnzahlDerFelder = count($Daten);
if(count($Daten)>=0)
{
$imp_records =
array(
'nachname'=>$Daten[0],
'vorname'=>$Daten[1],
'benutzername'=>$Daten[2],
'kennwort'=>$Daten[3],
'strasse'=>$Daten[4],
'plz'=>$Daten[5],
'ort'=>$Daten[6],
'telefon'=>$Daten[7],
'erziehtelefon'=>$Daten[8],
'foto'=>$Daten[9],
'berufsbezeichnung'=>$Daten[10],
'klassenid'=>$Daten[11]);
$sql ="INSERT INTO schueler ( benutzername, kennwort, vorname, nachname, strasse, plz, ort, foto, berufsbezeichnung, telefon, erziehtelefon, klasse_id)
values
('$Daten[0]',
'$Daten[1]',
'$Daten[2]',
'$Daten[3]',
'$Daten[4]',
'$Daten[5]',
'$Daten[6]',
'$Daten[7]',
'$Daten[8]',
'$Daten[9]',
'$Daten[10]',
'$Daten[11]')";
}
$ergebnis1=mysql_query($sql, $db);
fclose($handle);
}
}
Folgende Fehler werden mir hierbei ausgegeben:
Warning: fopen(muh.txt) [function.fopen]: failed to open stream: No such file or directory in C:\Programme\xampp\htdocs\sql\sql2\verw\klasse_hinz_schue_einf.php on line 44
Warning: fgetcsv() expects parameter 1 to be resource, boolean given in C:\Programme\xampp\htdocs\sql\sql2\verw\klasse_hinz_schue_einf.php on line 45
das betrifft also diesen beiden Zeilen:
$handle = fopen("$datei", 'rb');
while(($Daten = fgetcsv($handle, "", ";") != FALSE))
Ich möchte diese Datei einlesen....wenn es geht will ich auch noch mehrere Zeilen einlesen ...hab allerdings noch keine Vorstellung wie ich das hinbekommen soll :(
Ich hoffe auf eure Hilfe!
mfg slaYer
Ich würde dir empfehlen eine Datenbank anstatt eine txt-Datei zu nehmen. Damit umgehst du auch das Problem das nie mehrere Gleichzeitig in die Datei schreiben können.
Nebenbei hat MySQL ganz bequeme Möglichkeiten zum Einfügen, Ändern und Löschen.
Grüße, Matze
Ich würde dir empfehlen eine Datenbank anstatt eine txt-Datei zu nehmen. Damit umgehst du auch das Problem das nie mehrere Gleichzeitig in die Datei schreiben können.
Nebenbei hat MySQL ganz bequeme Möglichkeiten zum Einfügen, Ändern und Löschen.
Grüße, Matze
Das Problem is das die verwendung einer txt-datei leider vorgeschrieben ist :/ Ausserdem soll das auslesen nur zum einfügen von datensätzen dienen, mehr nicht!
gruß slaYer
Mittlerweile habe ich das ganze auf einen Fehler reduzieren können!
Warning: fgetcsv(): 5 is not a valid stream resource in C:\Programme\xampp\htdocs\sql\sql2\verw\klasse_hinz_schue_einf.php on line 45
Hoffe mir kann jemand dabei helfen!
hi,
Mittlerweile habe ich das ganze auf einen Fehler reduzieren können!
Und wie sah diese "Reduzierung" aus?
Warning: fgetcsv(): 5 is not a valid stream resource in C:\Programme\xampp\htdocs\sql\sql2\verw\klasse_hinz_schue_einf.php on line 45
Du versuchst, mit fgetcsv zu lesen, ohne einen gültigen Dateihandle vorliegen zu haben.
gruß,
wahsaga
an der endung der datei liegt es aber nicht, falls du das meinst!
bin imo echt mit meinem latein am ende :/ haste icq oder sowas das du mir beistehen könntest?
mfg slaYer
Hallo!
an der endung der datei liegt es aber nicht, falls du das meinst!
Der Dateihandle hat nix mit der Extension zu tun. Den Dateihandle bekommst du mit fopen. Wie öffnest du die CSV Datei?
mfg
frafu
Hallo!
Der Dateihandle hat nix mit der Extension zu tun. Den Dateihandle bekommst du mit fopen. Wie öffnest du die CSV Datei?
Habs mir jetzt erst angesehen.
$handle = fopen("$datei", 'rb');
Die Hochkommas in denen $datei steht, kannst du dir übrigens sparen.
Was steht in $datei?
Hänge danach doch mal folgendes nach dem fopen an:
if(false===$handle)
echo "Kann Datei $datei nicht öffnen";
else
echo "$datei erfolgreich geöffnet";
mfg
frafu
Hallo!
an der endung der datei liegt es aber nicht, falls du das meinst!
Der Dateihandle hat nix mit der Extension zu tun. Den Dateihandle bekommst du mit fopen. Wie öffnest du die CSV Datei?
mfg
frafu
Also die Datei öffne ich über
<td>Schülerdaten:</td>
<td><input name="datei" type="file" value="" /></td>
daher hole ich mir den Dateinamen den ich dann später aufrufe!
Das geht doch so oder?!
Gruß slaYer
hi,
Also die Datei öffne ich über
<td>Schülerdaten:</td>
<td><input name="datei" type="file" value="" /></td>
Damit führst du einen Dateiupload auf den Server durch.
Ist es das, was du willst?
daher hole ich mir den Dateinamen den ich dann später aufrufe!
Das geht doch so oder?!
Jein.
Du solltest - falls du wirklich einen Dateiupload machen willst - die Datei zunächst mal aus dem temporären Upload-Verzeichnis an ihren Zielort schieben.
http://www.php.net/manual/de/features.file-upload.php gäbe weitere Auskunft - aber ich habe echte Zweifel, ob es das ist, was du willst.
gruß,
wahsaga
Also bei der Sache die ich mache soll es so sein das eine Datei via USB-Stick in den Ordner dat geschoben werden soll die von dem ordner aus will ich die Datei dann auswählen können und dann den Datensatz in die DB einfügen lassen! Das ist es was ich will! Es ist so das ich in meinem
Fall Server und User bin, da ich das ja mit xampp emuliere, später soll es aber schon so sein, das ich mit dem clienten auf die seiten die auf dem server liegen zugreife! hoffe das ich nicht zu verwirrend! Gruß Hendrik
Also die Datei öffne ich über
<td>Schülerdaten:</td>
<td><input name="datei" type="file" value="" /></td>daher hole ich mir den Dateinamen den ich dann später aufrufe!
Das geht doch so oder?!
Gruß slaYer
Den Namen kriegst du mit:
$datei[name] vom Inputfeld
Grüße, Matze
Also bei der Sache die ich mache soll es so sein das
eine Datei via USB-Stick in den Ordner dat geschoben werden soll
move_uploaded_file($bild,"Ordner und Dateiname"); # $bild kommt aus einem Input type file
die von dem ordner aus will ich die Datei dann auswählen
können und dann den Datensatz in die DB einfügen lassen!
Blöde Frage aber warum nimmst du dafür nicht phpmyadmin?
später soll es aber schon so sein, das ich mit dem clienten
auf die seiten die auf dem server liegen zugreife!
$datei = fopen("datei.txt","r+"); # öffnen
$datei = fgets($datei); # einlesen
$dateineu = "neuer Inhalt" # Inhalt ändern
rewind($datei); # zum Dateianfang
fwrite($datei, $dateineu); # schreiben
fclose($datei); #schließen
Klingt simpel aber ich weiß auch nicht genau was du machen willst.
Grüße, Matze
Hello,
damit sich hier nichts einschleicht:
$datei = fopen("datei.txt","rb+"); # öffnen
$ok = flock($datei,LOCK_EX); # Datei _exclusiv_ sperren
$daten = fread($datei,$filesize); # einlesen
$daten = aendern($daten); # Inhalt ändern
rewind($datei); # zum Dateianfang
fwrite($datei, $daten); # schreiben
ftruncate($datei,strlen($daten)); # Länge der Datei anpassen
fclose($datei); # schließen und damit entsperren
Der Lese- und der Schreibvorgang müssen durch eine Sperre 'gebunden' werden.
http://de2.php.net/manual/de/function.flock.php
Nach dem Schreiben des Inhaltes muss die Länge der Datei wieder angepasst werden, wenn der neue Inhalt kürzer ist, als der alte.
Es ist besser, die Öffnung im Modus 'rb+' durchzuführen.
Außerdem sollte man auch die Ergenisse von rewind() oder fseek(), fwrite(), ftruncate() abfragen und auswerten.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Hallo
[...]
$handle = fopen("$datei", 'rb');
Warum Anführungszeichen um die Variable. Welchen Sinn siehst Du darin?
while(($Daten = fgetcsv($handle, "", ";") != FALSE))
Sehr schön, sehr falsch. Du überprüfst überhaupt nicht, ob Dein fopen() erfolgreich war. Dass dies nicht der Fall ist, sagt Dir Deine Fehlermeldung:
Warning: fopen(muh.txt) [function.fopen]: failed to open stream: No such file or directory in C:\Programme\xampp\htdocs\sql\sql2\verw\klasse_hinz_schue_einf.php on line 44
Daraus resultiert der Folgefehler:
Warning: fgetcsv() expects parameter 1 to be resource, boolean given in C:\Programme\xampp\htdocs\sql\sql2\verw\klasse_hinz_schue_einf.php on line 45
Öffne die Datei
Wenn das nicht funktioniert hat
Gebe eine entsprechende Fehlermeldung aus
Beende die Verarbeitung sinnvoll
Ende Wenn
Solange das Einlesen eines Datensates aus der Datei funktioniert
Verarbeite den Datensatz
Ende Solange
Freundliche Grüße
Vinzenz
$handle = fopen("dat/$datei", "r");
while(($Daten = fgetcsv($handle, "", ";") != FALSE))
{
$AnzahlDerFelder = count($Daten);
if(count($Daten)>=0)
So sieht das im moment aus und nun gibt er nur noch den fehler aus
Warning: fgetcsv(): 5 is not a valid stream resource in C:\Programme\xampp\htdocs\sql\sql2\verw\klasse_hinz_schue_einf.php on line 45
Damit is die 2. Zeile gemeint!
Ich hoffe auf eure Hilfe!
mfg slaYer
Hallo
$handle = fopen("dat/$datei", "r");
Du hast noch nichts verbessert.
Bitte überprüfe jetzt, ob fopen() erfolgreich war.
Wenn nein
Gebe eine ordentliche Fehlermeldung aus
Beende diesen Teil der Verarbeitung auf nette Weise
Ende Wenn
Jetzt kannst Du
Solange Du Datensätze aus der Datei lesen kannst ...
while(($Daten = fgetcsv($handle, "", ";") != FALSE))
{
... diese verarbeiten
$AnzahlDerFelder = count($Daten);
if(count($Daten)>=0)
Die folgende Warning ist kein Wunder, aber das hatten wahsaga und ich Dir bereits gesagt:
Warning: fgetcsv(): 5 is not a valid stream resource in C:\Programme\xampp\htdocs\sql\sql2\verw\klasse_hinz_schue_einf.php on line 45
Freundliche Grüße
Vinzenz
Hello,
while(($Daten = fgetcsv($handle, "", ";") != FALSE))
while(($Daten = fgetcsv($handle, "", ";") !== FALSE))
Nimm lieber den "nichjt identisch"-Operator.
Schließlich könnte in einer CSV-Datei auch mal eine Leerzeile enthalten sein.
Du solltest außerdem das vollständige Satzformat (Anzahl der Felder) überprüfen, bevor Du den Inhalt der Zeile verwendest.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom