Avatar billede mhass Nybegynder
01. november 2004 - 09:12 Der er 3 kommentarer og
1 løsning

Fejl i løkke ved upload af billede

Jeg er ved at oprette en CMS-system, men får en fejl, når jeg prøver at gemme flere billeder fra samme side.

Fejlen består af, at det kun er det første upload-field som uploader billedet der er valgt, og smider i db'en, nummer to gør ingenting.

Jeg paster koden herunder; Hvis der er nogen der kan hjælpe ville det være toppen.

KODEN PÅ SIDEN SOM MODTAGER FORM'EN:
----------------------------------------------
<?
$t =0;
$x =0;
while (list ($key, $val) = each ($_POST)) {

//--------------------------------------------------------------------------------------------------------------------------------------------------------
// UPLOAD
//--------------------------------------------------------------------------------------------------------------------------------------------------------

// ------------------------------------------------------------ DELETE EXCISTING FILE ---------------------------------------------
if  (preg_match ("/delete_upload/i", $key) and $val=="on") {

list($no_use1, $no_use2,$delete_colname) = split ("_", $key, 3);
$sqldelete = "update ".$_POST['XXtablename']." set ".$delete_colname."='' where id =".$_POST['XXrowid'];
mysql_query($sqldelete) or die(mysql_error());

if (mysql_affected_rows() == 0){
echo "En error occured while deleting file.";
}else{
// -------------------- Delete file from server --------------------
if (file_exists($_POST['upfil_delete_filename'])){
unlink($_POST['upfil_delete_filename']);
}
// -------------------- Delete file from server --------------------
}
// ------------------------------------------------------------ DELETE EXCISTING FILE ---------------------------------------------


} elseif  ($key == "upfil_tablename" and $_FILES['upfil']['name']) {
// ------------------------------------- Location for the uploaded files -------------------------------------
$konfiguration["upload_bibliotek"] = "../upload";
// ------------------------------------- Location for the uploaded files -------------------------------------

// ------------------------------------- Max filesize -------------------------------------
$konfiguration["max_stoerrelse"] = "2000";
// ------------------------------------- Max filesize -------------------------------------

// ------------------------------------- Check PHP-version  -------------------------------------
list($major, $minor, $rev) = explode(".", phpversion());
if($major < 4) {
die("This script only works with PHP 4.0.0 or newer!");
}
// ------------------------------------- Check PHP-version  -------------------------------------

// ------------------------------------- 4.1.x og 4.0.x. -------------------------------------
if($minor < 1) {
$_FILES = $HTTP_POST_FILES;
$_POST = $HTTP_POST_VARS;
$_SERVER = $HTTP_SERVER_VARS;
}
// ------------------------------------- 4.1.x og 4.0.x. -------------------------------------


// ------------------------------------- Create new filename and upload's it -------------------------------------
list ($tempfile,$tempext) = split("\.",$_FILES['upfil']['name']);
$newfilename = $_POST['upfil_tablename']."_".$_POST['XXrowid']."_".round(rand(1,10000)).".".strtolower($tempext);
$til = $konfiguration["upload_bibliotek"] . "/".$newfilename;
$fra = $_FILES["upfil"]["tmp_name"];

if(function_exists("move_uploaded_file")) {
move_uploaded_file($fra, $til);
$update .= " , ".$_POST['upfil_colname']."='".$newfilename."'";
} else {
copy($fra, $til);
$update .= " , ".$_POST['upfil_colname']."='".$newfilename."'";
}

// REMOVE EXISTING PICTURE
$sqldelete = "SELECT ".$_POST['upfil_colname']." FROM ".$_POST['XXtablename']." WHERE id ='".$_POST['XXrowid']."'";
$rsdelete = mysql_query($sqldelete);
$rowdelete = mysql_fetch_object($rsdelete);


$delete = $konfiguration["upload_bibliotek"] . "/".$rowdelete->{$_POST['upfil_colname']};
print $delete;
if (file_exists($delete)){
unlink($konfiguration["upload_bibliotek"] . "/".$rowdelete->{$_POST['upfil_colname']});
}else{
Print "<br><br>DID NOT DELETE<br><br>";
print $konfiguration["upload_bibliotek"] . "/".$rowdelete->{$_POST['upfil_colname']};
}
// REMOVE EXISTING PICTURE


$sqlpic = "UPDATE ".$_POST['XXtablename']." SET". $update." WHERE id ='".$_POST['XXrowid']."'";
$sqlsave = str_replace("SET ,", "SET", $sqlpic);
mysql_query($sqlsave) or print mysql_error();


}
?>
Avatar billede dorgbar Nybegynder
01. november 2004 - 09:23 #1
kan ikke liuge umidelbart overskue din kode :)
men har selv haft samme problem et par gange fordi jeg har genbrugt variabler.
Avatar billede jaw Nybegynder
01. november 2004 - 15:39 #2
Jeg kan heller ikke lige overskue den. Og har lige siddet i fly i 24 timer, så vil heller ikke prøve :)

Men et bud vil være, at hvis du bruger $_FILES['upfile']['type'] f.eks., så skal du have begge felter med, altså:

$_FILES['upfile']['type'][0]
$_FILES['upfile']['type'][1]
etc. etc.
Avatar billede mhass Nybegynder
01. november 2004 - 20:06 #3
Jeg fik langt om længe løst problemet med at kombinere id-nummeret på rækken af tabellen fra db'en med NAME taget på form-fields'ne, og derefter lave hele koden dynamisk.

Faktisk viste problemet sig at være, at alle variabel navne ikke var unikke, hvilket jeg vel kunne have sagt mig selv :-)
Avatar billede jaw Nybegynder
01. november 2004 - 20:28 #4
Jamen, så selv tak...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester