HTML interesse |
|
Ik heb volgend script gemaakt om screenshots te uploaden met bijhorend bericht en er automatisch een thumbnail van te laten maken. Oorspronkelijk maakte ik gebruik van move_uploaded_file om de bestanden te uploaden maar vermits de server ondertussen in safe mode staat werkt dit niet meer en heb ik het aangepast om via ftp te werken. Ik kan het bericht nog perfect versturen en de screenshots uploaden, ik heb alleen volgende problemen:
1. De thumbnails worden niet meer aangemaakt
2. De bestandsnamen van de screenshots worden niet meer in de db opgeslagen
3. Wanneer ik het formulier verzend om een screenshot te uploaden begint hij het te uploaden maar ipv te geven dat het correct is geupload of opnieuw een leeg formulier weer te geven om een nieuw shot te uploaden blijft hij gewoon het ingevulde formulier weergeven (Ondanks dat browser wel zegt dat de pagina geladen is) of geeft hij terug het oorspronkelijke formulier weer om een nieuw bericht toe te voegen.
Volgens mij loopt er iets mis bij het aanmaken van de thumbnail vermits alles wat na die functie komt niet meer wordt uitgevoerd (had het uploaden bv eens na het maken van thumbnail gezet en het screenshot werd dan ook niet meer geupload).
Het script is het volgende:
<?php
session_start();
include('config.php');
include('include/ftpfilemanagement.php');
include('include/fotobewerking.php');
include('include/login.php');
ini_set(memory_limit,"20M"); //Memory limit op 20 MB zetten zodat resizen van screenshot mogelijk is
$login = new login;
if(!$login->is_ingelogd()) {
echo "gelieve eerst <a href='index.php'>hier</a> in te loggen.";
} //kijken of de admin is ingelogd
elseif(isset($_POST['submitbericht'])) { //Kijken of het bericht werd ingevoerd
$datum = mktime(0, 0, 0, $_POST['maand'], $_POST['dag'], $_POST['jaar']); //timestamp maken van de datum
mysql_query("INSERT INTO nl_screens_bericht_".$_POST['project']." (datum, titel, bericht) VALUES (".$datum.", '".$_POST['nl_titel']."', '".$_POST['nl_bericht']."')") or die(mysql_error());
mysql_query("INSERT INTO en_screens_bericht_".$_POST['project']." (datum, titel, bericht) VALUES (".$datum.", '".$_POST['en_titel']."', '".$_POST['en_bericht']."')") or die(mysql_error()); //bericht in nl en en tabel van db opslaan
$id = mysql_insert_id(); //id van het bericht bewaren om bij de screenshots aan te geven
$mapt = "/httpdocs/v2/images/screenshots/".$_POST['project']."/thumbs_id".$id."/";
$maps = "/httpdocs/v2/images/screenshots/".$_POST['project']."/screens_id".$id."/"; //mappen voor thumbnails en screenshots instellen
$filemanagement = new ftpfilemanagement;
$filemanagement->makedir($mapt, 0755);
$filemanagement->makedir($maps, 0755); //nieuwe mappen voor screenshots en thumbnails aanmaken?>
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>?id=<?php echo $id."&project=".$_POST['project'];?>" ENCTYPE="multipart/form-data">
<table border=0><tr><th>Screenshot</th><td><input type="file" name="bestand"></td></tr>
<tr><th>Nog een screenshot toevoegen:</th><td><input type="checkbox" name="addscreen" value="true"></td></tr>
<tr><td colspan="2"><center><input type="submit" name="submitscreen" value="Toevoegen"></center></td></tr></table></form>
<?php }
elseif(isset($_POST['submitscreen'])) { //kijken of er een screenshots werd geupload
$ftpmapt = "/httpdocs/v2/images/screenshots/".$_GET['project']."/thumbs_id".$_GET['id']."/";
$ftpmaps = "/httpdocs/v2/images/screenshots/".$_GET['project']."/screens_id".$_GET['id']."/";
$mapt = "/home/httpd/vhosts/bsprojects.be".$ftpmapt;
$maps = "/home/httpd/vhosts/bsprojects.be".$ftpmaps;
$filename = $_FILES['bestand']['name'];
$filemanagement = new ftpfilemanagement;
$filemanagement = new ftpfilemanagement;
$screen = $filemanagement->uploadfile($ftpmaps,$_FILES['bestand']['tmp_name'], $_FILES['bestand']['name'], binary);
$fotobewerking = new fotobewerking; //klasse aanmaken om thumbnails mee te maken
$fotobewerking->createthumb($maps.$filename, $filename, $mapt); //thumbnail aanmaken
mysql_query("INSERT INTO alg_screens_".$_GET['project']." (bericht_id, image) VALUES (".$_GET['id'].", '".$filename."')") or die(mysql_error()); //bestandsnaam van het screenshot opslaan in db
switch ($_POST['addscreen']) { //controleren of er nog een screenshot moet worden toegevoegd
case true:?>
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>?id=<?php echo $_GET['id']."&project=".$_GET['project'];?>" ENCTYPE="multipart/form-data">
<table border=0><tr><th>Screenshot</th><td><input type="file" name="bestand"></td></tr>
<tr><th>Nog een screenshot toevoegen:</th><td><input type="checkbox" name="addscreen" value="true"></td></tr>
<tr><td colspan="2"><center><input type="submit" name="submitscreen" value="Toevoegen"></center></td></tr></table></form>
<?php break;
default: //alle screenshots zijn toegevoegd
echo "De screenshots werden toegevoegd - <a href='screenoverzicht.php?lang=nl'>Terug naar het overzicht</a> - <a href='home.php'>Admin home</a>";
}
}
elseif($_GET['edit']) { //Kijken of bij het wijzigen van een bericht screenshots moeten toegevoegd worden ?>
<form method="post" action="addscreens.php?id=<?php echo $_GET['id']."&project=".$_GET['project'];?>" ENCTYPE="multipart/form-data">
<table border=0><tr><th>Screenshot</th><td><input type="file" name="bestand"></td></tr>
<tr><th>Nog een screenshot toevoegen:</th><td><input type="checkbox" name="addscreen" value="true"></td></tr>
<tr><td colspan="2"><center><input type="submit" name="submitscreen" value="Toevoegen"></center></td></tr></table></form>
<?php
}
else { //bij eerste keer laden van de pagina het formulier voor het bericht weergeven
$project_query = mysql_query("SELECT * FROM projecten"); ?>
<form method="POST" action="<?php echo $_SERVER['PHP_SELF'];?>" ENCTYPE="multipart/form-data">
<table>
<tr>
<td>Datum:</td>
<td><input type="text" size="2" name="dag">
<select name="maand">
<option value="1">januari</option>
<option value="2">februari</option>
<option value="3">maart</option>
<option value="4">april</option>
<option value="5">mei</option>
<option value="6">juni</option>
<option value="7">juli</option>
<option value="8">augustus</option>
<option value="9">september</option>
<option value="10">oktober</option>
<option value="11">november</option>
<option value="12">december</option>
</select>
<input type="text" size="4" name="jaar">
</td></tr>
<tr>
<td>Project:</td>
<td><select name="project">
<?php while($projecten = mysql_fetch_assoc($project_query)) { ?>
<option value="<?php echo $projecten['project']; ?>">
<?php echo strtoupper(str_replace("_"," ",$projecten['project'])); ?></option><?php } ?></td></tr>
<tr>
<th colspan="2">Nederlands</th>
</tr>
<tr>
<td>Titel:</td>
<td><input type="text" size="30" name="nl_titel"></td></tr>
<tr>
<td>Bericht:</td>
<td><textarea rows="6" cols="40" name="nl_bericht"></textarea></td></tr>
<th colspan="2">Engels</th>
<tr>
<td>Titel:</td>
<td><input type="text" size="30" name="en_titel"></td></tr>
<tr>
<td>Bericht:</td>
<td><textarea rows="6" cols="40" name="en_bericht"></textarea></td></tr>
<tr><td colspan="2"><input type="submit" name="submitbericht" value="Toevoegen"></td></tr></table>
<input type="hidden" name="addscreen" value="true">
</form>
<?php
} ?>
<?php include('config.php'); include('include/ftpfilemanagement.php'); include('include/fotobewerking.php'); include('include/login.php'); ini_set(memory_limit ,"20M"); //Memory limit op 20 MB zetten zodat resizen van screenshot mogelijk is $login = new login; if(!$login->is_ingelogd()) { echo "gelieve eerst <a href='index.php'>hier</a> in te loggen."; } //kijken of de admin is ingelogd elseif(isset($_POST['submitbericht'])) { //Kijken of het bericht werd ingevoerd $datum = mktime(0, 0, 0, $_POST['maand'], $_POST['dag'], $_POST['jaar']); //timestamp maken van de datum mysql_query("INSERT INTO nl_screens_bericht_".$_POST['project']." (datum, titel, bericht) VALUES (".$datum.", '".$_POST['nl_titel']."', '".$_POST['nl_bericht']."')") or die(mysql_error()); mysql_query("INSERT INTO en_screens_bericht_".$_POST['project']." (datum, titel, bericht) VALUES (".$datum.", '".$_POST['en_titel']."', '".$_POST['en_bericht']."')") or die(mysql_error()); //bericht in nl en en tabel van db opslaan $id = mysql_insert_id(); //id van het bericht bewaren om bij de screenshots aan te geven $mapt = "/httpdocs/v2/images/screenshots/".$_POST['project']."/thumbs_id".$id."/"; $maps = "/httpdocs/v2/images/screenshots/".$_POST['project']."/screens_id".$id."/"; //mappen voor thumbnails en screenshots instellen $filemanagement = new ftpfilemanagement; $filemanagement->makedir($mapt, 0755); $filemanagement->makedir($maps, 0755); //nieuwe mappen voor screenshots en thumbnails aanmaken?> <form method="post" action=" <?php echo $_SERVER['PHP_SELF'];? >?id= <?php echo $id."&project=".$_POST['project'];? >" ENCTYPE="multipart/form-data"> <table border=0><tr><th>Screenshot</th><td><input type="file" name="bestand"></td></tr> <tr><th>Nog een screenshot toevoegen:</th><td><input type="checkbox" name="addscreen" value="true"></td></tr> <tr><td colspan="2"><center><input type="submit" name="submitscreen" value="Toevoegen"></center></td></tr></table></form> <?php } elseif(isset($_POST['submitscreen'])) { //kijken of er een screenshots werd geupload $ftpmapt = "/httpdocs/v2/images/screenshots/".$_GET['project']."/thumbs_id".$_GET['id']."/"; $ftpmaps = "/httpdocs/v2/images/screenshots/".$_GET['project']."/screens_id".$_GET['id']."/"; $mapt = "/home/httpd/vhosts/bsprojects.be".$ftpmapt; $maps = "/home/httpd/vhosts/bsprojects.be".$ftpmaps; $filename = $_FILES['bestand']['name']; $filemanagement = new ftpfilemanagement; $filemanagement = new ftpfilemanagement; $screen = $filemanagement->uploadfile($ftpmaps,$_FILES['bestand']['tmp_name'], $_FILES['bestand']['name'], binary); $fotobewerking = new fotobewerking; //klasse aanmaken om thumbnails mee te maken $fotobewerking->createthumb($maps.$filename, $filename, $mapt); //thumbnail aanmaken mysql_query("INSERT INTO alg_screens_".$_GET['project']." (bericht_id, image) VALUES (".$_GET['id'].", '".$filename."')") or die(mysql_error()); //bestandsnaam van het screenshot opslaan in db switch ($_POST['addscreen']) { //controleren of er nog een screenshot moet worden toegevoegd case true:?> <form method="post" action=" <?php echo $_SERVER['PHP_SELF'];? >?id= <?php echo $_GET['id']."&project=".$_GET['project'];? >" ENCTYPE="multipart/form-data"> <table border=0><tr><th>Screenshot</th><td><input type="file" name="bestand"></td></tr> <tr><th>Nog een screenshot toevoegen:</th><td><input type="checkbox" name="addscreen" value="true"></td></tr> <tr><td colspan="2"><center><input type="submit" name="submitscreen" value="Toevoegen"></center></td></tr></table></form> <?php break; default: //alle screenshots zijn toegevoegd echo "De screenshots werden toegevoegd - <a href='screenoverzicht.php?lang=nl'>Terug naar het overzicht</a> - <a href='home.php'>Admin home</a>"; } } elseif($_GET['edit']) { //Kijken of bij het wijzigen van een bericht screenshots moeten toegevoegd worden ?> <form method="post" action="addscreens.php?id= <?php echo $_GET['id']."&project=".$_GET['project'];? >" ENCTYPE="multipart/form-data"> <table border=0><tr><th>Screenshot</th><td><input type="file" name="bestand"></td></tr> <tr><th>Nog een screenshot toevoegen:</th><td><input type="checkbox" name="addscreen" value="true"></td></tr> <tr><td colspan="2"><center><input type="submit" name="submitscreen" value="Toevoegen"></center></td></tr></table></form> <?php } else { //bij eerste keer laden van de pagina het formulier voor het bericht weergeven $project_query = mysql_query("SELECT * FROM projecten"); ?> <form method="POST" action=" <?php echo $_SERVER['PHP_SELF'];? >" ENCTYPE="multipart/form-data"> <table> <tr> <td>Datum:</td> <td><input type="text" size="2" name="dag"> <select name="maand"> <option value="1">januari</option> <option value="2">februari</option> <option value="3">maart</option> <option value="4">april</option> <option value="5">mei</option> <option value="6">juni</option> <option value="7">juli</option> <option value="8">augustus</option> <option value="9">september</option> <option value="10">oktober</option> <option value="11">november</option> <option value="12">december</option> </select> <input type="text" size="4" name="jaar"> </td></tr> <tr> <td>Project:</td> <td><select name="project"> <option value=" <?php echo $projecten['project']; ?>"> <tr> <th colspan="2">Nederlands</th> </tr> <tr> <td>Titel:</td> <td><input type="text" size="30" name="nl_titel"></td></tr> <tr> <td>Bericht:</td> <td><textarea rows="6" cols="40" name="nl_bericht"></textarea></td></tr> <th colspan="2">Engels</th> <tr> <td>Titel:</td> <td><input type="text" size="30" name="en_titel"></td></tr> <tr> <td>Bericht:</td> <td><textarea rows="6" cols="40" name="en_bericht"></textarea></td></tr> <tr><td colspan="2"><input type="submit" name="submitbericht" value="Toevoegen"></td></tr></table> <input type="hidden" name="addscreen" value="true"> </form> <?php } ?>
de functie om de thumbnail aan te maken is de volgende:
<?php function createthumb($file, $filename, $thumbfolder)
{
$this->newfile = $thumbfolder."thumb_".$filename;
$this->foto = imagecreatefromjpeg($file);
$this->thumb = imagecreatetruecolor(80,60);
list($this->width, $this->height) = getimagesize($file);
imagecopyresized($this->thumb, $this->foto, 0, 0, 0, 0, 80, 60, $this->width, $this->height);
imagejpeg($this->thumb, $this->newfile, 100);
} ?>
<?php function createthumb($file, $filename, $thumbfolder) { $this->newfile = $thumbfolder."thumb_".$filename; $this->foto = imagecreatefromjpeg($file); $this->thumb = imagecreatetruecolor(80,60); imagecopyresized($this->thumb, $this->foto, 0, 0, 0, 0, 80, 60, $this->width, $this->height); imagejpeg($this->thumb, $this->newfile, 100); } ?>
De functies om te uploaden via ftp:
<?php function connect($host, $login, $paswoord) { //Functie om verbinding te maken met ftp server
if(!$this->connect_id = ftp_connect($host)) { //verbinding openen
return 0;
}
elseif(!ftp_login($this->connect_id, $login, $paswoord)) { //inloggen
return 0;
}
else {
ftp_pasv($this->connect_id, true);
return $this->connect_id;
//Passive connection aanzetten en timeout instellen
}
}
function makedir($map, $chmod) { //functie om mappen aan te maken
switch($this->stream = $this->connect($GLOBALS['ftp_host'], $GLOBALS['ftp_login'], $GLOBALS['ftp_paswoord'])) {
case 0:
return 0;
break;
default:
if(ftp_mkdir($this->stream, $map)) {
return 1;
//map aanmaken en chmod instellen
}
else {
return 0;
}
}
ftp_close($this->stream);
}
function uploadfile($map, $file, $filename, $mode) {
switch ($mode) {
case "binary":
$this->ftp_mode = FTP_BINARY;
break;
case "ascii":
$this->ftp_mode = FTP_ASCII;
break;
}
switch($this->stream = $this->connect($GLOBALS['ftp_host'], $GLOBALS['ftp_login'], $GLOBALS['ftp_paswoord'])) {
case 0:
return 0;
break;
default:
if(ftp_chdir($this->connect_id, $map) AND ftp_put($this->connect_id, $filename, $file, $this->ftp_mode)) {
return 1;
}
else {
return 0;
}
}
ftp_close($this->stream);
} ?>
<?php function connect($host, $login, $paswoord) { //Functie om verbinding te maken met ftp server if(!$this->connect_id = ftp_connect($host)) { //verbinding openen return 0; } elseif(!ftp_login($this->connect_id, $login, $paswoord)) { //inloggen return 0; } else { return $this->connect_id; //Passive connection aanzetten en timeout instellen } } function makedir($map, $chmod) { //functie om mappen aan te maken switch($this->stream = $this->connect($GLOBALS['ftp_host'], $GLOBALS['ftp_login'], $GLOBALS['ftp_paswoord'])) { case 0: return 0; break; default: return 1; //map aanmaken en chmod instellen } else { return 0; } } } function uploadfile($map, $file, $filename, $mode) { switch ($mode) { case "binary": $this->ftp_mode = FTP_BINARY; break; case "ascii": $this->ftp_mode = FTP_ASCII; break; } switch($this->stream = $this->connect($GLOBALS['ftp_host'], $GLOBALS['ftp_login'], $GLOBALS['ftp_paswoord'])) { case 0: return 0; break; default: if(ftp_chdir($this->connect_id, $map) AND ftp_put($this->connect_id, $filename, $file, $this->ftp_mode)) { return 1; } else { return 0; } } } ?>
Ziet iemand misschien het probleem waarom het niet werkt? Voor de server in safe mode gezet werd en het werkte via move_uploaded_file werkte het perfect:\Ik heb al lang zitten zoeken maar lijk het maar niet te vinden...
Alvast bedankt
|