Avatar billede s-tone Nybegynder
03. november 2005 - 20:45 Der er 27 kommentarer og
1 løsning

Omdøbe en fil

Hej eksperter, har to spørgsmål som jeg håber i kan hjælpe mig med.
1: Hvordan kan man omdøbe en fil når man uploader den, evt til ID nummeret da det jo er unikt.
2: Når jeg uploader en fil bliver filnavnet gemt i databasen, er det muligt at lave filnavnet om til et link så man kan downloade den ved at trykke på den. Jeg bruger følgende til at vise indholdet af databasen:
-----------------------------
$i=0;
  while($i < $total_cols){
    print "<td>";
    print $row[$i];
    print "</td>";
    $i++;
  }
  print "</tr>";

  while($row = mysql_fetch_row ($result)) {
    $i = 0;
    print "<tr>";
    while($i < $total_cols){
      print "<td>";
      print $row[$i];
      print "</td>";
      $i++;
---------------------------------------
På forhånd tak,
Avatar billede jaw Nybegynder
03. november 2005 - 20:47 #1
2:
      print "<a href='".$row[$i]."'>".$row[$i]."</a>";

1:
Omdøbningen er nok nemmest at foretage i selve uploadscriptet. Du har nok en lille med move_uploaded_file( ... ) ?
Avatar billede jakobdo Ekspert
03. november 2005 - 20:48 #2
til at omdøbe en fil, kan du bruge: move_uploaded_file()
Eller evt: rename()
Du kan lave et link med: <a href=\"sti_til_filen\$row[$i]\">Download</a>
Avatar billede s-tone Nybegynder
03. november 2005 - 20:58 #3
Tak for begge input, men hvis jeg bruger row[$i] bliver det så ikke gjort på alle felter?
Avatar billede jakobdo Ekspert
03. november 2005 - 21:04 #4
Jo det gør det!
Men så kunne du evt overveje at bruge:
$row = mysql_fetch_assoc($query);
og derefter benytte:
$row["file"];
$row["size"];
og hvilke felter du ellers måtte have i din db.
Avatar billede s-tone Nybegynder
03. november 2005 - 21:19 #5
Så crashede firefox tror jeg fik lavet ged i løkken...
Kan du ikke vise et mere præcist eksempel?
Prøvede også rename men fik denne fejl:
Warning: rename(,fsdfs) [function.rename]: Permission denied in test.php on line 84
Avatar billede jakobdo Ekspert
03. november 2005 - 21:22 #6
Det med at kalde row["feltnavn"] det kommer an på hvad dine felter hedder i din tabel!
hedder de f.eks.:
billede_id, billede_navn, billede_size osv..
Så kan du bruge:
echo $row["billede_id"];
echo $row["billede_navn"];
echo $row["billede_size"];
osv.
Avatar billede jakobdo Ekspert
03. november 2005 - 21:22 #7
Det er nok nemmest at bruge move_uploaded_file().
For som jaw er inde på, så bruger du den nok allerede i dit upload script.
Avatar billede s-tone Nybegynder
03. november 2005 - 21:26 #8
Prøvede med :
if(function_exists("move_uploaded_file")) {
    rename($_REQUEST[upfile][name], $size);
    move_uploaded_file($fra, $til);
  } else {
    copy($fra, $til);
  }
Tror jeg bruger den forkert...
Avatar billede s-tone Nybegynder
03. november 2005 - 22:05 #9
Prøvede også at ændre $row = mysql_fetch_row($result);
til: $row = mysql_fetch_assoc($query);
men får fejlen: Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in test.php on line 25
Hvad gør jeg galt?
Avatar billede jaw Nybegynder
03. november 2005 - 22:22 #10
Så har du en fejl i din forespørgsel.
Avatar billede s-tone Nybegynder
03. november 2005 - 22:50 #11
Det går fremad, fik rettet nogen små fejl, men på den første række viser den fx:
"billede_id billede_id billede_id billede_id" istedet for "billede_id billede_navn billede_size"
Og på resten af linjerne køre den det hele sammen og gentager det fx:

billede_idbillede_navnbillede_size billede_idbillede_navnbillede_size

Håber i forstår hvad jeg mener...
Avatar billede jaw Nybegynder
03. november 2005 - 23:07 #12
Prøv:
echo $row["billede_id"]." ".$row["billede_navn"]." ".$row["billede_size"];
Avatar billede s-tone Nybegynder
03. november 2005 - 23:40 #13
Kan stadig ikke få det til at virke rigtigt. Er ved at blive meget forvirret nu.. Du kan se hele koden på: http://www.osob.dk/subs/test.phps
Avatar billede jakobdo Ekspert
04. november 2005 - 08:06 #14
Hvorfor har du 3 while?
Burde denne ikke være nok:
while($row = mysql_fetch_assoc($resultat))
{
print "<tr>";
print "<td>";
print $row["film"];
print $row["format"];
print $row["size"];
print $row["framerate"];
print $row["cder"];
print $row["user"];
print $row["tid"];
print "</td>";
print "</tr>";
}
Avatar billede s-tone Nybegynder
04. november 2005 - 11:12 #15
Har prøvet med en while, men den køre den kun 1 gang så det kun det første resultat der vises.
Avatar billede jakobdo Ekspert
04. november 2005 - 12:55 #16
Prøv lige denne testkode:

function ShowTable($name){
  MYSQL_CONNECT(localhost, xxxx, xxxx) OR DIE("Unable to connect");
  @MYSQL_SELECT_DB("data") OR DIE("Unable to select database");
$query = "select film,format,size,framerate,cder,user,tid from subs";
  $resultat = MYSQL_QUERY($query);
  $total_rows = mysql_num_rows($resultat);
while($row = mysql_fetch_assoc($resultat))
{
print "<tr>";
print "<td>";
print $row["film"];
print $row["format"];
print $row["size"];
print $row["framerate"];
print $row["cder"];
print $row["user"];
print $row["tid"];
print "</td>";
print "</tr>";
}
}
Avatar billede s-tone Nybegynder
04. november 2005 - 13:56 #17
Fik tilføjede nogen flere ting i databasen og fandt ud af:
Hvis bruger det ovenover alene viser den det hele men, hvis jeg bruger det i mit dokument viser den alle undtagen en og det hvergang.
Meget underligt...
Avatar billede jakobdo Ekspert
04. november 2005 - 15:28 #18
Så skal du jo rette lidt i dit dokument! :o)
Avatar billede s-tone Nybegynder
04. november 2005 - 15:44 #19
Ja det tror jeg også, spørgsmålet er bare hvor der går ged i det...
Det ser sådan her ud nu : http://www.osob.dk/subs/config.phps
Er ved at køre træt i det....
Avatar billede jakobdo Ekspert
04. november 2005 - 16:15 #20
Prøv dette:

<?
function ShowTable($name)
{
    MYSQL_CONNECT(localhost, xxxx, xxxx) OR DIE("Unable to connect");
    @MYSQL_SELECT_DB("data") OR DIE("Unable to select database");
    $query = "select film,format,size,framerate,cder,user,tid from subs";

    $resultat = MYSQL_QUERY($query);
    $total_rows = mysql_num_rows($resultat);
 
  if (!$total_rows)
  {
      print "<HTML><BODY><h1>Tom!</h1></BODY></HTML>";
        return;
  }
 
    $menu = '<thead>
                        <tr>
                            <th>Film navn</th>
                            <th>Format</th>
                            <th>St?rrelse</th>
                            <th>Framerate</th>
                            <th>Antal cder</th>
                            <th>Posted by</th>
                            <th>Dato og tid</th>
                        </tr>
                </thead>';
 
  $tallet = '<thead>
                            <tr>
                    <th>Hovedmenu</th>
                    <th>Undertekster</th>
                    <th>Upload</th>
                    <th>Links</th>
                <th>S?g</th>
                                <th>About</th>
                <th>Logind</th>
                    </tr>
                    </thead>';
 
  $style = '<link href="css.css" rel="stylesheet" type="text/css">';
  $div = '<div id="container">
            <img src="header2.jpg" alt="Undertekster"/>';
  print "<HTML>";
  print "<HEAD>";
  print $style;
  print "</HEAD>";
  print "<BODY>";
  print $div;
  print "<table width='100%' border='0' cellspacing='0' cellpadding='0' align='center'>";
  print "<tr class='blue'><td colspan=$total_cols align=center>:: Tekst</td></tr>";
  print $tallet;
  $url = $row["url"];
  print $menu;
    while($row = mysql_fetch_assoc($resultat))
    {
        print "<tr>";
        print "<td>";
        print "<a href='".$url."'>".$row["film"]."</a>";
        print "</td>";
        print "<td>";
        print $row["format"];
        print "</td>";
        print "<td>";
        print $row["size"];
        print "</td>";
        print "<td>";
        print $row["framerate"];
        print "</td>";
        print "<td>";
        print $row["cder"];
        print "</td>";
        print "<td>";
        print $row["user"];
        print "</td>";
        print "<td>";
        print $row["tid"];
        print "</td>";
        print "</tr>";
    }
    print "</TABLE></BODY></HTML>";
}

ShowTable("subs");
echo $order;
?>
Avatar billede s-tone Nybegynder
04. november 2005 - 16:37 #21
Det virker :), hvad havdejeg lavet fejl i?
Nu skal jeg bare få det der rename til at virke nogen ide om hvorfor den siger acces denied ?
Avatar billede jakobdo Ekspert
04. november 2005 - 22:29 #22
Det var noget med din $row = mysql_fetch_assoc();
Nu kan jeg ikke se din kode længere, så kan ikke lige huske det.
Access denied er fordi du ikke har lov til at omdøbe filen!
Men kan vi ikke se dit upload script?
Og et svar!
Avatar billede s-tone Nybegynder
05. november 2005 - 02:14 #23
Okay, min upload del ser sådan her ud:

