Topic: php file upload - what am I doing wrong?
It just doesn't work...
Here is the form:
<form id="reportedit" method="post" action="<?php echo $_SERVER['REQUEST_URI'] ?>" enctype="multipart/form-data">
<div class="inform">
<fieldset>
<legend>Hier können Sie den Spielbericht eingeben / ändern.</legend>
<div class="infldset">
<table class="aligntop" cellspacing="0">
<input type="hidden" name="form_sent" />
<tr>
<th scope="row">Unsere Aufstellung</th>
<td>
<textarea name="lineup" rows="2" cols="40" tabindex="1"><?php echo $game['aufstellung'] ?></textarea>
</td>
</tr>
<tr>
<th scope="row">Tore</th>
<td>
<textarea name="goals" rows="5" cols="40" tabindex="2"><?php echo $game['tore'] ?></textarea>
</td>
</tr>
<tr>
<th scope="row">Bericht</th>
<td>
<textarea name="report" rows="15" cols="100" tabindex="3"><?php echo $game['report'] ?></textarea>
</td>
</tr>
<tr>
<th scope="row">Bild</th>
<td>
<?php if ($game['bild']) : ?>
<img src="<?php echo PUN_ROOT.'img/reports/'.$game['bild'] ?>" />
<a href="reports.php?delete_pic=<?php echo $id ?>">Bild löschen</a><br /><br />
<?php endif; ?>
<input type="file" name="picture" tabindex="4" />
<span>Wenn Sie ein neues Bild hochladen möchten, wählen Sie einfach ein neues Bild aus. <strong>Das alte Bild wird dann jedoch gelöscht.</strong><br />Wenn Sie das Bild weiterhin bzw. gar kein Bild verwenden möchten (falls kein Bild vorhanden ist), lassen Sie das Feld einfach leer.</span>
</td>
</tr>
<tr>
<th scope="row">Alternativ-Text für Bild</th>
<td>
<input type="text" name="picture_alt" size="60" value="<?php echo $game['bild_alt'] ?>" tabindex="5" />
<span>Der Text wird angezeigt, wenn mit der Maus über das Bild gefahren wird oder das Bild nicht angezeigt wird.</span>
</td>
</tr>
</table>
</div>
</fieldset>
</div>
<p class="submitend"><input type="submit" name="edit_report" value=" Speichern " tabindex="6" /></p>
</form>
And here is the upload code:
$id = intval($_GET['edit']);
$timestamp = mktime($_POST['hour'], $_POST['minute'], 0, $_POST['month'], $_POST['day'], $_POST['year']);
if(isset($_POST['form_sent']))
{
if (!empty($_POST['picture']))
{
$result = $db->query('SELECT bild FROM spiele WHERE id='.$id) or error('Unable to fetch picture information', __FILE__, __LINE__, $db->error());
$picture = $db->result($result);
if($picture)
@unlink(PUN_ROOT.'img/reports/'.$picture);
$uploaded_file = $_FILES['picture'];
// Make sure the upload went smooth
if (isset($uploaded_file['error']))
{
switch ($uploaded_file['error'])
{
case 1: // UPLOAD_ERR_INI_SIZE
case 2: // UPLOAD_ERR_FORM_SIZE
message('Die Datei ist zu groß Der Server hat den Upload verboten.');
break;
case 3: // UPLOAD_ERR_PARTIAL
message('Die Datei wurde nur teilweise hochgeladen. Bitte versuchen Sie es erneut.');
break;
case 4: // UPLOAD_ERR_NO_FILE
message('Sie haben keine Datei zum Upload ausgewählt.');
break;
case 6: // UPLOAD_ERR_NO_TMP_DIR
message('PHP war nicht in der Lage, die Datei in einem vorläufigen Verzeichnis zu speichern.');
break;
default:
// No error occured, but was something actually uploaded?
if ($uploaded_file['size'] == 0)
message('Sie haben keine Datei zum Upload ausgewählt.');
break;
}
}
if (is_uploaded_file($uploaded_file['tmp_name']))
{
$allowed_types = array('image/gif', 'image/jpeg', 'image/pjpeg', 'image/png', 'image/x-png');
if (!in_array($uploaded_file['type'], $allowed_types))
message('Die ausgewählte Datei besitzt keinen gültigen Dateityp. Erlaubt sind gif, jpeg und png.');
// Make sure the file isn't too big
if ($uploaded_file['size'] > $pun_config['o_avatars_size'])
message('Die ausgewählte Datei ist größer als die maximal erlaubte Dateigröße');
// Determine type
$extensions = null;
if ($uploaded_file['type'] == 'image/gif')
$extensions = array('.gif', '.jpg', '.png');
else if ($uploaded_file['type'] == 'image/jpeg' || $uploaded_file['type'] == 'image/pjpeg')
$extensions = array('.jpg', '.gif', '.png');
else
$extensions = array('.png', '.gif', '.jpg');
$name = time();
if (!@move_uploaded_file($uploaded_file['tmp_name'], PUN_ROOT.'img/reports/'.$name.'.tmp'))
message('Der Server war nicht in der Lage, die hochgeladene Datei zu verschieben. Bitte kontaktieren Sie den System-Administrator.');
list($width, $height, $type,) = getimagesize(PUN_ROOT.'img/reports/'.$name.'.tmp');
if (empty($width) || empty($height) || $width > $picture_max_width || $height > $picture_max_height)
{
@unlink(PUN_ROOT.'img/reports/'.$name.'.tmp');
message('Die ausgewählte Datei ist breiter und/oder höher als das erlaubte Maximum von '.$picture_max_width.'x'.$picture_max_height.' Pixeln.');
}
else if ($type == 1 && $uploaded_file['type'] != 'image/gif') {
@unlink(PUN_ROOT.'img/reports/'.$name.'.tmp');
message('Die ausgewählte Datei besitzt keinen gültigen Dateityp. Erlaubt sind gif, jpeg und png.');
}
@rename(PUN_ROOT.'img/reports/'.$name.'.tmp', PUN_ROOT.'img/reports/'.$name.$extensions[0]);
@chmod(PUN_ROOT.'img/reports/'.$name.$extensions[0], 0644);
}
else
message('Ein unbekannter Fehler trat auf. Bitte versuchen Sie es erneut.');
$result = $db->query("UPDATE spiele SET aufstellung='".$_POST['lineup']."', tore='".$_POST['goals']."', report='".$db->escape($_POST['report'])."', bild='".$name.$extensions[0]."', bild_alt='".$_POST['picture_alt']."' WHERE id=".$id) or error('Unable to update game report data', __FILE__, __LINE__, $db->error());
}
else
$result = $db->query("UPDATE spiele SET aufstellung='".$_POST['lineup']."', tore='".$_POST['goals']."', report='".$db->escape($_POST['report'])."', bild_alt='".$_POST['picture_alt']."' WHERE id=".$id) or error('Unable to update game report data', __FILE__, __LINE__, $db->error());
redirect('reports.php', 'Spielbericht gespeichert. Sie werden weitergeleitet …');
Sometimes I get the error message 'Ein unbekannter Fehler trat auf. Bitte versuchen Sie es erneut.' and sometimes it just redirects me without uploading anything.
Help me please!!!