Ciao a tutti!
Ho creato una pagina (riportata in basso) che consentirebbe di inviare, attraverso form distinti, informazioni generiche e file (es. pdf) e foto (es. gif o jpg).
Il risultato che ottengo è che tutto viene caricato sul DB (tutti i campi testo/combo-box immessi/selezionati), i file (es., pdf + jpg) vengono uplodati sulla cartella public del sito (Aruba come hosting), ma nel DB, in funzione di come faccio la sequenza delle operazioni (es. carico prima la foto e poi la notizia), nei relativi campi "filename" e "fotografia" compare o, per entrambi, il file della foto o, per entrambi, il file del pdf. Insomma: viene fuori una duplicazione.
Presumo che il problema sia dovuto alla funzione setFileName (val), riportata in grassetto in basso, perché andrebbe a scrivere la stessa informazione su entrambi i campi "filename" e "fotografia" del DB. Non sono riuscito a creare un'altra funzione che gestisca in modo distinto i campi di upload files!
Come posso gestirli separatamente? sto "impazzendo"... Mi dareste una mano?
GRAZIE in anticipo.
Saluti,
Davide
Segue il codice:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<!--#include file="Connections/DB.asp" -->
<%
' *** Edit Operations: declare variables
Dim MM_editAction
Dim MM_abortEdit
Dim MM_editQuery
Dim MM_editCmd
Dim MM_editConnection
Dim MM_editTable
Dim MM_editRedirectUrl
Dim MM_editColumn
Dim MM_recordId
Dim MM_fieldsStr
Dim MM_columnsStr
Dim MM_fields
Dim MM_columns
Dim MM_typeArray
Dim MM_formVal
Dim MM_delim
Dim MM_altVal
Dim MM_emptyVal
Dim MM_i
MM_editAction = CStr(Request.ServerVariables("SCRIPT_NAME"))
If (Request.QueryString <> "") Then
MM_editAction = MM_editAction & "?" & Server.HTMLEncode(Request.QueryString)
End If
' boolean to abort record edit
MM_abortEdit = false
' query string to execute
MM_editQuery = ""
%>
<%
' *** Insert Record: set variables
If (CStr(Request("MM_insert")) = "notizia") Then
MM_editConnection = MM_DB_STRING
MM_editTable = "Notizie"
MM_editRedirectUrl = "menu_area_riservata.asp"
MM_fieldsStr = "categoria_news|value|titolo|value|sottotitolo|value|decrizione_breve|value|descrizione|value|fonte|value|data_pubblicazione|value|filename|value|fotografia|value"
MM_columnsStr = "categoria_news|',none,''|titolo|',none,''|sottotitolo|',none,''|descrizione_breve|',none,''|descrizione|',none,''|fonte|',none,''|data_pubblicazione|',none,NULL|file_name|',none,''|fotografia|',none,''"
' create the MM_fields and MM_columns arrays
MM_fields = Split(MM_fieldsStr, "|")
MM_columns = Split(MM_columnsStr, "|")
' set the form values
For MM_i = LBound(MM_fields) To UBound(MM_fields) Step 2
MM_fields(MM_i+1) = CStr(Request.Form(MM_fields(MM_i)))
Next
' append the query string to the redirect URL
If (MM_editRedirectUrl <> "" And Request.QueryString <> "") Then
If (InStr(1, MM_editRedirectUrl, "?", vbTextCompare) = 0 And Request.QueryString <> "") Then
MM_editRedirectUrl = MM_editRedirectUrl & "?" & Request.QueryString
Else
MM_editRedirectUrl = MM_editRedirectUrl & "&" & Request.QueryString
End If
End If
End If
%>
<%
' *** Insert Record: construct a sql insert statement and execute it
Dim MM_tableValues
Dim MM_dbValues
If (CStr(Request("MM_insert")) <> "") Then
' create the sql insert statement
MM_tableValues = ""
MM_dbValues = ""
For MM_i = LBound(MM_fields) To UBound(MM_fields) Step 2
MM_formVal = MM_fields(MM_i+1)
MM_typeArray = Split(MM_columns(MM_i+1),",")
MM_delim = MM_typeArray(0)
If (MM_delim = "none") Then MM_delim = ""
MM_altVal = MM_typeArray(1)
If (MM_altVal = "none") Then MM_altVal = ""
MM_emptyVal = MM_typeArray(2)
If (MM_emptyVal = "none") Then MM_emptyVal = ""
If (MM_formVal = "") Then
MM_formVal = MM_emptyVal
Else
If (MM_altVal <> "") Then
MM_formVal = MM_altVal
ElseIf (MM_delim = "'") Then ' escape quotes
MM_formVal = "'" & Replace(MM_formVal,"'","''") & "'"
Else
MM_formVal = MM_delim + MM_formVal + MM_delim
End If
End If
If (MM_i <> LBound(MM_fields)) Then
MM_tableValues = MM_tableValues & ","
MM_dbValues = MM_dbValues & ","
End If
MM_tableValues = MM_tableValues & MM_columns(MM_i)
MM_dbValues = MM_dbValues & MM_formVal
Next
MM_editQuery = "insert into " & MM_editTable & " (" & MM_tableValues & ") values (" & MM_dbValues & ")"
If (Not MM_abortEdit) Then
' execute the insert
Set MM_editCmd = Server.CreateObject("ADODB.Command")
MM_editCmd.ActiveConnection = MM_editConnection
MM_editCmd.CommandText = MM_editQuery
MM_editCmd.Execute
MM_editCmd.ActiveConnection.Close
If (MM_editRedirectUrl <> "") Then
Response.Redirect(MM_editRedirectUrl)
End If
End If
End If
%>
<%
Dim Inserimento_notizia
Dim Inserimento_notizia_numRows
Set Inserimento_notizia = Server.CreateObject("ADODB.Recordset")
Inserimento_notizia.ActiveConnection = MM_DB_STRING
Inserimento_notizia.Source = "SELECT * FROM Notizie"
Inserimento_notizia.CursorType = 0
Inserimento_notizia.CursorLocation = 2
Inserimento_notizia.LockType = 1
Inserimento_notizia.Open()
Inserimento_notizia_numRows = 0
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Inserimento notizia</title>
<script language="JavaScript" type="text/JavaScript">
<!--
function MM_openBrWindow(theURL,winName,features) { //v2.0
window.open(theURL,winName,features);
}
function MM_findObj(n, d) { //v4.01
var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[n];
for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers.document);
if(!x && d.getElementById) x=d.getElementById(n); return x;
}
function MM_validateForm() { //v4.0
var i,p,q,nm,test,num,min,max,errors='',args=MM_validateForm.arguments;
for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; val=MM_findObj(args);
if (val) { nm=val.name; if ((val=val.value)!="") {
if (test.indexOf('isEmail')!=-1) { p=val.indexOf('@');
if (p<1 || p==(val.length-1)) errors+='- '+nm+' must contain an e-mail address.\n';
} else if (test!='R') { num = parseFloat(val);
if (isNaN(val)) errors+='- '+nm+' must contain a number.\n';
if (test.indexOf('inRange') != -1) { p=test.indexOf(':');
min=test.substring(8,p); max=test.substring(p+1);
if (num<min || max<num) errors+='- '+nm+' must contain a number between '+min+' and '+max+'.\n';
} } } else if (test.charAt(0) == 'R') errors += '- '+nm+' is required.\n'; }
} if (errors) alert('The following error(s) occurred:\n'+errors);
document.MM_returnValue = (errors == '');
}
//-->
</script>
<script language="JavaScript" type="text/JavaScript">
<!--
function setFileName (val)
{
document.notizia.filename.value=val;
document.notizia.fotografia.value=val;
}-->
</script>
<style type="text/css">
<!--
.style1 {
font-size: 16px;
font-weight: bold;
font-style: italic;
}
.style2 {font-size: 24px; font-weight: bold; font-style: italic; }
-->
</style>
</head>
<body>
<p align="center"><img src="images/foto_small.jpg" width="150" height="151" border="0"></p>
<p align="center" class="style1"><span class="style2">AREA RISERVATA</span></p>
<p align="center" class="style1">PAGINA PER L'INSERIMENTO DI UNA NOTIZIA</p>
<form ACTION="<%=MM_editAction%>" method="POST" name="notizia" id="notizia">
<table width="555" align="center">
<tr valign="baseline">
<td align="right" nowrap class="testo">Categoria News :</td>
<td><select name="categoria_news" id="categoria_news" title="<%=(Inserimento_notizia.Fields.Item("categoria_news").Value)%>">
<option value="A">Appuntamenti</option>
<option value="L">Libri</option>
<option value="N">Notizie</option>
<option value="R">Rubriche</option>
</select></td>
</tr>
<tr valign="baseline">
<td align="right" nowrap class="testo">Titolo:</td>
<td><input type="text" name="titolo" value="" size="50">
</td>
</tr>
<tr valign="baseline">
<td align="right" nowrap class="testo">Sottotitolo:</td>
<td><input type="text" name="sottotitolo" value="" size="50">
</td>
</tr>
<tr>
<td align="right" valign="top" nowrap class="testo">Decrizione breve:</td>
<td valign="baseline"><textarea name="decrizione_breve" cols="50" rows="4"></textarea>
</td>
</tr>
<tr valign="baseline">
<td align="right" valign="top" nowrap class="testo">Decrizione completa:</td>
<td><textarea name="descrizione" cols="50" rows="10" id="descrizione"></textarea></td>
</tr>
<tr valign="baseline">
<td align="right" nowrap class="testo">Fonte:</td>
<td><input type="text" name="fonte" value="" size="32"></td>
</tr>
<tr valign="baseline">
<td align="right" nowrap class="testo">Data pubblicazione (gg/mm/aaaa):</td>
<td><input type="text" name="data_pubblicazione" value="<%=date()%>" size="32">
</td>
</tr>
</table>
<p>
<input type="hidden" name="MM_insert" value="notizia">
<input name="filename" type="hidden" id="filename" value=" ">
<input name="fotografia" type="hidden" id="fotografia" value=" ">
</p>
</form>
<form action="../upload/newsOutputFile_img.asp" method="post" enctype="multipart/form-data" name="uploadForm" target="b" class="testo" id="uploadForm">
<div align="center">Seleziona l'immagine da inserire a corredo della news:
<input name="foto" type="file" id="foto" size="40">
<input name="Submit" type="submit" onClick="MM_openBrWindow('','b','resizable=yes,width=200,height=200')" value="Invia">
</div>
</form>
<form action="../upload/newsOutputFile.asp" method="post" enctype="multipart/form-data" name="uploadForm2" target="b" class="testo" id="uploadForm2">
<div align="center">Seleziona l'articolo da inserire a corredo della news:
<input name="blob" type="file" size="40">
<input name="Submit" type="submit" onClick="MM_openBrWindow('','b','resizable=yes,width=200,height=200')" value="Invia">
</div>
</form>
<p align="center">
<input name="Button" type="button" onClick="MM_validateForm('titolo','','R','sottotitolo','','R','data_pubblicazione','','R','decrizione_breve','','R');if (document.MM_returnValue) document.notizia.submit();return document.MM_returnValue" value="Inserisci Notizia">
</p>
<p align="center"><a href="menu_area_riservata.asp">Ritorna al menù dell'Area Riservata</a></p>
</body>
</html>
<%
Inserimento_notizia.Close()
Set Inserimento_notizia = Nothing
%>
Ho creato una pagina (riportata in basso) che consentirebbe di inviare, attraverso form distinti, informazioni generiche e file (es. pdf) e foto (es. gif o jpg).
Il risultato che ottengo è che tutto viene caricato sul DB (tutti i campi testo/combo-box immessi/selezionati), i file (es., pdf + jpg) vengono uplodati sulla cartella public del sito (Aruba come hosting), ma nel DB, in funzione di come faccio la sequenza delle operazioni (es. carico prima la foto e poi la notizia), nei relativi campi "filename" e "fotografia" compare o, per entrambi, il file della foto o, per entrambi, il file del pdf. Insomma: viene fuori una duplicazione.
Presumo che il problema sia dovuto alla funzione setFileName (val), riportata in grassetto in basso, perché andrebbe a scrivere la stessa informazione su entrambi i campi "filename" e "fotografia" del DB. Non sono riuscito a creare un'altra funzione che gestisca in modo distinto i campi di upload files!
Come posso gestirli separatamente? sto "impazzendo"... Mi dareste una mano?

