PHP gevorderde |
|
hallo,
ik heb het volgende upload script.
<?
$query_nhon = mysql_query("SELECT * FROM tacx") or die(mysql_error());
$npics = mysql_num_rows($query_nhon)or die(mysql_error()); // AANTAL FOTO'S
$max = $npics; //MAXIMALE FOTOGETAL
$id = $max+1; //VOLGEND GETAL
$toegelaten = "im ca";
$toegelaten = explode(" ",strtolower($toegelaten));
//toegelaten bestandsextensies(in een array), als je er geen wilt, comment je deze twee lijnen uit!
$locatie = "/"; //zie info hierboven
$maxgrootte = "1000"; //aantal Kilobytes (1000 KB != 1MB!!!!! onthoud dit!!!, omdat ik lui ben, beweer ik dat het wel zo is ;)
//als je je afvraag vanwaar dit komt, in 1 byte gaan er 8 bits, in 2 kilobyte, gaan er dus 1600 bits enzovoorts
$maxgrootte .= "000"; //ik voeg er 3 nulletjes aan toe, om er kilobytes van te maken (denk ik, ik HAAT bestandsgrootes op computers)
$geldig_bestand = false;
//het bestand moet juist zijn, indien het uit de temporary dir naar de uiteindelijke locatie bewaard moet worden
if ($REQUEST_METHOD == 'POST') {
//heb ik al een suitgelegd
if($file) {
//logisch
$image = $HTTP_POST_FILES[file][name];
// Filename + extensie van geuploade bestand
//$grootte = $HTTP_POST_FILES[file][size];
//geeft de grootte in een array, [0] = breedte en [1] = hoogte
$extentie = substr($image, -3);
//neem de extensie van het bestand
mysql_query("INSERT INTO tacx (id,name,mail,country,Dd,Dm,Dy,Th,Tm,Ts,terrein,parcours,image,afstand) VALUES ('" . $id . "','" . $name . "','" . $mail . "','" . $country . "','" . $Dd . "','" . $Dm . "','" . $Dy . "','" . $Th . "','" . $Tm . "','" . $Ts . "','" . $terrein . "','" . $parcours . "','" . $image . "','" . $afstand . "')") or die(mysql_error());
if ($grootte <= $maxgrootte) {
//indien de bestandsgrootte al niet klopt, is het onnuttig van de rest te controleren
for ($i=0;$i<sizeof($toegelaten);$i++) {
//herhaal zoveel keer als er toegelaten bestandsextensies zijn
if ($extensie = $toegelaten[$i]) {
//$afmetingen = getimagesize($image);
//if ($plaatje[0] <= $width || $plaatje[1] <= $height) //gn accolade, want mr 1 opdracht!
$geldig_bestand = true; //aangezien ik gn accolade gebruik gebruik ik geen tab vooraan, dit zou alles onduidelijk maken!
//alle voorwarden gaven direct een true, en dus het bestand is door alle beproengen geraakt
break;
//fuck die for loop, het bestand is toch al goed
//als ik dit niet zet, zal het script nog x keren door de lus gaan, wat de uitvoer een paar microseconden vertraagt
//en dus ook de server ook een beetje meer belast! probeer dus altijd zo braaf mogelijk te zijn voor de server
}
}
}
if ($geldig_bestand = true)
copy($file, $locatie . $image);
//copieer van het temporary dir naar de uiteindelijke dir!
$plaats = "";
echo "";
exit();
//stoppen, anders toot hij het formuliertje!
?>
<? $max = $npics; //MAXIMALE FOTOGETAL $id = $max+1; //VOLGEND GETAL $toegelaten = "im ca"; //toegelaten bestandsextensies(in een array), als je er geen wilt, comment je deze twee lijnen uit! $locatie = "/"; //zie info hierboven $maxgrootte = "1000"; //aantal Kilobytes (1000 KB != 1MB!!!!! onthoud dit!!!, omdat ik lui ben, beweer ik dat het wel zo is ;) //als je je afvraag vanwaar dit komt, in 1 byte gaan er 8 bits, in 2 kilobyte, gaan er dus 1600 bits enzovoorts $maxgrootte .= "000"; //ik voeg er 3 nulletjes aan toe, om er kilobytes van te maken (denk ik, ik HAAT bestandsgrootes op computers) $geldig_bestand = false; //het bestand moet juist zijn, indien het uit de temporary dir naar de uiteindelijke locatie bewaard moet worden if ($REQUEST_METHOD == 'POST') { //heb ik al een suitgelegd if($file) { //logisch $image = $HTTP_POST_FILES[file][name ]; // Filename + extensie van geuploade bestand //$grootte = $HTTP_POST_FILES[file][size]; //geeft de grootte in een array, [0] = breedte en [1] = hoogte $extentie = substr($image, -3); //neem de extensie van het bestand mysql_query("INSERT INTO tacx (id,name,mail,country,Dd,Dm,Dy,Th,Tm,Ts,terrein,parcours,image,afstand) VALUES ('" . $id . "','" . $name . "','" . $mail . "','" . $country . "','" . $Dd . "','" . $Dm . "','" . $Dy . "','" . $Th . "','" . $Tm . "','" . $Ts . "','" . $terrein . "','" . $parcours . "','" . $image . "','" . $afstand . "')") or die(mysql_error()); if ($grootte <= $maxgrootte) { //indien de bestandsgrootte al niet klopt, is het onnuttig van de rest te controleren for ($i=0;$i<sizeof($toegelaten);$i++) { //herhaal zoveel keer als er toegelaten bestandsextensies zijn if ($extensie = $toegelaten[$i]) { //$afmetingen = getimagesize($image); //if ($plaatje[0] <= $width || $plaatje[1] <= $height) //gn accolade, want mr 1 opdracht! $geldig_bestand = true; //aangezien ik gn accolade gebruik gebruik ik geen tab vooraan, dit zou alles onduidelijk maken! //alle voorwarden gaven direct een true, en dus het bestand is door alle beproengen geraakt break; //fuck die for loop, het bestand is toch al goed //als ik dit niet zet, zal het script nog x keren door de lus gaan, wat de uitvoer een paar microseconden vertraagt //en dus ook de server ook een beetje meer belast! probeer dus altijd zo braaf mogelijk te zijn voor de server } } } if ($geldig_bestand = true) copy($file, $locatie . $image); //copieer van het temporary dir naar de uiteindelijke dir! $plaats = ""; //stoppen, anders toot hij het formuliertje! ?>
Het werkt fantastisch, maar de te uploaden bestanden bevatten ' dit soort aanhalingstekens... en op 1 of andere manier gaat dat fout..
dus een bestand als: Capricorn-'Afstand 10 Km'-DIDIER BOZ(Tacx) 07-10-2003-1.im
In de database zet hij de bestandsnaam goed, maar in de map waar het bestandje komt te staan veranderd hij de naam tot een stukje na de aanhalingstekens..
hoe kan ik dit voorkomen??
met vriendelijke groet,
Roy
|