• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Fehler beim Editieren von csv-Datei in PHP

Hallo,

das folgende Script legt Datensätze in ein csv-File ab und soll diese, wenn ...?edit=idnummer übergeben wird, diesen auch editieren. Leider funkt. dies nicht und ich bin schon verzweifelt.

Bitte um Hilfe!

Danke!!!

Bernd

<?php

$filename = 'events.csv';

if ($HTTP_GET_VARS['edit'])
{
function getArrayFromFile($idvergleichen)
{
$errormsg = 'Fehler beim Öffnen der Datei';
$fp=@fopen('events.csv', 'r') or die ($errormsg);
while ($line = fgets($fp, 1024))
{
$line=trim($line);
if(strpos($line, $idvergleichen)> -1)
{
$datensatzzumeditieren[] = explode(';',$line);
}
}
fclose($fp);
return $datensatzzumeditieren;
}
$datensatz = getArrayFromFile($HTTP_GET_VARS['edit']);
$idedit = $datensatz[0][0];
$eventname = $datensatz[0][1];
$ort = $datensatz[0][2];
$kategorie = $datensatz[0][3];
$datum = $datensatz[0][4];
$ueberschrift = 'Datensatz editieren';
}
else
{
$eventname = $HTTP_POST_VARS['eventname'];
$ort = $HTTP_POST_VARS['ort'];
$kategorie = $HTTP_POST_VARS['kategorie'];
$datum = $HTTP_POST_VARS['datum'];
$ueberschrift = 'Neuen Datensatz eingeben';
}
$msg = '';
$msgeventname = ''; // eventname
$msgort = ''; // ort
$msgkategorie = ''; // kategorie
$msgdatum = ''; // datum
$msgMyImage = ''; // Image
$noSave = 'Der Datensatz wurde nicht gespeichert!';
$yesSave = 'Der Datensatz wurde erfolgreich gespeichert!';
$kategorienamen = array("Oper", "Theater", "Kabarett");


// CSV-File Separator
// als Konstante definert
// ! wird ohne $ verwendet !
define(SEP, ';');

// erlaubte Typen für File Upload
$allowedImgs = array(
'image/gif',
'image/jpg',
'image/jpeg',
'image/pjpeg'
);

