id nieuwe invoer

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Niek Weevers

Niek Weevers

02/01/2009 17:37:00
Quote Anchor link
Is het op een of andere manier mogelijk om er achter te komen wat het id wordt van het item wat je gaat toevoegen?
Ik wil namelijk dit id aan de bestandsnaam van de afbeelding toevoegen, zodat je nooit 2 dezelfde bestandsnamen krijgt.
Ik weet dat je de tabel kan uitlezen en de nieuwste id kan pakken, maar het kan zijn dat er een is verwijderd en dan klopt het niet meer, want dan is het nieuwe id niet de niewste in de database plus 1.
 
PHP hulp

PHP hulp

24/02/2024 23:58:56
 
Jesper Diovo

Jesper Diovo

02/01/2009 17:46:00
Quote Anchor link
mysql_insert_id()?
 
Bo az

Bo az

02/01/2009 17:47:00
Quote Anchor link
Dat is heel erg verschillend per database, mysql kan het alleen achteraf met mysql_insert_id waar het dan bij pgsql weer alleen vooraf kan. Het opvragen van het hoogste id + 1 is iig nooit een goed idee, dat is gok werk.
Gewijzigd op 01/01/1970 01:00:00 door Bo az
 
Frank -

Frank -

02/01/2009 17:50:00
Quote Anchor link
Boaz schreef op 02.01.2009 17:47:
Dat is heel erg verschillend per database, mysql kan het alleen achteraf met mysql_insert_id waar het dan bij pgsql weer alleen vooraf kan.
En sinds wanneer kan het in pgSQL alleen vooraf? Met nextval() kun je vooraf het volgende id opvragen, met lastval() kun je het laatst aangemaakt id opvragen, met currval() kun je het huidige id opvragen en met RETURING kun je de INSERT-query het aangemaakte id laten returnen. Diverse mogelijkheden om het gewenste id op te vragen!

In MySQL ben je verplicht om achteraf mysql_insert_id te gebruiken, andere mogelijkheden zijn er niet.
 
Bo az

Bo az

02/01/2009 17:53:00
Quote Anchor link
Sorry frang :$ spijtme, je kan wel zien dat ik nooit met pgsql werk, het ging mij om het voorbeeld, dat het verschilt.
 
Klaasjan Boven

Klaasjan Boven

02/01/2009 18:40:00
Quote Anchor link
En in Oracle kan het net zo als in PGSQL
 
Niek Weevers

Niek Weevers

02/01/2009 19:51:00
Quote Anchor link
Ik begrijp dat het dus niet goed mogelijk is. Wat zouden jullie doen, om te zorgen dat je geen dubbele bestandsnamen in de uploadmap krijgt?
 
Jurgen assaasas

Jurgen assaasas

02/01/2009 19:53:00
Quote Anchor link
Dat doet het filesystem zelf al, PHP overschrijft de file als deze al bestaat.

edit: Je kunt je bestandnamen gewoon bijv zo maken: sha1(time()) dan heb je eigenlijk nooit te maken met dubbele filenames, en wordt er ook niets overschreven.
Gewijzigd op 01/01/1970 01:00:00 door Jurgen assaasas
 
Joren de Wit

Joren de Wit

02/01/2009 19:57:00
Quote Anchor link
Niek schreef op 02.01.2009 19:51:
Wat zouden jullie doen, om te zorgen dat je geen dubbele bestandsnamen in de uploadmap krijgt?
Je kunt toch de primary key uit de betreffende tabel gebruiken als bestandsnaam? Met mysql_insert_id() krijg je wel altijd de juiste waarde terug en op die manier ben je ervan verzekerd dat elke bestandsnaam uniek is.

Dat het in andere databases makkelijker kan is waar, maar dat betekent nog niet dat het met MySQL niet te realiseren is...
 
Rens nvt

Rens nvt

02/01/2009 19:59:00
Quote Anchor link
Wat zegt het ID uit de database over het feit dat de bestandsnaam uniek is?
 
Douwe

Douwe

02/01/2009 20:02:00
Quote Anchor link
Ik gebruik meestal zoiets:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
do
{
  $sFileName = md5(rand()) . "." . $aAfbeelding['info']['extension'];
}

while(file_exists($sUploadRelatiefAdres . $sFileName));
?>


$sUploadRelatiefAdres is bij voorbeeld ../uploads/
$aAfbeelding['info'] is pathinfo($aAfbeelding['name']);
$sFileName is uiteindelijk de unieke bestandsnaam + locatie.
Gewijzigd op 01/01/1970 01:00:00 door Douwe
 
Joren de Wit

Joren de Wit

02/01/2009 20:02:00
Quote Anchor link
Rens schreef op 02.01.2009 19:59:
Wat zegt het ID uit de database over het feit dat de bestandsnaam uniek is?
Als het id de PK is, is die per definitie uniek. En als je het id als bestandsnaam gebruikt, heb je per definitie een unieke bestandsnaam ;-)
 
Rens nvt

Rens nvt

