67 messaggi dal 17 luglio 2002

Scusate se faccio troppe domande, ma credo che un forum serva anche a questo.

Ho compilato questa semplice paginetta, ma nn riesco a farla funzionare:

<%
idfattura= ""& session("idfattura")
datafattura=Request.form("datafattura")
numfattura=Request.form("numfattura")
importodocumento=Request.form("importodocumento")
incassato=Request.form("incassato")
dim cn
Set cn = Server.CreateObject("ADODB.Connection")
cn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=c:\inetpub\wwwroot\mdb-database\fatture.mdb"
'response.write "" & session("idfattura")
'response.end
sql = "UPDATE fatture SET datafattura=" & Request.form("datafattura") & "
sql = sql & "numfattura=" & Request.form("numfattura") &
sql = sql & "importodocumento=" & Request.form("importodocumento") &
sql = sql & "incassato=" & Request.form("incassato") &
sql = sql & " WHERE " & idfattura=" & session("idfattura") & ", cn
conn.Execute( sql )
cn.Execute(SQL)
cn.Close
set cn = nothing
response.redirect("fatture.asp")
%>

Quando la eseguo, ricevo il seguente errore:

Tipo di errore:
Errore di compilazione di Microsoft VBScript (0x800A0409)
Costante String senza terminazione
/updatefatture.asp, line 12, column 73
sql = "UPDATE fatture SET datafattura=" & Request.form("datafattura") & "
------------------------------------------------------------------------^

Potreste aiutarmi, mostrandomi dov'è l'errore e qual'è la giusta sintassi?
Grazie
lullone ha scritto:
Scusate se faccio troppe domande, ma credo che un forum serva anche a questo.

Assolutamente vero!

Potreste aiutarmi, mostrandomi dov'è l'errore e qual'è la giusta sintassi?

Prova a modificare così la creazione della stringa sql:
sql = "UPDATE fatture SET datafattura=" & Request.form("datafattura") & _
 "numfattura=" & Request.form("numfattura") & _
 "importodocumento=" & Request.form("importodocumento") & _
 "incassato=" & Request.form("incassato") & _
 " WHERE " & idfattura=" & session("idfattura")

In pratica (oltre ad avere rimosso tutte le riassegnazioni alla variabile) ho tolto un doppio apice alla fine della prima riga e il ", cn" alla fine dell'ultima.

Una nota importante: non accodare *mai* direttamente i valori recuperati dalla request durante la costruzione di istruzioni sql perché ti espone ad attacchi di sql injection (vedi http://www.aspitalia.com/articoli/asp.net2/aspnet-security-2.aspx)

HTH

Matteo Casati
GURU4.net
67 messaggi dal 17 luglio 2002
Grazie Matteo in pratica ho dovuto rivedere quasi tutto lo script.
Benedetta ignoranza...
Adesso funge
Lo script funzionante è il seguente:

<%
idfattura= ""& session("idfattura")
datafattura=Request.form("datafattura")
numfattura=Request.form("numfattura")
importodocumento=Request.form("importodocumento")
incassato=Request.form("incassato")
dim cn
Set cn = Server.CreateObject("ADODB.Connection")
cn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=c:\inetpub\wwwroot\mdb-database\fatture.mdb"
'response.write "" & session("idfattura")
'response.end
sql = "UPDATE fatture SET datafattura=#" & datafattura
sql = sql & " # ,numfattura=" & numfattura
sql = sql & ", importodocumento=" & importodocumento
sql = sql & ", incassato=" & incassato
sql = sql & " WHERE idfattura=" & idfattura
'response.write(SQL)
'response.end
cn.Execute(SQL)
cn.Close
set cn = nothing
response.redirect("fatture.asp")
%>

Grazie 1.000
Perfetto, anche se non hai ancora risolto il problema della sicurezza a cui ti accennavo prima.

Matteo Casati
GURU4.net
67 messaggi dal 17 luglio 2002
m.casati ha scritto:
Perfetto, anche se non hai ancora risolto il problema della sicurezza a cui ti accennavo prima.


Hai perfettamente ragione, ma ancora sono troppo bianco per pensare a questo.
Devo ancora risolvere problemi più semplici. anzi, ne approfitto per provare a risolverne uno:
Ho una pagina che contiene tre bottoni sulla stessa riga, il primo dovrebbe reindirizzare ad una pagina che aggiorna il record updatefatture.asp.
Il secondo dovrebbe reindirizzare ad una pagina che cancella il record deletefattura.asp ed il terzo dovrebbe annullare l'operazione.

Perchè non funge?

questo è il form incriminato:

<form method="POST" action="updatefatture.asp">
<input type="Submit" value="modifica fattura">&nbsp;
<form method="POST" action="deletefattura.asp">
<input type="Submit" value="elimina fattura">&nbsp;</td>
<input type="Reset" name="btnClear" value="annulla operazione">

Grazie per l'aiuto e per la pazienza.

lullone ha scritto:
Perchè non funge?

Se quello che hai postato è l'html che produci è chiaro che non funziona: i form sono annidati e contengono solo il submit...
Ma un semplice link del tipo:
<a href="updatefatture.asp?idfattura=XXX">Modifica</a>

non va bene?

Matteo Casati
GURU4.net
67 messaggi dal 17 luglio 2002
m.casati ha scritto:
lullone ha scritto:
Perchè non funge?

Se quello che hai postato è l'html che produci è chiaro che non funziona: i form sono annidati e contengono solo il submit...
Ma un semplice link del tipo:
<a href="updatefatture.asp?idfattura=XXX">Modifica</a>

non va bene?

Certo che va bene, ma se volessi farlo con i bottoni quale sarebbe la giusta sintassi?
Grazie Matteo
lullone ha scritto:
se volessi farlo con i bottoni quale sarebbe la giusta sintassi?

Non è che c'è una "sintassi", ci sono semplicemente soluzioni diverse:
1) fai sembrare il link un bottone via css
2) usi del javascript per linkare la pagina da un bottone, tipo: <button onlick="document.location='modificafattura.asp?idfattura=XXX'">Modifica</button>
3) usi un form per ogni azione (?? - bleah!) inserendo uno (o più) campi hidden per passare i valori che ti serve recuperare nella pagina di destinazione, via post (request.form) o get (request.querystring) ed un submit per l'invio
4) usi un solo form con tanti bottoni quante sono le tue azioni; l'onclick di ogni bottone modificherà via javascript l'action del form in modo da mandare alla pagina di modifica/elimina/crea/visualizza/... corrispondente
5) usi un dispatcher, ovvero il form (v. #4) rimanda sempre ad una pagina che - oltre ai dati della fattura necessari per completare l'operazione - riceve anche un codice corrispondente all'azione da eseguire che userà per la redirect sulla pagina corrispondente.

Ce ne sarebbero altre ma credo di averti già confuso a sufficienza le idee

Il punto è che - come quasi sempre - non c'è una soluzione unica, ma la scelta dipende molto da caso a caso...

Matteo Casati
GURU4.net

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.