[PHP][MySQL] File opslaan onder andere naam

Pagina: 1
Acties:

Onderwerpen


Verwijderd

Topicstarter
Hallo,

Momenteel ben ik bezig een database te maken waarin gegevens over bepaalde personen komen te staan. Ook moeten hierin geluidssamples van deze personen worden opgenomen. Uit andere topics heb ik begrepen dat het niet handig is de mp3 zelf in de database te bewaren, omdat het hier niet voor gemaakt is. Daarom heb ik het momenteel op deze manier opgelost:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?
if(1==1) {
  $target_path = "uploads/";
  $target_path = $target_path . basename($_FILES['sample']['name']);

  if(move_uploaded_file($_FILES['sample']['tmp_name'], $target_path));
    echo "The file has been uploaded";
  } else {
    echo "The file has NOT been uploaded";
  }
} else {
  echo "Er is iets mis met de computer";
}
$sample = $target_path;

// En dan de query:
$query = "INSERT INTO tabel (sample) VALUES '$sample')";

?>

Kortom: ik upload de file, en sla alleen de link naar de file op in de database. Hierdoor kan ik naderhand het bestand gewoon downloaden. Maar om ervoor te zorgen dat het geen zooitje wordt in de uploads-map, wil ik graag het bestand renamen mbv rename("$nieuwe_naam", "$oude_naam"). Maar ik wil de nieuwe naam afhankelijk maken van de primary key in de database, die door MySQL wordt gegenereerd. Is dit mogelijk?

  • Noork
  • Registratie: Juni 2001
  • Niet online
Ja dit kan. Maar hiervoor moet je eerst de insert uitvoeren. Vervolgens met last_insert_id(); het id opvragen. ( Ik ga ervanuit dat dus de primary key een id is )

  • Nielsz
  • Registratie: Maart 2001
  • Niet online
mysql_insert_id();

en dan 'm renamen naar dat id :)

Verwijderd

Topicstarter
Maar moet ik dan eerst de persoonlijke gegevens inserten, dan het id opvragen, renamen, en dan de file inserten?

Kortom: 2 inserts doen?
Dan wordt de 2e insert toch een update?

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 18-09 14:42
Je hoeft het bestandnaam niet op te slaan als je de bestanden bewaard onder het ID van het records. Dus "1.mp3" voor het record met primary key 1.

Je doet dus 1 INSERT, vraagt het ID op met mysql_insert_id(), en rename-d het bestand naar dat ID.

Verwijderd

Je kunt ook met een query het eerstvolgende autoincrement-ID opvragen. Op die wijze weet je al van te voren welk ID je nieuwe insert gaat krijgen en kun je aan de hand daarvan je bestandsnaam wijzigen en opslaan. Even zoeken binnen de functies van MySQL dus.

Verwijderd

Topicstarter
Voor de volledigheid post ik even mijn huidige oplossing:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
$uploadbestand = "a";

//De file uploaden
if(1==1) {

    $target_path = "uploads/";
    $target_path = $target_path . basename( $_FILES['sample']['name']);

    if(move_uploaded_file($_FILES['sample']['tmp_name'], $target_path)) {
        echo "<li />The file ". basename( $_FILES['sample']['name']). " has been uploaded. ";
    } else {
        echo "<li />Uploaden van het bestand is niet gelukt. ";
        $target_path = "";
        $uploadbestand = "b";
    }
}
$sample = $target_path;

//Query 1
$query = "INSERT INTO tabel (sample) VALUES '$sample')"; 
mysql_query($query);

//Filenaam van de sample updaten, query 2
if(!$uploadbestand = "b"){
    $oldname = "uploads/" . basename( $_FILES['sample']['name']);
    $newname = "uploads/" . mysql_insert_id() . ".mp3";
    $acteur_id = mysql_insert_id();
    rename("$oldname","$newname") or die("Helaas hernoemen mislukt");

    $query2 = "UPDATE acteurs SET sample = '$newname' WHERE acteur_id = '$acteur_id'";
    if(!mysql_query($query2))
    {
        die ("<li />De query2 kan niet verzonden worden.");
    }
    else
    {
        echo "De url is aangepast";
    }
}

Ik heb het nu dus opgelost met een insert en een update.

Overigens had ik de oldname en de newname verkeerd om geplaatst in een eerdere post, wat ook nog voor enkele kopzorgen heeft gezorgd.

[ Voor 16% gewijzigd door Verwijderd op 22-09-2005 11:04 ]


Verwijderd

Topicstarter
Ik kan het inderdaad ook oplossen met 1 query, en dan op het moment dat ik de gegevens ophaal uit de database, zelf de url genereren. Dit scheelt ook weer informatie in de database, maar op dit moment komt de huidige oplossing mij wat duidelijker over. Ook weet ik niet hoe ik anders kan laten zien als er géén sample is geupload. Dat heb ik nu op de volgende manier gedaan:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if (mysql_num_rows($Result)>0)
{
    while ($aRow = mysql_fetch_array($Result, MYSQL_ASSOC))
    {
        If (!$aRow['sample'] == ""){
            echo '<a href="'.$aRow['sample'].'">link</a>';
        } else {
            echo 'geen sample';
        }
    }
}
else
{
    echo "geen resultaten";
}

Allicht kan ik ook echo '<a href="uploads/'.id.'.mp3">link</a>'; gebruiken, of iets in die trend. Met een if zou ik dan kunnen kijken of er uberhaubt een mp3 is om een url van te maken.


Bedankt voor de reacties!
Pagina: 1