if(function_exists("move_uploaded_file")) {

    move_uploaded_file($fra, $til);
  } else {
    copy($fra, $til);
  }
Avatar billede jakobdo Ekspert
05. november 2005 - 09:07 #24
For at omdøbe til de id du har i databasen, så skal du efter du har inserted dine data i databasen, kalde: mysql_insert_id() den vil give dig id'et på den netop indsatte række.
Så kan du bruge det i din $til variabel:
$til = "file_" . mysql_insert_id() . ".jpg";
Eller hvilken type det nu måtte være!
Avatar billede jakobdo Ekspert
05. november 2005 - 09:08 #25
Og takker for point!
Jaw: Vil du have nogle af pointene?
Avatar billede s-tone Nybegynder
05. november 2005 - 10:09 #26
Fandt noget endu mere smart på php.net:

  $unique_id = md5(uniqid(time()));
  $filename = $unique_id.'_'.$filename;

Tænkte på om der en måde jeg kunne finde endelsen på filen så jeg kunne sætte $filename til endelsen.

Du siger bare til jaw hvis du også vil have  nogen point ;)
Avatar billede jaw Nybegynder
05. november 2005 - 17:07 #27
Nej tak, ellers tak. Det var vist også dig Jakob, der arbejdede for dem :) !
Avatar billede jakobdo Ekspert
06. november 2005 - 00:31 #28
Du kan få filendelsen med:
$fil = "picture.jpg";
$filendelse = end(explode(".",$fil));
//$filendelse vil nu indeholde: jpg (eller filtypen)
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

IT-JOB

Netcompany A/S

IT Consultant

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Solution Manager til Cyberdivisionen

Politiets Efterretningstjeneste

GenAI Specialist i PET

Capgemini Danmark A/S

Market Segment Lead, CPRD