[asp] variable doorgeven met een actie eraan

Pagina: 1
Acties:

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 17:10
Hi,

ik ben thuis bezig om voor mezelf een beheer tool te bouwen voor mijn eigen site. (meer om asp te leren dan om het nut ervan :))
Nu heb ik het volgende:
ik heb een database. Daarin staan de volgende gegevens:
id|url|door|datumtijd

id: autonummering
url: /directory/images/"hier de imagenaam wat geupload is"
door: persoon die geupload heeft
datumtijd: spreekt voor zich :)

Nu kan ik dus allemaal files gaan uploaden enzo, en evt. ook uit de database verwijderen. Maar dan worden ze dus nog niet van de harde schijf verwijderd.

Nu d8 ik aan het volgende: in het overzicht waar dus al die files staan per file een link maken naar: /cms/deletefile.asp?file=/directory/images/imagenaam.jpg

is dit handig c.q veilig. En is het uberhaupt wel mogelijk om op die manier een file te deleten van de server?
code:
1
2
3
4
5
6
7
8
<%
'deletes the file myfile.txt from the d drive
Dim objFSO, filenaam
filenaam = Request("file")
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
objFSO.DeleteFile ("filenaam")
Set objFSO = Nothing
%>

In dit voorbeeldje wordt dus de url variable file=/directory/images/imagenaam.jpg aangevraagd en in de var: filenaam gestopt. Waarna het file wordt verwijderd van de harde schijf. Toch?

Heart..pumps blood.Has nothing to do with emotion! Bored


  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
Lijkt me te kloppen, misschien is het beter om altijd zelf een unieke naam te genereren voor een image, als iemand een plaatje met zelfde naam upload overschrijft hij hem waarschijnlijk, of als ie hem niet overschrijft maar wel in db zet en hem delete dat ie de oude file weghaalt.

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 17:10
Op maandag 12 november 2001 15:46 schreef raptorix het volgende:
Lijkt me te kloppen, misschien is het beter om altijd zelf een unieke naam te genereren voor een image, als iemand een plaatje met zelfde naam upload overschrijft hij hem waarschijnlijk, of als ie hem niet overschrijft maar wel in db zet en hem delete dat ie de oude file weghaalt.
mee eens... maar het finetunen etc. etc. komt nog.

Die request ("file") die hoef ik toch niet op de vorige pagina al te maken toch? dat trekt ie toch gewoon uit de url variable? dan heb ik vanavond weer wat te doen iig :)

maar thanks iig voor de tip. had ik nog nie bij stil gestaan :)

Heart..pumps blood.Has nothing to do with emotion! Bored


  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 08:12

Crazy D

I think we should take a look.

Ik neem aan dat je uit een selectie lijstje de url aanklikt welke je wilt deleten, dan het id meegeeft aan de volgende pagina van de betreffende url in de db? Dan kun je in hetzelfde script de plaatjes laten verwijderen.

Exact expert nodig?


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 17:10
Op maandag 12 november 2001 16:15 schreef Crazy_D het volgende:
Ik neem aan dat je uit een selectie lijstje de url aanklikt welke je wilt deleten, dan het id meegeeft aan de volgende pagina van de betreffende url in de db? Dan kun je in hetzelfde script de plaatjes laten verwijderen.
nee het wordt geen dropdowntje. het wordt gewoon 1 lange lijst (of gesplits in 10 of 20 oid) met files. Daarnaast een link naar de pagina die het delete gebeuren doet.

Heart..pumps blood.Has nothing to do with emotion! Bored


  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 08:12

Crazy D

I think we should take a look.

Ja nou ja komt op hetzelfde neer.
Op een aparte pagina lees je het meegegeven ID uit en die delete je uit de db? Toch?
Dan kun je op diezelfde plek de image deleten...

Exact expert nodig?


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 17:10
het id uit de db deleten lukt me wel. no problemo daarmee. Maar aan die id hangt ook nog een url (/images/imagenaam.jpg) nu moet dus die image ook nog fysiek van de harde schijf verwijderd worden.

ik tik in: http://blablalba/imagedelete.asp?file=imagenaam.jpg
Imagedelete.asp bevat de volgende code:
code:
1
2
3
4
5
6
7
8
<%
Dim objFSO, filenaam
filenaam = Request("file")
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
objFSO.DeleteFile filenaam
Set objFSO = Nothing
'Response.Write filenaam
%>

