Textdatei einlesen - Fehler

mtk-flo

Erfahrenes Mitglied
Warning: feof(): supplied argument is not a valid stream resource in...on line 10


Warning: fgets(): supplied argument is not a valid stream resource in...on line 12

PHP:
	$filename = $HTTP_POST_FILES['update_file']['name'];
	$fp=fopen("$filename","r");
	while (!feof($fp)) // Zeile 10
	{
		$buffer = fgets($fp, 4096); // Zeile 12
		list($vorname,$name,$telefon,$fax,$email,$abteilung,$jobdescription,$raum,$standort) = explode (";",$buffer);
		$sql = "SELECT * FROM person;";
		$result = mysql_query($sql) OR die(mysql_error());
		while($row = mysql_fetch_assoc($result))
		{
			if(($row['name'] == $name) && ($row['vorname'] == $vorname))
			{
				$count++;
				$id = $row['ID'];
			}
		}

Das ist mein Script. Es soll Daten durch " ; " getrennt einlesen und dann in eine Datenbank schreiben.

Es kommen aber immer die Fehler die oben stehen. Warum !?
Die Datei, bei der die Fehler kommen, ist groß, wenn ich eine kleine nehme macht er diesen Fehler nicht.
 
Zuletzt bearbeitet:
Definiere "groß". Hast du eine evtl. Fehlermeldung beim Upload ausgeben lassen oder ist das dein gesamter Code?
 
Mein gesamter Code ist:

PHP:
$bearbeitet = 0;
$eingetragen = 0;
$filename = $HTTP_POST_FILES['update_file']['name'];
$fp=fopen("$filename","r");
while (!feof($fp))
{
	$buffer = fgets($fp, 4096);
	list($vorname,$name,$telefon,$fax,$email,$abteilung,$jobdescription,$raum,$standort) = explode (";",$buffer);
	$sql = "SELECT * FROM person;";
	$result = mysql_query($sql) OR die(mysql_error());
	while($row = mysql_fetch_assoc($result))
	{
		$id = $row['ID'];
		if(($row['name'] == $name) && ($row['vorname'] == $vorname))
		{
			$seite = "update";
			include "../select_region.php";
			mysql_query("UPDATE person SET telefon = '".$telefon."' WHERE ID = '".$id."'");
			mysql_query("UPDATE person SET fax = '".$fax."' WHERE ID = '".$id."'");
			mysql_query("UPDATE person SET mail = '".$email."' WHERE ID = '".$id."'");
			mysql_query("UPDATE person SET jobdes = '".$jobdescription."' WHERE ID = '".$id."'");
			mysql_query("UPDATE person SET raum = '".$raum."' WHERE ID = '".$id."'");
			mysql_query("UPDATE person SET ort = '".$standort."' WHERE ID = '".$id."'");
			mysql_query("UPDATE person SET abt = '".$abteilung."' WHERE ID = '".$id."'");
			$bearbeitet++;
	 }
	 else
		{
			$seite = "update";
			include "../select_region.php";
			mysql_query("INSERT INTO person VALUES
				('','".$vorname."','".$name."','".$telefon."','".$fax."','".$email."','','".$jobdescription."','".$raum."',
				'".$standort."','".$abteilung."','','Y')");
			$eingetragen++;
		}			 
	}
}
Groß: Ist 184 Einträge... bzw seit dem läuft es nicht mehr...

EDIT: Jetzt geht es auch nicht mehr mit 3 Einträgen. Er macht mir jetzt immer ein "Dummy"-User ...Der nicht in der Datei drin steht
 
Zuletzt bearbeitet:
Unabhängig von dem auftretenden Fehler: Dein Code ist nicht gerade das, was man performant nennt. Hier einmal ein Beispiel, welche Möglichkeiten es noch gibt:
PHP:
$bearbeitet = 0;
$eingetragen = 0;
$filename = $HTTP_POST_FILES['update_file']['name'];

$zeilen = file($filename);
foreach($zeilen as $buffer)
{
    list($vorname,$name,$telefon,$fax,$email,$abteilung,$jobdescription,$raum,$standort) = explode (";",$buffer);
    $sql = "SELECT * FROM person where name = '".mysql_escape_string($name)."' and vorname = '".mysql_escape_string($vorname)."'";
    $result = mysql_query($sql) OR die(mysql_error());
    if (mysql_num_rows($result) != 0) {
        while($row = mysql_fetch_assoc($result))
        {
            $id = $row['ID'];
            $seite = "update";
            include "../select_region.php";
            mysql_query("UPDATE person SET telefon = '".$telefon."',
                                           fax = '".$fax."',
                                           mail = '".$email.",
                                           jobdes = '".$jobdescription."',
                                           raum = '".$raum."',
                                           ort = '".$standort."',
                                           abt = '".$abteilung."'
                        WHERE ID = '".$id."'");
            $bearbeitet++;
        }
    }
    else
    {
        $seite = "update";
        include "../select_region.php";
        mysql_query("INSERT INTO person VALUES
            ('','".$vorname."','".$name."','".$telefon."','".$fax."','".$email."','','".$jobdescription."','".$raum."',
            '".$standort."','".$abteilung."','','Y')");
        $eingetragen++;

    }
}

Beachte, dass Variablen mit Zeichenketten in die Funktion [phpf]mysql_escape_string[/phpf] eingefasst werden sollten, um SQL-injections vorzubeugen. Das habe ich nur beim ersten Statement getan. Für die übrigen musst du es selbst nachholen.

Sven
 
ja...

Die Fehlermeldung kommt jetzt nur ein mal ...

Warning: file(mitarbeiter.txt): failed to open stream: No such file or directory in ... on line 8

Warning: Invalid argument supplied for foreach() in .... on line 10

und nicht mehr so vorher mehrfach ...
Es kommt die Meldung:

- Das Updaten war erfolgreich
- 0 Mitarbeiter hinzugefügt 0 Mitarbeiter geändert, ob wohl ich neue Mitarbeiter hinzugefügt haben müsste, laut liste ...

Zeile 8: $zeilen = file($filename);
Zeile 9: foreach($zeilen as $buffer)

Der Rest steht noch in deinem letzten Post...
 
Ich übergeb die Datei doch über ein Formular....
Also die Datei ist bekannt oder nicht ?

Und ich schreibe in die Datenbank und da darf ich ja reinschreiben ....
 
Zurück