Avatar billede kentora Nybegynder
21. juni 2008 - 10:24 Der er 11 kommentarer og
1 løsning

Hjælp til upload system med MySQL

Jeg har det her script, som jeg har fundet på nettet. Jeg har dog kodet lidt ind i selv, så det passer bedre til min side og sat en privat knap på.

Men nu skal jeg have sat lidt mere på den. Der er nemlig det problem, at hvis jeg uploader flere med det samme navn, så bliver der bare flere i MySQL basen, og den sletter tidligere filer. Derfor vil jeg have lavet den sikret mod dobbelt upload. altså flere uploads med samme navn.

Jeg havde forestillet mig noget med at den henter nogle informationer ud fra MySQL databasen, og ser om der allerede er en med det navn.

<?
$uploadDir = \'upload/\'; //Bibliotek hvor filer uploades til - husk chmod 777
$allowedFileTypes = array(\'odt\',\'doc\',\'pdf\'); //Hvilke filer vil vi acceptere bliver uploadet?

//Er der trykket på Upload file knappen?
if(isset($_POST[\'myUpload\']))
{
  //Har vi en fil?
  if(is_uploaded_file($_FILES[\'myFile\'][\'tmp_name\']))
  {
    //Filendelse
    $extension = strtolower(pathinfo($_FILES[\'myFile\'][\'name\'],PATHINFO_EXTENSION));
 
    //Er filen en af de filer vi gerne vil have?
    if(in_array($extension,$allowedFileTypes))
    {
      //Vi flytter filen fra tmp til vores UPLOADDIR
      if(move_uploaded_file($_FILES[\'myFile\'][\'tmp_name\'],$uploadDir . basename($_FILES[\'myFile\'][\'name\'])))
      {
        echo \'<h3 style=\"color:green;\">Filen (\'.basename($_FILES[\'myFile\'][\'name\']).\') er uploaded</h3><br><a href=\"upload\" target=\"_self\">se uploadede filer</a>\';

$check = $_POST[\'check\'];
$ting = $_FILES[\'myFile\'][\'name\'];
if($check == privat) {
$bruger = $_SESSION[\'brugernavn\'];
} else {
$bruger = all;};
mysql_query(\"INSERT INTO `upload` ( `navn` , `sti` , `bruger` )
VALUES ( \'$ting\' , \'$ting\' , \'$bruger\' );\");
};
      }
      else
      {
        echo \'<h3 style=\"color:red;\">Fejl - ikke i stand til at uploade filen: \'.basename($_FILES[\'myFile\'][\'name\']).\'</h3>\';
      }
    }
    else
    {
      echo \'<h3 style=\"color:red;\">Forkert filtype! tilladte filtyper er: (\'.implode(\',\',$allowedFileTypes).\')</h3>\';
    }
  }
  else
  {
    echo \'<h3 style=\"color:red;\">Vælg en fil!<h3>\';
  }

//Vores form
echo \'<form action=\"upload.php\" method=\"post\" enctype=\"multipart/form-data\">\';
echo \'File (\'.implode(\',\',$allowedFileTypes).\'): <input type=\"file\" name=\"myFile\"><br />\';
echo \'Privat<input type=\"Checkbox\" name=\"check\" value=\"privat\"><br>\';
echo \'<input type=\"submit\" name=\"myUpload\" value=\"Upload file\">\';
echo \'</form>\';
};
?>

håber der nogen der kan hjælpe mig. Vidste ikke lige om jeg skulle lave det her spørgsmål her, eller unde MySQL...
Avatar billede kjeldsted Novice
21. juni 2008 - 11:28 #1
Du skal vel bruge noget der ligner:?

mysql_query("SELECET NULL FROM tabel WHERE navn='$navn'");
if(mysql_num_rows>0)
  {
  die('Navnet findes'); //Eller hvad der nu end skal ske hvis navnet eksistere
  }

Er det rigtig forsåtet?
Avatar billede kjeldsted Novice
21. juni 2008 - 11:29 #2
Hov. En lille stave fejl havde vist sneget sig ind. Det skal selvfølgelig være:

mysql_query("SELECT NULL FROM tabel WHERE navn='$navn'");

;-)
Avatar billede kjeldsted Novice
21. juni 2008 - 11:31 #3
Puha, er vist træt i dag:

mysql_query("SELECT NULL FROM tabel WHERE navn='$navn'");
if(mysql_num_rows($result)>0)
  {
  die('Navnet findes'); //Eller hvad der nu end skal ske hvis navnet eksistere
  }
Avatar billede kentora Nybegynder
21. juni 2008 - 12:04 #4
Ja, men hvor skal det sættes ind, før at den ikke uploader filen først, og at jeg kan få fat i navnet? Hvis den kommer der hvor jeg sætter informationerne ind i tabelen vil den fil der er uploadet, jo blive overskrevet....
Avatar billede kjeldsted Novice
21. juni 2008 - 12:12 #5
Det ser ud til at du kan placere den hér:

  //Har vi en fil?
  if(is_uploaded_file($_FILES[\'myFile\'][\'tmp_name\']))
  {
  $navn = $_FILES['myFile']['tmp_name']
  mysql_query("SELECT NULL FROM tabel WHERE navn='$navn'");
  if(mysql_num_rows($result)>0)
    {
    die('Navnet findes'); //Eller hvad der nu end skal ske hvis navnet eksistere
    }
    //Filendelse
    $extension = strtolower(pathinfo($_FILES[\'myFile\'][\'name\'],PATHINFO_EXTENSION));

Og husk nu at bruge die('Besked') og ikke en echo. Du kan dog også bruge exit(); hvis ikke der skal udskrives en tekst.
Avatar billede mbw Nybegynder
22. juni 2008 - 11:56 #6
Er det ikke nemmere bare at gøre navne feltet i databasen Unique. Så slipper du for at skulle lave flere opslag i databasen.
Avatar billede kentora Nybegynder
22. juni 2008 - 13:35 #7
nej, for så uploader og erstatter den jo stadig de gamle filer... hvis nu du f.eks har lavet en dansk stil, men mangler lidt som du vil lave derhjemme. så uploader du den, og når du kommer hjem er den erstattet med en andens danske stil... Det er jo ikke sjovt
Avatar billede soerenlyn Nybegynder
22. juni 2008 - 13:38 #8
Hvordan ser dit database schema ud? Dvs. hvilke felter har du tilknyttet din tabel?
Avatar billede kentora Nybegynder
22. juni 2008 - 13:43 #9
id, sti, navn, bruger
Avatar billede soerenlyn Nybegynder
22. juni 2008 - 13:56 #10
Okay. Jeg har ikke forstået dit problem helt: Er det at hvis nogle vil tilføje en fil med det navn der allerede findes, så overskrives gamle med det navn? Og det er muligt at redigere filer der allerede er uploadet?
Avatar billede kentora Nybegynder
31. januar 2010 - 20:36 #11
Utrolig gammel tråd. Skammer mig over ikke at have fået lukket den :(

kjeldsted du får point!
Avatar billede kjeldsted Novice
31. januar 2010 - 22:20 #12
Jamen, æh, så får du da et svar hér.
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