objFSO.DeleteFile filenaam: daar krijg ik de error: kan bestand niet vinden.
Als ik objFSO.DeleteFile filenaam eruit haal, en gebruik die Response.Write regel, doet ie het wel gewoon. Of tenminste, hij geeft de filenaam weer.

Iemand?

Heart..pumps blood.Has nothing to do with emotion! Bored


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 17:10
darn... bedenk me nu ook nog dat het 2 dingen tegelijk moet doen:

1. op basis van het id het record verwijderen
en
2. het file fysiek verwijderen...

* TeeDee heeft zich weer wat op de hals gehaald volgens mij :)

Heart..pumps blood.Has nothing to do with emotion! Bored


Verwijderd

Je moet van je filenaam wel een heel pad maken anders kan ie em niet vinden, FSO kent alleen filesysem refs.
Iets als "/images/bla.jpg" kan ie dus niet wissen maar iets als "d:\images\bla.jpg" wel.
Van de een naar de ander doe je met Server.MapPath("/images/bla.jpg").

Overigens heeft de anonymous IIS user standaard vaak ook geen rechten om files te schrijven/wissen dus dat moet je ook nog aanpassen.

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 17:10
Op maandag 12 november 2001 19:10 schreef Kerrick het volgende:
Je moet van je filenaam wel een heel pad maken anders kan ie em niet vinden, FSO kent alleen filesysem refs.
Iets als "/images/bla.jpg" kan ie dus niet wissen maar iets als "d:\images\bla.jpg" wel.
Van de een naar de ander doe je met Server.MapPath("/images/bla.jpg").

Overigens heeft de anonymous IIS user standaard vaak ook geen rechten om files te schrijven/wissen dus dat moet je ook nog aanpassen.
Thanks, dat was het....

Kan ik dan _en_ een db delete doen _en_ een harde schijf delete in 1 keer doen?

en dat van die IIS user heb ik al aangepast... dat werkt al...

Heart..pumps blood.Has nothing to do with emotion! Bored


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 17:10
want als ik het zo bekijk wordt het dus:

1. het deleten van het file op de harde schijf gaat op basis van de filenaam
2. het delete van het record in de db kan toch alleen op basis van het id??

Alle voorbeeldjes die ik heb gevonden werken allemaal op basis van het Id.

Sorry hoor, maar ik ben jullie toch nie te veel tot last?

Heart..pumps blood.Has nothing to do with emotion! Bored


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 17:10
<< blaat...>>

ik heb het opgelost mede dankzij jullie (of eerlijk gezegd een groot deel hebben jullie gedaan ;)

iig weer wat geleerd...

Heart..pumps blood.Has nothing to do with emotion! Bored


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 17:10
nog 1 kleine vraag (als het mag :))
ik heb het nu zover dat ik: 1. de Id kan doorgeven _en_ de filename zodat het verwijderd kan worden. Maar ik krijg de volgende error code:
code:
1
2
3
Microsoft JET Database Engine error '80040e07' 
Gegevenstypen komen niet overeen in criteriumexpressie. 
/blabla/imagedelete.asp, line 23

dat gebeurt met de volgende delete code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<%
' variabelen aangeven
Dim code, data_source, con, sql_delete
code = Request ("Id")
data_source = "Provider=Microsoft.Jet.OLEDB.4.0; 
Data Source=" & Server.MapPath("dbdirectory/database.mdb")
sql_delete = "DELETE FROM images WHERE Id='code'" 

' maakt de connectie
Set con = Server.CreateObject("ADODB.Connection")
con.Open data_source
con.Execute sql_delete
' klaar is klara... afsluiten maar!
con.Close
Set con = Nothing
Response.redirect "default.asp"
%>

ik heb al bij microsoft gezocht naar die foutmelding (maar dan snap ik er nog niks van)

Voor het sql verhaal zit nog dit stukje code:
code:
1
2
3
4
5
6
7
<%
Dim objFSO, filenaam, recordid
filenaam = "blablablabla\"&Request("file")
Response.Write filenaam & "<br>"
recordid = Request("Id")
Response.Write recordid
%>

Ik snap dus totaal niks van die error, zou iemand mij daar wat over kunnen vertellen? plz?

/edit:
regel 23 is: con.Execute sql_delete

/edit 2:
ik heb dit ook al geprobeerd:
sql_delete = "DELETE FROM images WHERE Id='"Request("Id")"'" ] maar dat gaat ook al niet...

Heart..pumps blood.Has nothing to do with emotion! Bored


Verwijderd

Je ID was toch autonummering? Dus geen quotjes om code:
code:
1
sql_delete = "DELETE FROM images WHERE Id=code"