if (!empty($HTTP_POST_VARS['save'])) // Abfrage submit oder edit existiert?
{
if ($kategorie == "Kategorie auswählen...")
{
$kategorie = '';
}
if (!empty($ort) && !empty($eventname) && !empty($kategorie) && !empty($datum))
{
// uniqid generieren
// uniqid('') -- generiert eine einmalige
// Buchstaben-Ziffern Kombination
$id = uniqid('');

// wenn ein Image vorhanden ist
if ($HTTP_POST_FILES['myImage']['size'] > 0)
{
// Größe des Files prüfen
if ($HTTP_POST_FILES['myImage']['size'] < 51200)
{
// File Typ prüfen (mittels in_array())
if(in_array($HTTP_POST_FILES['myImage']['type'],$allowedImgs))
{
// Extension des Files herausfinden
preg_match('/\.(.+)$/', $HTTP_POST_FILES['myImage']['name'],
$ret);
$ext = trim($ret[1]);

// neuen Namen vergeben
// $id wurde oben generiert (uniqid())
$newName = $id.'.'.$ext;

// das File kommt in das Verzeichnis images
$newPath = "images/$newName";

// File aus dem Temp Verzeichnis
// in das gewünschte Verzeichnis kopieren
// Achtung:
// das Verzeichnis muss mit entsprechenden Rechten
// versehen sein!
copy($HTTP_POST_FILES['myImage']['tmp_name'], $newPath);
} else
{
$msgMyImage = 'Unerlaubter Filetyp!';
$msg = $noSave;
}
} else
{
$msgMyImage = 'Das Image ist zu groß!';
$msg = $noSave;
}
} // End: Image

// nur, wenn beim File alles OK (korrekter Typ, Größe) ist!
if (empty($msgMyImage))
{
// eventuell vorhandene ; entfernen
// ! SEP (Konstante) ohne $ verwenden !
$eventname = str_replace(SEP, '',
$eventname);
$ort = str_replace(SEP, '',
$ort);
$kategorie = str_replace(SEP, '',
$kategorie);
$datum = str_replace(SEP, '',
$datum);

if ($HTTP_GET_VARS['edit'])
{
function getArrayFromFile2()
{
$errormsg = 'Fehler beim Öffnen der Datei';
$fp=@fopen('events.csv', 'r') or die ($errormsg);
$alle = file('events.csv');
fclose($fp);
return $alle;
}

$alle = getArrayFromFile2();

foreach ($alle as $key => $value) /* ALLE IST EIN ARRAYELEMENT !!!!!!!!!! */
{
if ($value == $idedit)
{
$alle[$value+1] = $eventname;
$alle[$value+2] = $ort;
$alle[$value+3] = $kategorie;
$alle[$value+4] = $datum;
}
}
$handle = fopen ($filename, 'w');
for( $i = 0; $i <= 4; $i++)
{
fwrite($handle,$alle[$i]);
}


fclose($handle);
}
else
{
// Zeile zusammenstellen
$line = $id.SEP."\n".
$eventname.SEP."\n".
$ort.SEP."\n".
$kategorie.SEP."\n".
$datum.SEP."\n".
$newName."\n";

$handle = @fopen ($filename, 'a');
fwrite ($handle, $line);
fclose($handle);
}

// allgmeine Message
$msg = $yesSave."<br />($line)";
if (!empty($newName))
{
$msg .= '<br><img src="'.$newPath.'" />';
$msg .= '<br><a target="_blank" href="images/">'.
'Zum Image-Verzeichnis</a>';
}

// zurücksetzen von ort + eventname
$ort = '';
$eventname = '';
$kategorie = '';
$datum = '';
}
} else
{
// ort oder/und eventname oder/und kategorie oder/und datum nicht vorhanden
// Verarbeitung endet hier
if (empty($eventname))
{
$msgeventname = 'Bitte geben Sie einen Eventnamen an!';
}
if (empty($ort))
{
$msgort = 'Bitte geben Sie einen Ort an!';
}
if (empty($kategorie))
{
$msgkategorie = 'Bitte geben Sie eine Kategorie an!';
}
if (empty($datum))
{
$msgdatum = 'Bitte geben Sie ein Datum an!';
}
$msg = $noSave;
}
}
?>
<!doctype html public "-//W3C//DTD HTML 4.0 //EN">
<html>
<head>
<title>Events</title>
</head>
<body>
<center><h1><?php print($ueberschrift); ?></h1></center>
<form enctype="multipart/form-data" method="POST">
<table align="center" cellpadding="4" cellspacing="0" border="1">
<?php
// betrifft allgemeine Message
if (!empty($msg))
{
?>
<tr>
<td colspan="2" align="center" bgcolor="green"><?php print($msg); ?></td>
</tr>
<?php
}
// wird nur ausgegeben, wenn kein Eventname
// angegeben wurde
// ! (nur, wenn das Formular submittet wurde) !
if (!empty($msgeventname))
{
?>
<tr>
<td colspan="2" align="center" bgcolor="red"><?php print($msgeventname); ?></td>
</tr>
<?php
}
?>
<tr>
<td><b>Eventname*</b></td>
<td>
<input type="text" name="eventname" value="<?php print($eventname); ?>" />
</td>
</tr>
<?php
// wird nur ausgegeben, wenn kein ort
// angegeben wurde
// ! (nur, wenn das Formular submittet wurde) !
if (!empty($msgort))
{
?>
<tr>
<td colspan="2" align="center" bgcolor="red"><?php print($msgort); ?></td>
</tr>
<?php
}
?>
<tr>
<td><b>Ort*</b></td>
<td>
<input type="text" name="ort" value="<?php print($ort); ?>" />
</td>
</tr>
<?php
// wird nur ausgegeben, wenn keine Kategorie
// angegeben wurde
// ! (nur, wenn das Formular submittet wurde) !
if (!empty($msgkategorie))
{
?>
<tr>
<td colspan="2" align="center" bgcolor="red"><?php print($msgkategorie); ?></td>
</tr>
<?php
}
?>
<tr>
<td><b>Kategorie*</b></td>
<td>
<select name="kategorie" size="1">
<?php
if (empty($kategorie))
{
?>
<option value="Kategorie auswählen..." selected>Kategorie auswählen...</option>
<?php
}
else
{
?>
<option value="Kategorie auswählen...">Kategorie auswählen...</option>
<?php
}
foreach ($kategorienamen as $kategorien)
{
if ($kategorien == $kategorie)
{
?>
<option value="<?php print($kategorien); ?>" selected><?php print($kategorien); ?></option>
<?php
}
else
{
?>
<option value="<?php print($kategorien); ?>"><?php print($kategorien); ?></option>
<?php
}
}

?>
</select>
<?php print_r($alle); ?>
<?php print_r($value); ?>
<?php print_r($key); ?>
</td>
</tr>
<?php
// wird nur ausgegeben, wenn kein Datum
// angegeben wurde
// ! (nur, wenn das Formular submittet wurde) !
if (!empty($msgdatum))
{
?>
<tr>
<td colspan="2" align="center" bgcolor="red"><?php print($msgdatum); ?></td>
</tr>
<?php
}
?>
<tr>
<td><b>Datum*</b>(TT.MM.JJJJ)</td>
<td>
<input type="text" name="datum" value="<?php print($datum); ?>" />
</td>
</tr>
<?php
// wird nur ausgegeben,
// wenn Probleme beim ImageUpload auftauchen
if (!empty($msgMyImage))
{
?>
<tr>
<td colspan="2" align="center" bgcolor="red"><?php print($msgMyImage); ?></td>
</tr>
<?php
}
?>
<tr>
<td>Image (gif, jpg, < 50 k)</td>
<td>
<input type="file" name="myImage" />
<input type="hidden" name="max_file_size" value="51200" />
</td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" name="save" value="Save" /></td>
</tr>
<tr>
<td colspan="2"><b>* Pflichtfelder</b></td>
</tr>
</table>
</form>
</body>
</html>
 
Hi!

1. [ code] Tags des Forums benutzen!!!!
2. Was bedeutet "Es funktioniert nicht". Bitte ein deutliche Fehlerbeschreibung!!!
 
nbkr schrieb:
1. [ code] Tags des Forums benutzen!!!!
2. Was bedeutet "Es funktioniert nicht". Bitte ein deutliche Fehlerbeschreibung!!!

3. mach ein minimalbeispiel draus
4. Kommentiere Deinen Code, was die einzelnen Zeilen machen sollen, denn so überfliege ich den mit Sicherheit nicht.
 
Oben