02/01/2009 20:04:00
Quote Anchor link
Blanche schreef op 02.01.2009 20:02:
Rens schreef op 02.01.2009 19:59:
Wat zegt het ID uit de database over het feit dat de bestandsnaam uniek is?
Als het id de PK is, is die per definitie uniek. En als je het id als bestandsnaam gebruikt, heb je per definitie een unieke bestandsnaam ;-)

Ja, maar je gaat er dan wel vanuit dat alle bestanden uit die folder in 1 tabel worden bijgehouden, wat je dus beperkt volgens mij... Lijkt mij beter om eerst een unieke bestandsnaam te zoeken, en dan pas de query uit te voeren...

Feit blijft dat de unieke key van 2 verschillende opslagplaatsen, die verder niet gekoppeld zijn ofzo, vrij weinig met elkaar te maken hebben... toch?
Gewijzigd op 01/01/1970 01:00:00 door Rens nvt
 
Joren de Wit

Joren de Wit

02/01/2009 20:08:00
Quote Anchor link
Rens schreef op 02.01.2009 20:04:
Ja, maar je gaat er dan wel vanuit dat alle bestanden uit die folder in 1 tabel worden bijgehouden
Dat lijkt mij niet meer dan logisch. Als de informatie over je bestanden over meerdere tabellen verdeeld is, heb je toch een foutje gemaakt bij het opzetten van je datamodel. Dat zou namelijk betekenen dat je meerdere tabellen hebt waarin dezelfde soort informatie opgeslagen wordt en dat kan niet correct zijn.

Ik zou zelf de database als basis aanhouden en de rest van het filesystem daarop afstemmen. In welke mappen je de bestanden vervolgens opslaat maakt overiges ook niet uit, die informatie sla je ook gewoon op in de database ;-)
 
Rens nvt

Rens nvt

02/01/2009 20:13:00
Quote Anchor link
Gaat me nu niet zozeer om het datamodel ;-) Ben het met je eens dat de kans vrij groot is dat het gebruiken van die key gewoon gaat werken, maar het bepalen van een unieke bestandsnaam aan de hand van een database id lijkt mij wat voorbarig... Wat als je eerst de unieke bestandsnaam bepaald aan de hand van de database, en er daarna achter komt dat die bestandsnaam op miraculeuze wijze al bestond? Dan zul je daar weer een check moeten doen, en een volgende query afschieten.

Is het niet beter om binnen het filesystem een unieke naam te zoeken, en pas daarna de insert uit te voeren?
 
Joren de Wit

Joren de Wit

02/01/2009 20:18:00
Quote Anchor link
Quote:
en er daarna achter komt dat die bestandsnaam op miraculeuze wijze al bestond
In dat geval zou de data in je filesystem niet overeenkomen met de data in je database. En dan heb je waarschijnlijk een veel groter probleem dan die unieke bestandsnaam.

Quote:
Is het niet beter om binnen het filesystem een unieke naam te zoeken, en pas daarna de insert uit te voeren?
Als je systeem goed in elkaar zit en je de database als basis aanhoudt, is dit een overbodige stap. In de database staat voor het betreffende bestand al iets unieks (de PK), dus waarom zou je met PHP nog een extra stap uitvoeren om iets anders unieks te bepalen?
 
Rens nvt

Rens nvt

02/01/2009 20:22:00
Quote Anchor link
Persoonlijke voorkeur denk ik ;-) Ik check liever dubbel dan te weinig :D
 
Crispijn -

Crispijn -

02/01/2009 20:25:00
Quote Anchor link
Maar waarom zet je geen unique op je bestandsnaam? Dan vang je 'm namelijk helemaal netjes af...
 
Joren de Wit

Joren de Wit

02/01/2009 20:28:00
Quote Anchor link
Crispijn schreef op 02.01.2009 20:25:
Maar waarom zet je geen unique op je bestandsnaam? Dan vang je 'm namelijk helemaal netjes af...
Dat is inderdaad verstandig als je zelf een bestandsnaam genereert. Maar dan blijf ik erbij, waarom iets extra's unieks genereren als de database al iets unieks gegenereerd heeft?

Het zal inderdaad een kwestie van smaak zijn. Ik ben niet zo van het dubbele controleren, één goede controle moet meer dan voldoende zijn.
 
Crispijn -

Crispijn -

02/01/2009 20:31:00
Quote Anchor link
Volgens mij heb je geen extra query nodig. Als je door de database de bestandsnaam laat genereren heb je ook weer een query nodig die deze bestandsnaam ophaalt om je file weer te hernoemen... Zo blijf je bezig. Het zet me aan het denken... Weet niet wat ik prefereer. Eerst bestandsnaam kiezen op de fileserver en dan wegschrijven of andersom... Ik heb tot nu toe altijd het eerste gedaan.
 
Frank -

Frank -

02/01/2009 20:38:00
Quote Anchor link
1) schrijf de originele bestandsnaam (en eventuele andere informatie) weg in de database
2) vraag het aangemaakte id op (primary key, dus uniek)
3) schrijf het bestand weg op het filesystem met een nieuwe naam: $id.extensie

Het is nu onmogelijk om dubbele namen te krijgen en je hebt slechts 1 query nodig om de boel in de database te zetten.
Gewijzigd op 01/01/1970 01:00:00 door Frank -
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.