Het verwijderen zou ik met een ID doen, dus zoiets als
-Bestandsnaam mbv id uit database halen
-Bestand verwijderen
-Record uit database verwijderen

Ik zou in je database geen directories zetten. De plaatjes staan toch altijd in de zelfde directory?

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 17:10
Op maandag 12 november 2001 21:31 schreef Doekman het volgende:
Je ID was toch autonummering? Dus geen quotjes om code:
code:
1
sql_delete = "DELETE FROM images WHERE Id=code"

Het verwijderen zou ik met een ID doen, dus zoiets als
-Bestandsnaam mbv id uit database halen
-Bestand verwijderen
-Record uit database verwijderen

Ik zou in je database geen directories zetten. De plaatjes staan toch altijd in de zelfde directory?
- alle plaatjes staan in 1 bepaalde dir
- sql_delete = "DELETE FROM images WHERE Id='Id'"
zou in principe wel kunnen, maar waar haalt ie die 2e id vandaan dan?
Ik geef de id code door in een url (imagedelete.asp?Id=xx&filename=imagenaam.jpg).
Dan moet ik die ID toch uitlezen met: Request ("Id") ???

Dat kan ik toch in die sql code douwen

Heart..pumps blood.Has nothing to do with emotion! Bored


  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 08:12

Crazy D

I think we should take a look.

Op maandag 12 november 2001 21:54 schreef TeeDee het volgende:
- alle plaatjes staan in 1 bepaalde dir
Dan hoef je dus enkel de filenaam op te slaan.
En als je wilt voorkomen dat er dubbele name in voorkomen, kun je ze renamen naar het id waar ze bij horen. Hoef je alleen nog maar de extensie op te slaan.
- sql_delete = "DELETE FROM images WHERE Id='Id'"
Alleen dan zonder de ' en ' om de 2e Id heen, en die 2e id moet een getalletje zijn :)
zou in principe wel kunnen, maar waar haalt ie die 2e id vandaan dan?
Ik geef de id code door in een url (imagedelete.asp?Id=xx&filename=imagenaam.jpg).
Dan moet ik die ID toch uitlezen met: Request ("Id") ???
Yup. Al zou ik er wel wat controlles omheen zetten. Offie echt numeriek is en niet een leuk Sql statement... En offie niet te lang is, dat soort dingen. Zeker weten dat het een geldig ID zou kunnen zijn. En dan kun je 'm in de query proppen ja.
Dus iets als
Dim iId
iId = Request.QueryString("id")
' hier de controles of het wel echt een nummertje is
' query opbouwen
".. where Id = " & iId

Maar je hoeft dus niet in de url de filenaam mee te geven. Je hebt in je database (o.a.) een id en een filenaam (of extensie, zie boven). Dan 'weet' je dus als je een id meekrijgt, welk plaatje erbij hoort.
Kun je dus eerst ff in de database de filenaam opvragen, record deleten, plaatje deleten. Klaar.

Exact expert nodig?


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 17:10
Op maandag 12 november 2001 22:39 schreef Crazy_D het volgende:

[..]

Dan hoef je dus enkel de filenaam op te slaan.
En als je wilt voorkomen dat er dubbele name in voorkomen, kun je ze renamen naar het id waar ze bij horen. Hoef je alleen nog maar de extensie op te slaan.
[..]

Alleen dan zonder de ' en ' om de 2e Id heen, en die 2e id moet een getalletje zijn :)
[..]

Yup. Al zou ik er wel wat controlles omheen zetten. Offie echt numeriek is en niet een leuk Sql statement... En offie niet te lang is, dat soort dingen. Zeker weten dat het een geldig ID zou kunnen zijn. En dan kun je 'm in de query proppen ja.
Dus iets als
Dim iId
iId = Request.QueryString("id")
' hier de controles of het wel echt een nummertje is
' query opbouwen
".. where Id = " & iId

Maar je hoeft dus niet in de url de filenaam mee te geven. Je hebt in je database (o.a.) een id en een filenaam (of extensie, zie boven). Dan 'weet' je dus als je een id meekrijgt, welk plaatje erbij hoort.
Kun je dus eerst ff in de database de filenaam opvragen, record deleten, plaatje deleten. Klaar.
ik heb nu:
sql_delete = "DELETE FROM images WHERE Id="& iId
en dat werkt perfect.
al die zooi van checks enzo moet ik nog inbouwen...

mijn dank is wederom groot..... thanks all!

Heart..pumps blood.Has nothing to do with emotion! Bored

Pagina: 1