Saluti,
Davide
Segue il codice:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<!--#include file="Connections/DB.asp" -->
<%
' *** Edit Operations: declare variables
Dim MM_editAction
Dim MM_abortEdit
Dim MM_editQuery
Dim MM_editCmd
Dim MM_editConnection
Dim MM_editTable
Dim MM_editRedirectUrl
Dim MM_editColumn
Dim MM_recordId
Dim MM_fieldsStr
Dim MM_columnsStr
Dim MM_fields
Dim MM_columns
Dim MM_typeArray
Dim MM_formVal
Dim MM_delim
Dim MM_altVal
Dim MM_emptyVal
Dim MM_i
MM_editAction = CStr(Request.ServerVariables("SCRIPT_NAME"))
If (Request.QueryString <> "") Then
MM_editAction = MM_editAction & "?" & Server.HTMLEncode(Request.QueryString)
End If
' boolean to abort record edit
MM_abortEdit = false
' query string to execute
MM_editQuery = ""
%>
<%
' *** Insert Record: set variables
If (CStr(Request("MM_insert")) = "notizia") Then
MM_editConnection = MM_DB_STRING
MM_editTable = "Notizie"
MM_editRedirectUrl = "menu_area_riservata.asp"
MM_fieldsStr = "categoria_news|value|titolo|value|sottotitolo|value|decrizione_breve|value|descrizione|value|fonte|value|data_pubblicazione|value|filename|value|fotografia|value"
MM_columnsStr = "categoria_news|',none,''|titolo|',none,''|sottotitolo|',none,''|descrizione_breve|',none,''|descrizione|',none,''|fonte|',none,''|data_pubblicazione|',none,NULL|file_name|',none,''|fotografia|',none,''"
' create the MM_fields and MM_columns arrays
MM_fields = Split(MM_fieldsStr, "|")
MM_columns = Split(MM_columnsStr, "|")
' set the form values
For MM_i = LBound(MM_fields) To UBound(MM_fields) Step 2
MM_fields(MM_i+1) = CStr(Request.Form(MM_fields(MM_i)))
Next
' append the query string to the redirect URL
If (MM_editRedirectUrl <> "" And Request.QueryString <> "") Then
If (InStr(1, MM_editRedirectUrl, "?", vbTextCompare) = 0 And Request.QueryString <> "") Then
MM_editRedirectUrl = MM_editRedirectUrl & "?" & Request.QueryString
Else
MM_editRedirectUrl = MM_editRedirectUrl & "&" & Request.QueryString
End If
End If
End If
%>
<%
' *** Insert Record: construct a sql insert statement and execute it
Dim MM_tableValues
Dim MM_dbValues
If (CStr(Request("MM_insert")) <> "") Then
' create the sql insert statement
MM_tableValues = ""
MM_dbValues = ""
For MM_i = LBound(MM_fields) To UBound(MM_fields) Step 2
MM_formVal = MM_fields(MM_i+1)
MM_typeArray = Split(MM_columns(MM_i+1),",")
MM_delim = MM_typeArray(0)
If (MM_delim = "none") Then MM_delim = ""
MM_altVal = MM_typeArray(1)
If (MM_altVal = "none") Then MM_altVal = ""
MM_emptyVal = MM_typeArray(2)
If (MM_emptyVal = "none") Then MM_emptyVal = ""
If (MM_formVal = "") Then
MM_formVal = MM_emptyVal
Else
If (MM_altVal <> "") Then
MM_formVal = MM_altVal
ElseIf (MM_delim = "'") Then ' escape quotes
MM_formVal = "'" & Replace(MM_formVal,"'","''") & "'"
Else
MM_formVal = MM_delim + MM_formVal + MM_delim
End If
End If
If (MM_i <> LBound(MM_fields)) Then
MM_tableValues = MM_tableValues & ","
MM_dbValues = MM_dbValues & ","
End If
MM_tableValues = MM_tableValues & MM_columns(MM_i)
MM_dbValues = MM_dbValues & MM_formVal
Next
MM_editQuery = "insert into " & MM_editTable & " (" & MM_tableValues & ") values (" & MM_dbValues & ")"
If (Not MM_abortEdit) Then
' execute the insert
Set MM_editCmd = Server.CreateObject("ADODB.Command")
MM_editCmd.ActiveConnection = MM_editConnection
MM_editCmd.CommandText = MM_editQuery
MM_editCmd.Execute
MM_editCmd.ActiveConnection.Close
If (MM_editRedirectUrl <> "") Then
Response.Redirect(MM_editRedirectUrl)
End If
End If
End If
%>
<%
Dim Inserimento_notizia
Dim Inserimento_notizia_numRows
Set Inserimento_notizia = Server.CreateObject("ADODB.Recordset")
Inserimento_notizia.ActiveConnection = MM_DB_STRING
Inserimento_notizia.Source = "SELECT * FROM Notizie"
Inserimento_notizia.CursorType = 0
Inserimento_notizia.CursorLocation = 2
Inserimento_notizia.LockType = 1
Inserimento_notizia.Open()
Inserimento_notizia_numRows = 0
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Inserimento notizia</title>
<script language="JavaScript" type="text/JavaScript">
<!--
function MM_openBrWindow(theURL,winName,features) { //v2.0
window.open(theURL,winName,features);
}
function MM_findObj(n, d) { //v4.01
var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[n];
for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers.document);
if(!x && d.getElementById) x=d.getElementById(n); return x;
}
function MM_validateForm() { //v4.0
var i,p,q,nm,test,num,min,max,errors='',args=MM_validateForm.arguments;
for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; val=MM_findObj(args);
if (val) { nm=val.name; if ((val=val.value)!="") {
if (test.indexOf('isEmail')!=-1) { p=val.indexOf('@');
if (p<1 || p==(val.length-1)) errors+='- '+nm+' must contain an e-mail address.\n';
} else if (test!='R') { num = parseFloat(val);
if (isNaN(val)) errors+='- '+nm+' must contain a number.\n';
if (test.indexOf('inRange') != -1) { p=test.indexOf(':');
min=test.substring(8,p); max=test.substring(p+1);
if (num<min || max<num) errors+='- '+nm+' must contain a number between '+min+' and '+max+'.\n';
} } } else if (test.charAt(0) == 'R') errors += '- '+nm+' is required.\n'; }
} if (errors) alert('The following error(s) occurred:\n'+errors);
document.MM_returnValue = (errors == '');
}
//-->
</script>
<script language="JavaScript" type="text/JavaScript">
<!--
function setFileName (val)
{
document.notizia.filename.value=val;
document.notizia.fotografia.value=val;
}-->
</script>
<style type="text/css">
<!--
.style1 {
font-size: 16px;
font-weight: bold;
font-style: italic;
}
.style2 {font-size: 24px; font-weight: bold; font-style: italic; }
-->
</style>
</head>
<body>
<p align="center"><img src="images/foto_small.jpg" width="150" height="151" border="0"></p>
<p align="center" class="style1"><span class="style2">AREA RISERVATA</span></p>
<p align="center" class="style1">PAGINA PER L'INSERIMENTO DI UNA NOTIZIA</p>
<form ACTION="<%=MM_editAction%>" method="POST" name="notizia" id="notizia">
<table width="555" align="center">
<tr valign="baseline">
<td align="right" nowrap class="testo">Categoria News :</td>
<td><select name="categoria_news" id="categoria_news" title="<%=(Inserimento_notizia.Fields.Item("categoria_news").Value)%>">
<option value="A">Appuntamenti</option>
<option value="L">Libri</option>
<option value="N">Notizie</option>
<option value="R">Rubriche</option>
</select></td>
</tr>
<tr valign="baseline">
<td align="right" nowrap class="testo">Titolo:</td>
<td><input type="text" name="titolo" value="" size="50">
</td>
</tr>
<tr valign="baseline">
<td align="right" nowrap class="testo">Sottotitolo:</td>
<td><input type="text" name="sottotitolo" value="" size="50">
</td>
</tr>
<tr>
<td align="right" valign="top" nowrap class="testo">Decrizione breve:</td>
<td valign="baseline"><textarea name="decrizione_breve" cols="50" rows="4"></textarea>
</td>
</tr>
<tr valign="baseline">
<td align="right" valign="top" nowrap class="testo">Decrizione completa:</td>
<td><textarea name="descrizione" cols="50" rows="10" id="descrizione"></textarea></td>
</tr>
<tr valign="baseline">
<td align="right" nowrap class="testo">Fonte:</td>
<td><input type="text" name="fonte" value="" size="32"></td>
</tr>
<tr valign="baseline">
<td align="right" nowrap class="testo">Data pubblicazione (gg/mm/aaaa):</td>
<td><input type="text" name="data_pubblicazione" value="<%=date()%>" size="32">
</td>
</tr>
</table>
<p>
<input type="hidden" name="MM_insert" value="notizia">
<input name="filename" type="hidden" id="filename" value=" ">
<input name="fotografia" type="hidden" id="fotografia" value=" ">
</p>
</form>
<form action="../upload/newsOutputFile_img.asp" method="post" enctype="multipart/form-data" name="uploadForm" target="b" class="testo" id="uploadForm">
<div align="center">Seleziona l'immagine da inserire a corredo della news:
<input name="foto" type="file" id="foto" size="40">
<input name="Submit" type="submit" onClick="MM_openBrWindow('','b','resizable=yes,width=200,height=200')" value="Invia">
</div>
</form>
<form action="../upload/newsOutputFile.asp" method="post" enctype="multipart/form-data" name="uploadForm2" target="b" class="testo" id="uploadForm2">
<div align="center">Seleziona l'articolo da inserire a corredo della news:
<input name="blob" type="file" size="40">
<input name="Submit" type="submit" onClick="MM_openBrWindow('','b','resizable=yes,width=200,height=200')" value="Invia">
</div>
</form>
<p align="center">
<input name="Button" type="button" onClick="MM_validateForm('titolo','','R','sottotitolo','','R','data_pubblicazione','','R','decrizione_breve','','R');if (document.MM_returnValue) document.notizia.submit();return document.MM_returnValue" value="Inserisci Notizia">
</p>
<p align="center"><a href="menu_area_riservata.asp">Ritorna al menù dell'Area Riservata</a></p>
</body>
</html>
<%
Inserimento_notizia.Close()
Set Inserimento_notizia = Nothing
%>